From ed35e9a5f3554362f28b015335637f03e74430ff Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Tue, 17 Mar 2020 00:46:19 +0800 Subject: [PATCH] update --- version2.0/nasal_gc.h | 7 +++ version2.0/nasal_runtime.h | 90 +++++++++++++++++++++++++++++++++++--- 2 files changed, 90 insertions(+), 7 deletions(-) diff --git a/version2.0/nasal_gc.h b/version2.0/nasal_gc.h index 2ff5175..f831db2 100644 --- a/version2.0/nasal_gc.h +++ b/version2.0/nasal_gc.h @@ -57,6 +57,7 @@ class nasal_vector public: void set_clear(); void vec_push(int); + int get_elem(int); int vec_pop(); int get_size(); void deep_copy(nasal_vector&); @@ -376,6 +377,12 @@ void nasal_vector::vec_push(int addr) nas_array.push_back(addr); return; } +int nasal_vector::get_elem(int addr) +{ + if(0<=addr && addr >& local_scop } else if(node_type==__equal) { + // scalar_function needs 'me' changement here + // but now it is unfinished int child_node_type_1=node.get_children().front().get_node_type(); int child_node_type_2=node.get_children().back().get_node_type(); if(child_node_type_1==__multi_scalar) @@ -530,8 +535,43 @@ int nasal_runtime::calculation(std::list >& local_scop error_interrupt(__multi_assign_incorrect_value_number,node.get_children().back().get_node_line()); return -1; } + // multi assignment doesn't have returned value + // because multi assignment cannot be used in calculation expression for(int i=0;i >& local_scop error_interrupt(__error_value_type,node.get_children().back().get_node_line()); return -1; } - else if(nasal_gc.get_scalar(data_addr).get_vector().size()!=assigned_addrs.size()) + else if(nasal_gc.get_scalar(data_addr).get_vector().get_size()!=assigned_addrs.size()) { error_interrupt(__multi_assign_incorrect_value_number,node.get_children().back().get_node_line()); return -1; } for(int i=0;i >& local_scop case scalar_nil: new_data_addr=nasal_gc.gc_alloc(); nasal_gc.get_scalar(new_data_addr).set_type(scalar_nil); - nasal_gc.reference_delete(data_addr); *assigned_addr=new_data_addr; nasal_gc.reference_add(new_data_addr); ret_addr=new_data_addr; @@ -573,7 +651,6 @@ int nasal_runtime::calculation(std::list >& local_scop new_data_addr=nasal_gc.gc_alloc(); nasal_gc.get_scalar(new_data_addr).set_type(scalar_number); nasal_gc.get_scalar(new_data_addr).get_number().deep_copy(nasal_gc.get_scalar(data_addr).get_number()); - nasal_gc.reference_delete(data_addr); *assigned_addr=new_data_addr; nasal_gc.reference_add(new_data_addr); ret_addr=new_data_addr; @@ -582,7 +659,6 @@ int nasal_runtime::calculation(std::list >& local_scop new_data_addr=nasal_gc.gc_alloc(); nasal_gc.get_scalar(new_data_addr).set_type(scalar_string); nasal_gc.get_scalar(new_data_addr).get_string().deep_copy(nasal_gc.get_scalar(data_addr).get_string()); - nasal_gc.reference_delete(data_addr); *assigned_addr=new_data_addr; nasal_gc.reference_add(new_data_addr); ret_addr=new_data_addr; @@ -591,7 +667,6 @@ int nasal_runtime::calculation(std::list >& local_scop new_data_addr=nasal_gc.gc_alloc(); nasal_gc.get_scalar(new_data_addr).set_type(scalar_function); nasal_gc.get_scalar(new_data_addr).get_function().deep_copy(nasal_gc.get_scalar(data_addr).get_function()); - nasal_gc.reference_delete(data_addr); *assigned_addr=new_data_addr; nasal_gc.reference_add(new_data_addr); ret_addr=new_data_addr; @@ -603,6 +678,7 @@ int nasal_runtime::calculation(std::list >& local_scop ret_addr=data_addr; break; } + nasal_gc.reference_delete(data_addr); return ret_addr; } return -1;