Example #1
0
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();
}
Example #2
0
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;
	}

}
Example #3
0
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();
}