From 0d17a4e90b2516514ebeab4affa35556ba5dc79a Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Sat, 3 Oct 2020 00:00:54 -0700 Subject: [PATCH] update --- version3.0/nasal_runtime.h | 124 +++++++++++++++---------------------- 1 file changed, 50 insertions(+), 74 deletions(-) diff --git a/version3.0/nasal_runtime.h b/version3.0/nasal_runtime.h index f7885c9..5449882 100644 --- a/version3.0/nasal_runtime.h +++ b/version3.0/nasal_runtime.h @@ -10,43 +10,12 @@ enum runtime_returned_state rt_exit_without_error }; -#define BUILTIN_FUNC_NUM 29 -std::string builtin_func_name[BUILTIN_FUNC_NUM]= -{ - "nasal_call_builtin_std_cout", - "nasal_call_builtin_push_back", - "nasal_call_builtin_set_size", - "nasal_call_builtin_system", - "nasal_call_builtin_input", - "nasal_call_builtin_sleep", - "nasal_call_builtin_finput", - "nasal_call_builtin_foutput", - "nasal_call_builtin_split", - "nasal_call_builtin_rand", - "nasal_call_builtin_get_id", - "nasal_call_builtin_trans_int", - "nasal_call_builtin_trans_num", - "nasal_call_builtin_pop_back", - "nasal_call_builtin_trans_str", - "nasal_call_builtin_size", - "nasal_call_builtin_xor", - "nasal_call_builtin_and", - "nasal_call_builtin_or", - "nasal_call_builtin_nand", - "nasal_call_builtin_not", - "nasal_call_builtin_sin", - "nasal_call_builtin_cos", - "nasal_call_builtin_tan", - "nasal_call_builtin_exp", - "nasal_call_builtin_cpp_math_ln", - "nasal_call_builtin_cpp_math_sqrt", - "nasal_call_builtin_cpp_atan2", - "nasal_call_builtin_time" -}; - class nasal_runtime { +// this is the number of builtin functions +#define BUILTIN_FUNC_NUM 29 private: + std::map builtin_func_hashmap; // function_return_address is an address in garbage_collector_memory int function_returned_address; // global_scope_address is an address in garbage_collector_memory @@ -129,6 +98,7 @@ private: int builtin_sqrt(int); int builtin_atan2(int); int builtin_time(int); + void load_builtin_function(); public: nasal_runtime(); ~nasal_runtime(); @@ -141,6 +111,7 @@ nasal_runtime::nasal_runtime() error=0; this->root.clear(); this->global_scope_address=-1; + this->load_builtin_function(); return; } nasal_runtime::~nasal_runtime() @@ -148,6 +119,49 @@ nasal_runtime::~nasal_runtime() error=0; this->root.clear(); this->global_scope_address=-1; + this->builtin_func_hashmap.clear(); + return; +} +void nasal_runtime::load_builtin_function() +{ + struct FUNC_TABLE + { + std::string func_name; + int (nasal_runtime::*func_pointer)(int x); + } builtin_func_table[BUILTIN_FUNC_NUM]= + { + {"nasal_call_builtin_std_cout", nasal_runtime::builtin_print}, + {"nasal_call_builtin_push_back", nasal_runtime::builtin_append}, + {"nasal_call_builtin_set_size", nasal_runtime::builtin_setsize}, + {"nasal_call_builtin_system", nasal_runtime::builtin_system}, + {"nasal_call_builtin_input", nasal_runtime::builtin_input}, + {"nasal_call_builtin_sleep", nasal_runtime::builtin_sleep}, + {"nasal_call_builtin_finput", nasal_runtime::builtin_finput}, + {"nasal_call_builtin_foutput", nasal_runtime::builtin_foutput}, + {"nasal_call_builtin_split", nasal_runtime::builtin_split}, + {"nasal_call_builtin_rand", nasal_runtime::builtin_rand}, + {"nasal_call_builtin_get_id", nasal_runtime::builtin_id}, + {"nasal_call_builtin_trans_int", nasal_runtime::builtin_int}, + {"nasal_call_builtin_trans_num", nasal_runtime::builtin_num}, + {"nasal_call_builtin_pop_back", nasal_runtime::builtin_pop}, + {"nasal_call_builtin_trans_str", nasal_runtime::builtin_str}, + {"nasal_call_builtin_size", nasal_runtime::builtin_size}, + {"nasal_call_builtin_xor", nasal_runtime::builtin_xor}, + {"nasal_call_builtin_and", nasal_runtime::builtin_and}, + {"nasal_call_builtin_or", nasal_runtime::builtin_or}, + {"nasal_call_builtin_nand", nasal_runtime::builtin_nand}, + {"nasal_call_builtin_not", nasal_runtime::builtin_not}, + {"nasal_call_builtin_sin", nasal_runtime::builtin_sin}, + {"nasal_call_builtin_cos", nasal_runtime::builtin_cos}, + {"nasal_call_builtin_tan", nasal_runtime::builtin_tan}, + {"nasal_call_builtin_exp", nasal_runtime::builtin_exp}, + {"nasal_call_builtin_cpp_math_ln", nasal_runtime::builtin_ln}, + {"nasal_call_builtin_cpp_math_sqrt", nasal_runtime::builtin_sqrt}, + {"nasal_call_builtin_cpp_atan2", nasal_runtime::builtin_atan2}, + {"nasal_call_builtin_time", nasal_runtime::builtin_time} + }; + for(int i=0;i*builtin_func_hashmap[builtin_name])(local_scope_addr); return ret_value_addr; } int nasal_runtime::call_scalar_mem(nasal_ast& node,int local_scope_addr)