diff --git a/version3.0/nasal_gc.h b/version3.0/nasal_gc.h index 8581c41..62c850b 100644 --- a/version3.0/nasal_gc.h +++ b/version3.0/nasal_gc.h @@ -22,8 +22,8 @@ public: ~nasal_vector(); void add_elem(int); int del_elem(int); - int get_value_address(int); - int get_mem_address(int); + int get_value_address(int); + int get_mem_address(int); }; class nasal_hash @@ -36,8 +36,8 @@ public: ~nasal_hash(); void add_elem(std::string,int); void del_elem(std::string); - int get_value_address(std::string); - int get_mem_address(std::string); + int get_value_address(std::string); + int get_mem_address(std::string); }; class nasal_function @@ -51,7 +51,7 @@ public: nasal_function(); ~nasal_function(); void set_closure_addr(int); - int get_closure_addr(); + int get_closure_addr(); void set_arguments(nasal_ast&); void set_run_block(nasal_ast&); }; @@ -69,8 +69,8 @@ public: void add_scope(); void del_scope(); void add_new_value(std::string,int); - int get_value_address(std::string); - int get_mem_address(std::string); + int get_value_address(std::string); + int get_mem_address(std::string); }; class nasal_scalar @@ -265,9 +265,9 @@ nasal_function::~nasal_function() function_expr.clear(); return; } -void nasal_function::set_closure_addr(int address) +void nasal_function::set_closure_addr(int value_address) { - closure_addr=address; + closure_addr=value_address; return; } int nasal_function::get_closure_addr() diff --git a/version3.0/nasal_runtime.h b/version3.0/nasal_runtime.h index 7c89926..e713e52 100644 --- a/version3.0/nasal_runtime.h +++ b/version3.0/nasal_runtime.h @@ -170,18 +170,34 @@ int nasal_runtime::function_generation(nasal_ast& node,int local_scope_addr) ref_of_this_function.set_arguments(node.get_children()[0]); ref_of_this_function.set_run_block(node.get_children()[1]); + if(local_scope_addr>=0) + { + nasal_vm.add_reference(local_scope_addr); + ref_of_this_function.set_closure_addr(local_scope_addr); + } return new_addr; } int nasal_runtime::main_progress() { int ret_state=rt_exit_without_error; int expr_number=root.get_children().size(); + int process_returned_value_addr=-1; for(int i=0;i> [runtime] main_progress:cannot use break in main progress."<> [runtime] main_progress:cannot use continue in main progress."<> [runtime] main_progress:error occurred when executing main progress."<