/*
* Copyright 2012-2015 Sergey Ignatov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.intellij.erlang.bif;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.TreeSet;
public final class ErlangBifTable {
private static final MultiMap<String, ErlangBifDescriptor> bifMap = new MultiMap<String, ErlangBifDescriptor>() {
@NotNull
@Override
protected Collection<ErlangBifDescriptor> createCollection() {
return new TreeSet<>();
}
};
static {
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "abs", 1, "Int", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "adler32", 1, "Data"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "adler32", 2, "OldAdler, Data"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "adler32_combine", 3, "FirstAdler, SecondAdler, SecondSize"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "apply", 3, "Module, Function, Args", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "atom_to_list", 1, "Atom", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_list", 1, "Binary", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_list", 3, "Binary, Start, Stop", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_term", 1, "Binary", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "check_process_code", 2, "Pid, Module", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "crc32", 1, "Data"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "crc32", 2, "OldCrc, Data"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "crc32_combine", 3, "FirstCrc, SecondCrc, SecondSize"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "date", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "delete_module", 1, "Module", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "display", 1, "Term"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "display_string", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "display_nl", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "element", 2, "N, Tuple", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "erase", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "erase", 1, "Key", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "exit", 1, "Reason", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "exit", 2, "Pid, Reason", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "external_size", 1, "Term"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "external_size", 2, "Term, Options"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "float", 1, "Number", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "float_to_list", 1, "Float", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "float_to_list", 2, "Float, Options", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "fun_info", 2, "Fun, Item"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "garbage_collect", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "garbage_collect", 1, "Pid", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "get", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "get", 1, "Key", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "get_keys", 1, "Val", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "group_leader", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "group_leader", 2, "GroupLeader, Pid", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "halt", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "halt", 1, "Status", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "halt", 2, "Status, Options", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "phash", 2, "Term, Range"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "phash2", 1, "Term, Range"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "phash2", 2, "Term, Range"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "hd", 1, "List", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "integer_to_list", 1, "Integer", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_alive", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "length", 1, "List", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "link", 1, "PidOrPort", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_atom", 1, "String", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_binary", 1, "IoList", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_float", 1, "String", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_integer", 1, "String", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_pid", 1, "String", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_tuple", 1, "List", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "loaded", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "localtime", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "localtime_to_universaltime", 2, "Localtime, IsDst"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "make_ref", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "md5", 1, "Data"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "md5_init", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "md5_update", 2, "Context, Data"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "md5_final", 1, "Context"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "module_loaded", 1, "Module", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "function_exported", 3, "Module, Function, Arity"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "monitor_node", 2, "Node, Flag", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "monitor_node", 3, "Node, Flag, Options"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "node", 1, "Arg", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "node", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "nodes", 1, "Arg", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "now", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "open_port", 2, "PortName, PortSettings", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "pid_to_list", 1, "Pid", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "ports", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "pre_loaded", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "process_flag", 2, "Flag :: trap_exit, Boolean", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "process_flag", 3, "Pid, Flag, Value", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "process_info", 1, "Pid", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "process_info", 2, "Pid, ItemList", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "processes", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "purge_module", 1, "Module", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "put", 2, "Key, Val", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "register", 2, "RegName, PidOrPort", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "registered", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "round", 1, "Number", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "self", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "setelement", 3, "Index, Tuple1, Value", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "size", 1, "Item", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "spawn", 3, "Module, Function, Args", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "spawn_link", 3, "Module, Function, Args", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "split_binary", 2, "Bin, Pos", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "statistics", 1, "Item :: context_switches", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "term_to_binary", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "term_to_binary", 2, "Term, Options", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "throw", 1, "Any", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "time", 0, "", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "tl", 1, "List", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "trunc", 1, "Number", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "tuple_to_list", 1, "Tuple", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "universaltime", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "universaltime_to_localtime", 1, "Universaltime"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "unlink", 1, "Id", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "unregister", 1, "RegName", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "whereis", 1, "RegName", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "spawn_opt", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "setnode", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "setnode", 3, "P1, P2, P3"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dist_exit", 3, "P1, P2, P3"));
bifMap.putValue("erts_internal", new ErlangBifDescriptor("erts_internal", "port_info", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_call", 3, "Port, Operation, Data"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_command", 2, "Port, Data", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_command", 3, "Port, Data, OptionList", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_control", 3, "Port, Operation, Data", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_close", 1, "Port", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_connect", 2, "Port, Pid", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_set_data", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_get_data", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "trace_pattern", 2, "MFA, MatchSpec"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "trace_pattern", 3, "MFA, MatchSpec, FlagList"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "trace", 3, "PidSpec, How, FlagList"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "trace_info", 2, "PidOrFunc, Item"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "trace_delivered", 1, "Tracee"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "seq_trace", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "seq_trace_info", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "seq_trace_print", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "seq_trace_print", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "suspend_process", 2, "Suspendee, OptList"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "resume_process", 1, "Suspendee"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "process_display", 2, "Pid, Type"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "bump_reductions", 1, "Reductions"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "cos", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "cosh", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "sin", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "sinh", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "tan", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "tanh", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "acos", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "acosh", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "asin", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "asinh", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "atan", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "atanh", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "erf", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "erfc", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "exp", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "log", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "log10", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "sqrt", 1, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "atan2", 2, "X"));
bifMap.putValue("math", new ErlangBifDescriptor("math", "pow", 2, "X"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "start_timer", 3, "Time, Dest, Msg"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "send_after", 3, "Time, Dest, Msg"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "cancel_timer", 1, "TimerRef"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "read_timer", 1, "TimerRef"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "make_tuple", 2, "Arity, InitialValue"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "append_element", 2, "Tuple1, Term"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "make_tuple", 3, "Arity, DefaultValue, InitList"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "system_flag", 2, "Flag :: backtrace_depth, Depth"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "system_info", 1, "Item :: {allocator_sizes, Alloc}"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "system_monitor", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "system_monitor", 1, "Arg"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "system_monitor", 2, "MonitorPid, Options"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "system_profile", 2, "ProfilerPid, Options"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "system_profile", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "ref_to_list", 1, "Ref"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "port_to_list", 1, "Port"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "fun_to_list", 1, "Fun"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "monitor", 2, "Type, Item", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "demonitor", 1, "MonitorRef", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "demonitor", 2, "MonitorRef, OptionList", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_process_alive", 1, "Pid", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "error", 1, "Reason", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "error", 2, "Reason, Args", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "raise", 3, "Class, Reason, Stacktrace"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "get_stacktrace", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_builtin", 3, "Module, Function, Arity"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "send", 2, "Dest, Msg"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "send", 3, "Dest, Msg, Options"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "append", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "subtract", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_atom", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_list", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_tuple", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_float", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_integer", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_number", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_pid", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_port", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_reference", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_binary", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_function", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_function", 2, "Term, Arity", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_record", 2, "Term, RecordTag", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_record", 3, "Term, RecordTag, Size", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "match_spec_test", 3, "P1, P2, P3"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "all", 0, ""));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "new", 2, "Name, Options"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "delete", 1, "Tab"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "delete", 2, "Tab, Key"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "delete_all_objects", 1, "Tab"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "delete_object", 2, "Tab, Object"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "first", 1, "Tab"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "is_compiled_ms", 1, "Term"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "lookup", 2, "Tab, Key"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "lookup_element", 3, "Tab, Key, Pos"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "info", 1, "Tab"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "info", 2, "Tab, Item"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "last", 1, "Tab"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match", 1, "Continuation"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match", 2, "Tab, Pattern"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match", 3, "Tab, Pattern, Limit"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match_object", 1, "Continuation"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match_object", 2, "Tab, Pattern"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match_object", 3, "Tab, Pattern, Limit"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "member", 2, "Tab, Key"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "next", 2, "Tab, Key1"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "prev", 2, "Tab, Key1"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "insert", 2, "Tab, ObjectOrObjects"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "insert_new", 2, "Tab, ObjectOrObjects"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "rename", 2, "Tab, Name"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "safe_fixtable", 2, "Tab, Fix"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "slot", 2, "Tab, I"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "update_counter", 3, "Tab, Key, Incr"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select", 1, "Continuation"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select", 2, "Tab, MatchSpec"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select", 3, "Tab, MatchSpec, Limit"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select_count", 2, "Tab, MatchSpec"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select_reverse", 1, "Continuation"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select_reverse", 2, "Tab, MatchSpec"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select_reverse", 3, "Tab, MatchSpec, Limit"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "select_delete", 2, "Tab, MatchSpec"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match_spec_compile", 1, "MatchSpec"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "match_spec_run_r", 3, "P1, P2, P3"));
bifMap.putValue("os", new ErlangBifDescriptor("os", "putenv", 2, "VarName, Value"));
bifMap.putValue("os", new ErlangBifDescriptor("os", "getenv", 0, ""));
bifMap.putValue("os", new ErlangBifDescriptor("os", "getenv", 1, "VarName"));
bifMap.putValue("os", new ErlangBifDescriptor("os", "getpid", 0, ""));
bifMap.putValue("os", new ErlangBifDescriptor("os", "timestamp", 0, ""));
bifMap.putValue("erl_ddll", new ErlangBifDescriptor("erl_ddll", "try_load", 3, "Path, Name, OptionList"));
bifMap.putValue("erl_ddll", new ErlangBifDescriptor("erl_ddll", "try_unload", 2, "Name, OptionList"));
bifMap.putValue("erl_ddll", new ErlangBifDescriptor("erl_ddll", "loaded_drivers", 0, ""));
bifMap.putValue("erl_ddll", new ErlangBifDescriptor("erl_ddll", "info", 2, "Name, Tag"));
bifMap.putValue("erl_ddll", new ErlangBifDescriptor("erl_ddll", "format_error_int", 1, "P1"));
bifMap.putValue("erl_ddll", new ErlangBifDescriptor("erl_ddll", "monitor", 2, "Tag, Item", true));
bifMap.putValue("erl_ddll", new ErlangBifDescriptor("erl_ddll", "demonitor", 1, "MonitorRef", true));
bifMap.putValue("re", new ErlangBifDescriptor("re", "compile", 1, "Regexp"));
bifMap.putValue("re", new ErlangBifDescriptor("re", "compile", 2, "Regexp, Options"));
bifMap.putValue("re", new ErlangBifDescriptor("re", "run", 2, "Subject, RE"));
bifMap.putValue("re", new ErlangBifDescriptor("re", "run", 3, "Subject, RE, Options"));
bifMap.putValue("lists", new ErlangBifDescriptor("lists", "member", 2, "Elem, List"));
bifMap.putValue("lists", new ErlangBifDescriptor("lists", "reverse", 2, "List1, Tail"));
bifMap.putValue("lists", new ErlangBifDescriptor("lists", "keymember", 3, "Key, N, TupleList"));
bifMap.putValue("lists", new ErlangBifDescriptor("lists", "keysearch", 3, "Key, N, TupleList"));
bifMap.putValue("lists", new ErlangBifDescriptor("lists", "keyfind", 3, "Key, N, TupleList"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "disassemble", 1, "P1"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "breakpoint", 2, "P1, P2"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "same", 2, "P1, P2"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "flat_size", 1, "P1"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "get_internal_state", 1, "P1"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "set_internal_state", 2, "P1, P2"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "display", 1, "P1"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "dist_ext_to_term", 2, "P1, P2"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "instructions", 0, ""));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "dump_monitors", 1, "P1"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "dump_links", 1, "P1"));
bifMap.putValue("erts_debug", new ErlangBifDescriptor("erts_debug", "lock_counters", 1, "P1"));
// Since R8
bifMap.putValue("code", new ErlangBifDescriptor("code", "get_chunk", 2, "P1, P2"));
bifMap.putValue("code", new ErlangBifDescriptor("code", "module_md5", 1, "P1"));
bifMap.putValue("code", new ErlangBifDescriptor("code", "make_stub_module", 3, "P1, P2, P3"));
bifMap.putValue("code", new ErlangBifDescriptor("code", "is_module_native", 1, "Module"));
// Since R9C
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "hibernate", 3, "Module, Function, Args"));
bifMap.putValue("error_logger", new ErlangBifDescriptor("error_logger", "warning_map", 0, ""));
// Since R10B
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "get_module_info", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "get_module_info", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_boolean", 1, "Term", true));
bifMap.putValue("string", new ErlangBifDescriptor("string", "to_integer", 1, "String"));
bifMap.putValue("string", new ErlangBifDescriptor("string", "to_float", 1, "String"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "make_fun", 3, "P1, P2, P3"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "iolist_size", 1, "Item", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "iolist_to_binary", 1, "IoListOrBinary", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_existing_atom", 1, "String", true));
// Since R12B-0
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "is_bitstring", 1, "Term", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "tuple_size", 1, "Tuple", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "byte_size", 1, "Bitstring", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "bit_size", 1, "Bitstring", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_bitstring", 1, "BitstringList", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "bitstring_to_list", 1, "Bitstring", true));
// Since R12B-2
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "update_element", 3, "Tab, Key, ElementSpec :: [{Pos, Value}]"));
// Since R12B-4
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "decode_packet", 3, "Type, Bin, Options"));
// Since R12B-5
bifMap.putValue("unicode", new ErlangBifDescriptor("unicode", "characters_to_binary", 2, "Data, InEncoding"));
bifMap.putValue("unicode", new ErlangBifDescriptor("unicode", "characters_to_list", 2, "Data, InEncoding"));
bifMap.putValue("unicode", new ErlangBifDescriptor("unicode", "bin_is_7bit", 1, "P1"));
// Since R13A
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "atom_to_binary", 2, "Atom, Encoding", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_atom", 2, "Binary, Encoding", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_existing_atom", 2, "Binary, Encoding", true));
bifMap.putValue("net_kernel", new ErlangBifDescriptor("net_kernel", "dflag_unicode_io", 1, "P1"));
// Since R13B-1
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "give_away", 3, "Tab, Pid, GiftData"));
bifMap.putValue("ets", new ErlangBifDescriptor("ets", "setopts", 2, "Tab, Opts"));
// Since R13B3
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "load_nif", 2, "Path, LoadInfo"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "call_on_load_function", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "finish_after_on_load", 2, "P1, P2"));
// Since R13B4
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_term", 2, "Binary, Opts", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_part", 2, "Subject, PosLen", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_part", 3, "Subject, Start, Length", true));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "compile_pattern", 1, "Pattern"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "match", 2, "Subject, Pattern"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "match", 3, "Subject, Pattern, Options"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "matches", 2, "Subject, Pattern"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "matches", 3, "Subject, Pattern, Options"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "longest_common_prefix", 1, "Binaries"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "longest_common_suffix", 1, "Binaries"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "first", 1, "Subject"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "last", 1, "Subject"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "at", 2, "Subject, Pos"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "part", 2, "Subject, PosLen"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "part", 3, "Subject, Pos, Len"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "bin_to_list", 1, "Subject"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "bin_to_list", 2, "Subject, PosLen"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "bin_to_list", 3, "Subject, Pos, Len"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "list_to_bin", 1, "ByteList"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "copy", 1, "Subject"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "copy", 2, "Subject, N"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "referenced_byte_size", 1, "Binary"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "encode_unsigned", 1, "Unsigned"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "encode_unsigned", 2, "Unsigned, Endianess"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "decode_unsigned", 1, "Subject"));
bifMap.putValue("binary", new ErlangBifDescriptor("binary", "decode_unsigned", 2, "Subject, Endianess"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "nif_error", 1, "Reason"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "nif_error", 2, "Reason, Args"));
bifMap.putValue("prim_file", new ErlangBifDescriptor("prim_file", "internal_name2native", 1, "P1"));
bifMap.putValue("prim_file", new ErlangBifDescriptor("prim_file", "internal_native2name", 1, "P1"));
bifMap.putValue("prim_file", new ErlangBifDescriptor("prim_file", "internal_normalize_utf8", 1, "P1"));
bifMap.putValue("prim_file", new ErlangBifDescriptor("prim_file", "is_translatable", 1, "P1"));
bifMap.putValue("file", new ErlangBifDescriptor("file", "native_name_encoding", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "check_old_code", 1, "Module", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "universaltime_to_posixtime", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "posixtime_to_universaltime", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dt_put_tag", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dt_get_tag", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dt_get_tag_data", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dt_spread_tag", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dt_restore_tag", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dt_prepend_vm_tag_data", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "dt_append_vm_tag_data", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "prepare_loading", 2, "P1, P2"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "finish_loading", 1, "P1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "insert_element", 3, "Index, Tuple1, Term"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "delete_element", 2, "Index, Tuple1"));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_integer", 1, "Binary", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_integer", 2, "Binary, Base", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "integer_to_binary", 1, "Integer", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "list_to_integer", 2, "String, Base", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "float_to_binary", 1, "Float", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "float_to_binary", 2, "Float, Options", true));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "binary_to_float", 1, "Binary", true));
bifMap.putValue("io", new ErlangBifDescriptor("io", "printable_range", 0, ""));
bifMap.putValue("erlang", new ErlangBifDescriptor("erlang", "hash", 2, "Term, Range"));
putLagerFunctionsToBifMap();
putGeneratedInfo();
}
public static final String MODULE_INFO = "module_info";
private static void putGeneratedInfo() {
bifMap.putValue("", new ErlangBifDescriptor("", "record_info", 2, "Key, Record", true));
bifMap.putValue("", new ErlangBifDescriptor("", MODULE_INFO, 0, "", true));
bifMap.putValue("", new ErlangBifDescriptor("", MODULE_INFO, 1, "Key", true));
}
private static void putLagerFunctionsToBifMap() {
putLagerFunctionsToBifMap(1, "What");
putLagerFunctionsToBifMap(2, "Str, Args");
putLagerFunctionsToBifMap(3, "Attrs, Str, Args");
}
private static void putLagerFunctionsToBifMap(int arity, String params) {
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "debug", arity, params));
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "info", arity, params));
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "notice", arity, params));
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "warning", arity, params));
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "error", arity, params));
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "critical", arity, params));
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "alert", arity, params));
bifMap.putValue("lager", new ErlangBifDescriptor("lager", "emergency", arity, params));
}
private ErlangBifTable() {
}
@NotNull
public static Collection<ErlangBifDescriptor> getBifs(@NotNull String moduleName) {
return bifMap.get(moduleName);
}
@NotNull
public static Collection<ErlangBifDescriptor> getAutoimportedBifs(@NotNull String moduleName) {
return ContainerUtil.filter(bifMap.get(moduleName), ErlangBifDescriptor::isAutoImported);
}
@NotNull
public static List<ErlangBifDescriptor> getBifs(@NotNull String moduleName, @NotNull String functionName) {
List<ErlangBifDescriptor> bifDescriptors = new ArrayList<>();
for (ErlangBifDescriptor bifDescriptor : bifMap.get(moduleName)) {
if (functionName.equals(bifDescriptor.getName())) {
bifDescriptors.add(bifDescriptor);
}
}
return bifDescriptors;
}
@Nullable
public static ErlangBifDescriptor getBif(@NotNull String moduleName, @NotNull String functionName, int arity) {
for (ErlangBifDescriptor bifDescriptor : getBifs(moduleName, functionName)) {
if (arity == bifDescriptor.getArity()) {
return bifDescriptor;
}
}
return null;
}
public static boolean isBif(@NotNull String moduleName, @NotNull String functionName, int arity) {
Collection<ErlangBifDescriptor> erlangBifDescriptors = bifMap.get(moduleName);
for (ErlangBifDescriptor bifDescriptor : erlangBifDescriptors) {
if (bifDescriptor.getModule().equals(moduleName) && bifDescriptor.getName().equals(functionName) &&
bifDescriptor.getArity() == arity) {
return true;
}
}
return false;
}
}