static void erl_init(int ncpu) { init_benchmarking(); #ifdef ERTS_SMP erts_system_block_init(); #endif erts_init_monitors(); erts_init_gc(); erts_init_time(); erts_init_sys_common_misc(); erts_init_process(ncpu); erts_init_scheduling(use_multi_run_queue, no_schedulers, no_schedulers_online); erts_init_cpu_topology(); /* Must be after init_scheduling */ H_MIN_SIZE = erts_next_heap_size(H_MIN_SIZE, 0); BIN_VH_MIN_SIZE = erts_next_heap_size(BIN_VH_MIN_SIZE, 0); erts_init_trace(); erts_init_binary(); erts_init_bits(); erts_init_fun_table(); init_atom_table(); init_export_table(); init_module_table(); init_register_table(); init_message(); erts_bif_info_init(); erts_ddll_init(); init_emulator(); erts_bp_init(); init_db(); /* Must be after init_emulator */ erts_bif_timer_init(); erts_init_node_tables(); init_dist(); erl_drv_thr_init(); init_io(); init_copy(); init_load(); erts_init_bif(); erts_init_bif_chksum(); erts_init_bif_binary(); erts_init_bif_re(); erts_init_unicode(); /* after RE to get access to PCRE unicode */ erts_delay_trap = erts_export_put(am_erlang, am_delay_trap, 2); erts_late_init_process(); #if HAVE_ERTS_MSEG erts_mseg_late_init(); /* Must be after timer (erts_init_time()) and thread initializations */ #endif #ifdef HIPE hipe_mode_switch_init(); /* Must be after init_load/beam_catches/init */ #endif packet_parser_init(); erl_nif_init(); }
void CG_GGVar::_init() { CG_GGVar& gi(*this); gi.reserve(4*1024); gi.add(new CallableWrapT<String>("1.0 beta"), "sys.VERSION"); gi.add_inner<CallableFunctionCaptureLocal>(); gi.add_inner<CallableFunctionSame>(); gi.add_inner<CallableTableProxyGlobal>(); gi.add_inner<CallableCommandNoop>(); gi.add_inner<CallableFunctionImport>(); gi.add_inner<CallableFunctionClone>(); gi.add_inner<CallableFunctionTypeId>(); gi.add_inner<CallableFunctionIsNil>(); gi.add_inner<CallableFunctionIsTable>(); gi.add_inner<CallableFunctionIsString>(); gi.add_inner<CallableFunctionIsArray>(); gi.add_inner<CallableFunctionIsNumber>(); gi.add_inner<CallableFunctionIsBoolean>(); gi.add_inner<CallableCommandClear>(); gi.add_inner<CallableCommandClc>(); gi.add_inner<CallableCommandExec>(); gi.add_inner<CallableCommandEval>(); gi.add_inner<CallableCommandLoadEwsl>(); gi.add_inner<CallableFunctionAssert>(); gi.add_inner<CallableFunctionHelp>(); gi.add_inner<CallableFunctionTranslate>(); gi.add_inner<CallableFunctionTranslateKT>(); gi.add_inner<CallableFunctionTranslateHT>(); gi.add_inner<CallableFunctionTranslateZT>(); init_module_number(); init_module_string(); init_module_table(); init_module_array(); init_module_io(); init_module_os(); init_module_math(); init_module_logger(); init_module_coroutine(); init_module_regex(); gi.add(NULL,"pcall"); gi.add(NULL,"map"); gi.add(NULL,"map_k"); gi.add(NULL,"reduce"); gi.add(NULL,"reduce_k"); gi.add(NULL,"select"); gi.add(NULL,"join"); gi.add(NULL,"array_concat"); gi.add(NULL, "#internal_end"); _bInited=true; for (size_t i = 0; i < gi.size(); i++) { if (gi.get(i).first == "#internal_end") break; gi.sm_vmap[gi.get(i).first] = new CG_Variable(VAR_SYSTEM, gi.get(i).first); } size_t n = gi.size(); for (size_t i = 0; i < n; i++) { CallableTableEx* p = dynamic_cast<CallableTableEx*>(gi.get(i).second.kptr()); if (!p) continue; String lib = gi.get(i).first; for (VariantTable::const_iterator it=p->value.begin();it!=p->value.end();++it) { gi[lib + "." + (*it).first] = (*it).second; } } Executor ewsl; ewsl.execute( "\n" "function pcall(fn,...)\n" "{\n" " try \n" " return true,fn(...);\n" " catch(...) \n" " return false,...;\n" "};\n" "\n" "function map(x,f)\n" "{\n" " local r=[];\n" " for_each(v in x)\n" " {\n" " r.push(f(v));\n" " }\n" " return r;\n" "};\n" "function map_k(x,f)\n" "{\n" " local r=[];\n" " local k=0;\n" " for_each(v in x)\n" " {\n" " r.push(f(v,k++));\n" " }\n" " return r;\n" "};\n" "\n" "function select(x,f)\n" "{\n" " local r=[];\n" " for_each(v in x)\n" " {\n" " if(f(v)) r.push(v);\n" " }\n" " return r;\n" "};\n" "\n" "function join(s,r)\n" "{\n" " local z=r;\n" " return reduce_k(s,def(x,y,k)\n" " {\n" " return k==0?y#x..z..y;\n" " });\n" "};\n" "function reduce(x,f,n)\n" "{\n" " for_each(v in x)\n" " {\n" " n=f(n,v); \n" " }\n" " return n;\n" "};\n" "function reduce_k(x,f,n)\n" "{\n" " local k=0;\n" " for_each(v in x)\n" " {\n" " n=f(n,v,k++); \n" " }\n" " return n;\n" "};\n" "def array_concat(...)\n" "{\n" " local fn=[];\n" " for_each(v in [...])\n" " {\n" " local n=length(v);\n" " if(n>0) fn[end+1:end+n]=v[:];\n" " }\n" " return fn;\n" "};\n" "\n" "def metatable_call2(v1,v2,fn)\n" "{\n" " local m1=getmetatable(v1);\n" " if(m1!=nil)\n" " {\n" " local k1=m1[fn];\n" " if(k1!=nil)\n" " {\n" " ...=k1(v1,v2);\n" " if([...].length()==1) return ...;\n" " }\n" " }\n" " local m2=getmetatable(v2);\n" " if(m2!=nil)\n" " {\n" " local k2=m2[fn];\n" " if(k2!=nil)\n" " {\n" " ...=k2(v1,v2);\n" " if([...].length()==1) return ...;\n" " }\n" " }\n" " throw 'bad argument to '..fn,v1,v2;\n" "};\n" "\n" "def metatable_call1(v1,fn)\n" "{\n" " local m1=getmetatable(v1);\n" " if(m1!=nil)\n" " {\n" " local k1=m1[fn];\n" " if(k1!=nil)\n" " {\n" " ...=k1(v1);\n" " if([...].length()==1) return ...;\n" " }\n" " }\n" " throw 'bad argument to '..fn,v1;\n" "};\n" ); for(size_t i=0;i<ewsl.tb1.size();i++) { gi[ewsl.tb1.get(i).first]=ewsl.tb1.get(i).second; } }
static void erl_init(int ncpu, int proc_tab_sz, int legacy_proc_tab, int port_tab_sz, int port_tab_sz_ignore_files, int legacy_port_tab) { init_benchmarking(); erts_init_monitors(); erts_init_time(); erts_init_sys_common_misc(); erts_init_process(ncpu, proc_tab_sz, legacy_proc_tab); erts_init_scheduling(no_schedulers, no_schedulers_online); erts_init_cpu_topology(); /* Must be after init_scheduling */ erts_init_gc(); /* Must be after init_scheduling */ erts_alloc_late_init(); H_MIN_SIZE = erts_next_heap_size(H_MIN_SIZE, 0); BIN_VH_MIN_SIZE = erts_next_heap_size(BIN_VH_MIN_SIZE, 0); erts_init_trace(); erts_init_binary(); erts_init_bits(); erts_code_ix_init(); erts_init_fun_table(); init_atom_table(); init_export_table(); init_module_table(); init_register_table(); init_message(); erts_bif_info_init(); erts_ddll_init(); init_emulator(); erts_ptab_init(); /* Must be after init_emulator() */ erts_bp_init(); init_db(); /* Must be after init_emulator */ erts_bif_timer_init(); erts_init_node_tables(); init_dist(); erl_drv_thr_init(); erts_init_async(); erts_init_io(port_tab_sz, port_tab_sz_ignore_files, legacy_port_tab); init_load(); erts_init_bif(); erts_init_bif_chksum(); erts_init_bif_binary(); erts_init_bif_re(); erts_init_unicode(); /* after RE to get access to PCRE unicode */ erts_init_external(); erts_delay_trap = erts_export_put(am_erlang, am_delay_trap, 2); erts_late_init_process(); #if HAVE_ERTS_MSEG erts_mseg_late_init(); /* Must be after timer (erts_init_time()) and thread initializations */ #endif #ifdef HIPE hipe_mode_switch_init(); /* Must be after init_load/beam_catches/init */ #endif packet_parser_init(); erl_nif_init(); }