瀏覽代碼

修复了语法错误

Huan 5 年之前
父節點
當前提交
455b57f86d
共有 4 個文件被更改,包括 222 次插入222 次删除
  1. 2 2
      gwarf.c
  2. 83 83
      inter/cfunc.c
  3. 106 106
      inter/interpreter.c
  4. 31 31
      inter/interpreter.h

+ 2 - 2
gwarf.c

@@ -32,12 +32,12 @@ void do_exit(void){
 int main(){
     atexit(*do_exit);
     setup();
-    global_inter = get_inter();  // 拿全局解释器[并声明全局变量]
+    inter *global_inter = get_inter();  // 拿全局解释器[并声明全局变量]
     var_list *the_var = make_var_base(global_inter->global_var);
     the_var->tag = run_class;
     statement_base = make_statement_base(global_inter->global_code);
     
-    login(the_var);
+    login(the_var, global_inter);
 
     parser("/home/songzihuan/test.gwf");
     printf("----start run----\n");

+ 83 - 83
inter/cfunc.c

@@ -45,11 +45,11 @@ int len_intx(unsigned int num){  // 16进制
     return count;
 }
 
-GWARF_value to_object(GWARF_value value, var_list *the_var){  // 把GWARF_value封装成objct
+GWARF_value to_object(GWARF_value value, inter *global_inter){  // 把GWARF_value封装成objct
     if((value.type == CLASS_value) || (value.type == OBJECT_value) || (value.type == FUNC_value) || (value.type == NULL_value)){  // 可以直接返回
         return value;
     }
-    the_var = make_var_base(global_inter->global_var);
+    var_list *the_var = make_var_base(global_inter->global_var);
     GWARF_result func_result = GWARF_result_reset;
     func_result.u = statement_end;
     func_result.value.type = NULL_value;
@@ -95,16 +95,16 @@ GWARF_value to_object(GWARF_value value, var_list *the_var){  // 把GWARF_value
         free(the_var);
         return value;
     }
-    GWARF_value return_tmp = call_back_core(func_result, the_var, pack_value_parameter(value)).value;
+    GWARF_value return_tmp = call_back_core(func_result, the_var, pack_value_parameter(value), global_inter).value;
     free(the_var);
     return return_tmp;
 }
 
 
-GWARF_value to_tuple(GWARF_value value, var_list *the_var){  // 把GWARF_value封装成objct
+GWARF_value to_tuple(GWARF_value value, inter *global_inter){  // 把GWARF_value封装成objct
     GWARF_result func_result = GWARF_result_reset;
     func_result.u = statement_end;
-    the_var = make_var_base(global_inter->global_var);
+    var_list *the_var = make_var_base(global_inter->global_var);
     var *tmp;
     tmp = find_var(the_var, 0, "tuple", NULL);
     if(tmp != NULL){
@@ -114,13 +114,13 @@ GWARF_value to_tuple(GWARF_value value, var_list *the_var){  // 把GWARF_value
         free(the_var);
         return value;
     }
-    GWARF_value return_tmp = call_back_core(func_result, the_var, pack_value_parameter(value)).value;
+    GWARF_value return_tmp = call_back_core(func_result, the_var, pack_value_parameter(value), global_inter).value;
     free(the_var);
     return return_tmp;
 }
 
 
-GWARF_result get_object(parameter *tmp_s, char *name, var_list *the_var){  // 生成一个object
+GWARF_result get_object(parameter *tmp_s, char *name, var_list *the_var, inter *global_inter){  // 生成一个object
     GWARF_result func_result = GWARF_result_reset;
     func_result.u = statement_end;
     func_result.value.type = NULL_value;
@@ -136,10 +136,10 @@ GWARF_result get_object(parameter *tmp_s, char *name, var_list *the_var){  // 
 }
 
 
-GWARF_result to_error(char *error_info, char *error_type, var_list *the_var){  // 把GWARF_value封装成error
+GWARF_result to_error(char *error_info, char *error_type, inter *global_inter){  // 把GWARF_value封装成error
     GWARF_result func_result, return_result = GWARF_result_reset;
     GWARF_value tmp_value = GWARF_value_reset;
-    the_var = make_var_base(global_inter->global_var);
+    var_list *the_var = make_var_base(global_inter->global_var);
 
     tmp_value.type = STRING_value;
     tmp_value.value.string = error_info;
@@ -153,7 +153,7 @@ GWARF_result to_error(char *error_info, char *error_type, var_list *the_var){  /
 
     if(tmp != NULL){
         func_result.value = tmp->value;
-        return_result.value = call_back_core(func_result, the_var, pack_value_parameter(tmp_value)).value;
+        return_result.value = call_back_core(func_result, the_var, pack_value_parameter(tmp_value), global_inter).value;
     }
     else{
         printf("NameError * 2\n");
@@ -301,7 +301,7 @@ GWARF_result object_official_func(func *the_func, parameter *tmp_s, var_list *th
     {
         case __value__func:{  // 若想实现运算必须要有这个方法
             return_value.value.type = STRING_value;  // 取得用于计算的数值
-            return_value.value = to_str(*(father.father), out_var);
+            return_value.value = to_str(*(father.father), out_var, global_inter);
             break;
         }
         case __assignment__func:
@@ -371,7 +371,7 @@ GWARF_result BaseException_official_func(func *the_func, parameter *tmp_s, var_l
                 return_value = tmp_result;
                 goto return_result;
             }
-            tmp.value = to_str(tmp_result.value, out_var);  // 只有一个参数[要针对不同数据类型对此处作出处理]
+            tmp.value = to_str(tmp_result.value, out_var, global_inter);  // 只有一个参数[要针对不同数据类型对此处作出处理]
             assignment_func("ErrorInfo", tmp, login_var, 0, auto_public);  // 注册到self -> ErrorInfo
             return_value.u = statement_end;  // __init__没有return
             break;
@@ -532,7 +532,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = add_func(left_tmp, reight_tmp, out_var);
+            return_value = add_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __sub__func:{
@@ -555,7 +555,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = sub_func(left_tmp, reight_tmp, out_var);
+            return_value = sub_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __subr__func:{
@@ -578,7 +578,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = sub_func(reight_tmp, left_tmp, out_var);  // right和left反过来
+            return_value = sub_func(reight_tmp, left_tmp, out_var, global_inter);  // right和left反过来
             break;
         }
         case __mul__func:{
@@ -601,7 +601,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = mul_func(left_tmp, reight_tmp, out_var);
+            return_value = mul_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __div__func:{
@@ -624,7 +624,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = div_func(left_tmp, reight_tmp, out_var);
+            return_value = div_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __divr__func:{
@@ -647,7 +647,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = div_func(reight_tmp, left_tmp, out_var);  // left和right反过来
+            return_value = div_func(reight_tmp, left_tmp, out_var, global_inter);  // left和right反过来
             break;
         }
         case __eq__func:{
@@ -670,7 +670,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = equal_func(left_tmp, reight_tmp, out_var, 0);
+            return_value = equal_func(left_tmp, reight_tmp, out_var, 0, global_inter);
             break;
         }
         case __more__func:{
@@ -693,7 +693,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = equal_func(left_tmp, reight_tmp, out_var, 1);
+            return_value = equal_func(left_tmp, reight_tmp, out_var, 1, global_inter);
             break;
         }
         case __less__func:{
@@ -716,7 +716,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = equal_func(left_tmp, reight_tmp, out_var, 2);
+            return_value = equal_func(left_tmp, reight_tmp, out_var, 2, global_inter);
             break;
         }
         case __eqmore__func:{
@@ -739,7 +739,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = equal_func(left_tmp, reight_tmp, out_var, 3);
+            return_value = equal_func(left_tmp, reight_tmp, out_var, 3, global_inter);
             break;
         }
         case __eqless__func:{
@@ -762,7 +762,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = equal_func(left_tmp, reight_tmp, out_var, 4);
+            return_value = equal_func(left_tmp, reight_tmp, out_var, 4, global_inter);
             break;
         }
         case __noteq__func:{
@@ -785,7 +785,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = equal_func(left_tmp, reight_tmp, out_var, 5);
+            return_value = equal_func(left_tmp, reight_tmp, out_var, 5, global_inter);
             break;
         }
         case __pow__func:{
@@ -808,7 +808,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = pow_func(left_tmp, reight_tmp, out_var);
+            return_value = pow_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __log__func:{
@@ -831,7 +831,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = log_func(left_tmp, reight_tmp, out_var);
+            return_value = log_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __sqrt__func:{
@@ -854,7 +854,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = sqrt_func(left_tmp, reight_tmp, out_var);
+            return_value = sqrt_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __powr__func:{
@@ -877,7 +877,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = pow_func(reight_tmp, left_tmp, out_var);
+            return_value = pow_func(reight_tmp, left_tmp, out_var, global_inter);
             break;
         }
         case __logr__func:{
@@ -900,7 +900,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = log_func(reight_tmp, left_tmp, out_var);
+            return_value = log_func(reight_tmp, left_tmp, out_var, global_inter);
             break;
         }
         case __sqrtr__func:{
@@ -923,7 +923,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = sqrt_func(reight_tmp, left_tmp, out_var);
+            return_value = sqrt_func(reight_tmp, left_tmp, out_var, global_inter);
             break;
         }
         case __negative__func:{
@@ -936,7 +936,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = negative_func(left_tmp, out_var);
+            return_value = negative_func(left_tmp, out_var, global_inter);
             break;
         }
         case __idiv__func:{
@@ -959,7 +959,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = int_div_func(left_tmp, reight_tmp, out_var);
+            return_value = int_div_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __idivr__func:{
@@ -982,7 +982,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = int_div_func(reight_tmp, left_tmp, out_var);
+            return_value = int_div_func(reight_tmp, left_tmp, out_var, global_inter);
             break;
         }
         case __mod__func:{
@@ -1005,7 +1005,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = mod_func(left_tmp, reight_tmp, out_var);
+            return_value = mod_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __modr__func:{
@@ -1028,7 +1028,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = mod_func(reight_tmp, left_tmp, out_var);
+            return_value = mod_func(reight_tmp, left_tmp, out_var, global_inter);
             break;
         }
 
@@ -1053,7 +1053,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_and_func(left_tmp, reight_tmp, out_var);
+            return_value = bit_and_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __bitor__func:{
@@ -1076,7 +1076,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_or_func(left_tmp, reight_tmp, out_var);
+            return_value = bit_or_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __bitnotor__func:{
@@ -1099,7 +1099,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_notor_func(left_tmp, reight_tmp, out_var);
+            return_value = bit_notor_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __bitleft__func:{
@@ -1122,7 +1122,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_left_func(left_tmp, reight_tmp, out_var);
+            return_value = bit_left_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __bitleftr__func:{
@@ -1145,7 +1145,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_left_func(reight_tmp, left_tmp, out_var);
+            return_value = bit_left_func(reight_tmp, left_tmp, out_var, global_inter);
             break;
         }
         case __bitright__func:{
@@ -1168,7 +1168,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_right_func(left_tmp, reight_tmp, out_var);
+            return_value = bit_right_func(left_tmp, reight_tmp, out_var, global_inter);
             break;
         }
         case __bitrightr__func:{
@@ -1191,7 +1191,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_right_func(reight_tmp, left_tmp, out_var);
+            return_value = bit_right_func(reight_tmp, left_tmp, out_var, global_inter);
             break;
         }
         case __bitnot__func:{
@@ -1204,7 +1204,7 @@ GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *t
                 left_tmp.value.type = NULL_value;
                 left_tmp.value.value.int_value = 0;
             }
-            return_value = bit_not_func(left_tmp, out_var);
+            return_value = bit_not_func(left_tmp, out_var, global_inter);
             break;
         }
         default:
@@ -1262,7 +1262,7 @@ GWARF_result int_official_func(func *the_func, parameter *tmp_s, var_list *the_v
                 goto return_result;
             }
             GWARF_value base_the_var = tmp.value;  // 只有一个参数
-            tmp.value = to_int(tmp_result.value, out_var);  // 只有一个参数[要针对不同数据类型对此处作出处理]
+            tmp.value = to_int(tmp_result.value,out_var,global_inter);  // 只有一个参数[要针对不同数据类型对此处作出处理]
             assignment_func("value", tmp, login_var, 0, auto_public);  // 注册到self
             return_value.u = statement_end;  // __init__没有return
             break;
@@ -1278,7 +1278,7 @@ GWARF_result int_official_func(func *the_func, parameter *tmp_s, var_list *the_v
                 GWARF_result self_value = GWARF_result_reset;
                 var *tmp = find_var(login_var, 0, "value", NULL);
                 if(tmp != NULL){
-                    self_value.value = to_int(tmp->value, out_var);
+                    self_value.value = to_int(tmp->value, out_var, global_inter);
                 }
                 else{
                     self_value.value.type = INT_value;
@@ -1301,7 +1301,7 @@ GWARF_result int_official_func(func *the_func, parameter *tmp_s, var_list *the_v
 }
 
 // to int[底层实现]
-GWARF_value to_int(GWARF_value value, var_list *the_var){
+GWARF_value to_int(GWARF_value value, var_list *the_var, inter *global_inter){
     if((value.type == INT_value)){
         return value;  // 直接返回数据
     }
@@ -1310,7 +1310,7 @@ GWARF_value to_int(GWARF_value value, var_list *the_var){
     return_number.type = INT_value;
 
     if(value.type == OBJECT_value){  // 调用__value__方法
-        return_number = to_int(get__value__(&value, the_var).value, the_var, global_inter);  // 递归
+        return_number = to_int(get__value__(&value, the_var, global_inter).value, the_var, global_inter);  // 递归
     }
     else{
         if(value.type == BOOL_value){
@@ -1379,7 +1379,7 @@ GWARF_result double_official_func(func *the_func, parameter *tmp_s, var_list *th
                 return_value = tmp_result;
                 goto return_result;
             }
-            tmp.value = to_double(tmp_result.value, out_var);  // 只有一个参数[要针对不同数据类型对此处作出处理]
+            tmp.value = to_double(tmp_result.value, out_var, global_inter);  // 只有一个参数[要针对不同数据类型对此处作出处理]
             assignment_func("value", tmp, login_var, 0, auto_public);  // 注册到self
             return_value.u = statement_end;  // __init__没有return
             break;
@@ -1395,7 +1395,7 @@ GWARF_result double_official_func(func *the_func, parameter *tmp_s, var_list *th
                 GWARF_result self_value = GWARF_result_reset;
                 var *tmp = find_var(login_var, 0, "value", NULL);
                 if(tmp != NULL){
-                    self_value.value = to_int(tmp->value, out_var);
+                    self_value.value = to_double(tmp->value, out_var, global_inter);
                 }
                 else{
                     self_value.value.type = NUMBER_value;
@@ -1418,7 +1418,7 @@ GWARF_result double_official_func(func *the_func, parameter *tmp_s, var_list *th
 }
 
 // to double[底层实现]
-GWARF_value to_double(GWARF_value value, var_list *the_var){
+GWARF_value to_double(GWARF_value value, var_list *the_var, inter *global_inter){
     if((value.type == NUMBER_value)){
         return value;  // 直接返回数据
     }
@@ -1427,7 +1427,7 @@ GWARF_value to_double(GWARF_value value, var_list *the_var){
     return_number.type = NUMBER_value;
 
     if(value.type == OBJECT_value){  // 调用__value__方法
-        return_number = to_double(get__value__(&value, the_var).value, the_var, global_inter);  // 递归
+        return_number = to_double(get__value__(&value, the_var, global_inter).value, the_var, global_inter);  // 递归
     }
     else{
         if(value.type == BOOL_value){
@@ -1495,7 +1495,7 @@ GWARF_result str_official_func(func *the_func, parameter *tmp_s, var_list *the_v
                 return_value = tmp_result;
                 goto return_result;
             }
-            tmp.value = to_str(tmp_result.value, out_var);  // 只有一个参数[要针对不同数据类型对此处作出处理]
+            tmp.value = to_str(tmp_result.value, out_var, global_inter);  // 只有一个参数[要针对不同数据类型对此处作出处理]
             assignment_func("value", tmp, login_var, 0, auto_public);  // 注册到self
             return_value.u = statement_end;  // __init__没有return
             break;
@@ -1507,7 +1507,7 @@ GWARF_result str_official_func(func *the_func, parameter *tmp_s, var_list *the_v
 }
 
 // to str[底层实现]
-GWARF_value to_str(GWARF_value value, var_list *the_var){
+GWARF_value to_str(GWARF_value value, var_list *the_var, inter *global_inter){
     if((value.type == STRING_value)){
         return value;  // 直接返回数据
     }
@@ -1516,7 +1516,7 @@ GWARF_value to_str(GWARF_value value, var_list *the_var){
     return_number.type = STRING_value;
 
     if(value.type == OBJECT_value){  // 调用__value__方法
-        return_number = to_str(get__value__(&value, the_var).value, the_var, global_inter);  // 递归
+        return_number = to_str(get__value__(&value, the_var, global_inter).value, the_var, global_inter);  // 递归
     }
     else{
         if(value.type == BOOL_value){
@@ -1558,7 +1558,7 @@ GWARF_value to_str(GWARF_value value, var_list *the_var){
 }
 
 // dict key 带有类型的前缀
-GWARF_value to_str_dict(GWARF_value value, var_list *the_var){
+GWARF_value to_str_dict(GWARF_value value, var_list *the_var, inter *global_inter){
     GWARF_value return_number = GWARF_value_reset;
     return_number.type = STRING_value;
 
@@ -1568,7 +1568,7 @@ GWARF_value to_str_dict(GWARF_value value, var_list *the_var){
         snprintf(return_number.value.string, size, "str_%s", value.value.string);
     }
     else if(value.type == OBJECT_value){  // 调用__value__方法
-        GWARF_value tmp_str = to_str_dict(get__value__(&value, the_var).value, the_var, global_inter);  // 递归
+        GWARF_value tmp_str = to_str_dict(get__value__(&value, the_var, global_inter).value, the_var, global_inter);  // 递归
         size_t size = strlen(tmp_str.value.string) + 2;
         return_number.value.string = calloc(sizeof(char), size);
         snprintf(return_number.value.string, size, "%s", tmp_str.value.string);
@@ -1715,7 +1715,7 @@ GWARF_result bool_official_func(func *the_func, parameter *tmp_s, var_list *the_
                 return_value = tmp_result;
                 goto return_result;
             }
-            tmp.value = to_bool_(tmp_result.value, out_var);  // 只有一个参数[要针对不同数据类型对此处作出处理]
+            tmp.value = to_bool_(tmp_result.value, out_var, global_inter);  // 只有一个参数[要针对不同数据类型对此处作出处理]
             assignment_func("value", tmp, login_var, 0, auto_public);  // 注册到self
             return_value.u = statement_end;  // __init__没有return
             break;
@@ -1731,7 +1731,7 @@ GWARF_result bool_official_func(func *the_func, parameter *tmp_s, var_list *the_
                 GWARF_result self_value = GWARF_result_reset;
                 var *tmp = find_var(login_var, 0, "value", NULL);
                 if(tmp != NULL){
-                    self_value.value = to_bool_(tmp->value, out_var);
+                    self_value.value = to_bool_(tmp->value, out_var, global_inter);
                 }
                 else{
                     self_value.value.type = BOOL_value;
@@ -1754,7 +1754,7 @@ GWARF_result bool_official_func(func *the_func, parameter *tmp_s, var_list *the_
 }
 
 // to bool[底层实现]
-GWARF_value to_bool_(GWARF_value value, var_list *the_var){
+GWARF_value to_bool_(GWARF_value value, var_list *the_var, inter *global_inter){
     if((value.type == BOOL_value)){
         return value;  // 直接返回数据
     }
@@ -1763,10 +1763,10 @@ GWARF_value to_bool_(GWARF_value value, var_list *the_var){
     return_number.type = BOOL_value;
 
     if(value.type == OBJECT_value){  // 调用__value__方法
-        return_number = to_bool_(get__value__(&value, the_var).value, the_var, global_inter);  // 递归
+        return_number = to_bool_(get__value__(&value, the_var, global_inter).value, the_var, global_inter);  // 递归
     }
     else{
-        return_number.value.bool_value = to_bool(value);  // 转换成bool
+        return_number.value.bool_value = to_bool(value, global_inter);  // 转换成bool
     }
     return return_number;
 }
@@ -1832,7 +1832,7 @@ GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the
                     return_value = tmp_result;
                     goto return_result;
                 }
-                tmp.value = to_list(tmp_result.value, out_var);  // 只有一个参数[要针对不同数据类型对此处作出处理]
+                tmp.value = to_list(tmp_result.value, out_var, global_inter);  // 只有一个参数[要针对不同数据类型对此处作出处理]
                 assignment_func("value", tmp, login_var, 0, auto_public);  // 注册到self
                 return_value.u = statement_end;  // __init__没有return
             }
@@ -1840,7 +1840,7 @@ GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the
                 GWARF_result tmp_result = GWARF_result_reset;
                 GWARF_value list_tmp = GWARF_value_reset;
                 list_tmp.type = LIST_value;
-                list_tmp.value.list_value = parameter_to_list(tmp_s, out_var).value.list_value;
+                list_tmp.value.list_value = parameter_to_list(tmp_s, out_var, global_inter).value.list_value;
                 tmp_result.value = list_tmp;
                 assignment_func("value", tmp_result, login_var, 0, auto_public);  // 注册到self
                 return_value.u = statement_end;  // __init__没有return
@@ -1873,7 +1873,7 @@ GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the
                 iter_index = 0;
             }
             else{
-                iter_index = to_int(tmp->value, out_var).value.int_value;
+                iter_index = to_int(tmp->value, out_var, global_inter).value.int_value;
             }
 
             tmp = find_var(login_var, 0, "value", NULL);
@@ -1906,7 +1906,7 @@ GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the
                 }
                 GWARF_value base_the_var = tmp_result.value;  // 只有一个参数
                 get_value = get__value__(&base_the_var, the_var, global_inter);
-                get_value.value = to_int(get_value.value, out_var);
+                get_value.value = to_int(get_value.value, out_var, global_inter);
                 // puts("NONE");
                 return_value.value = tmp->value.value.list_value->list_value[get_value.value.value.int_value];
             }
@@ -1921,7 +1921,7 @@ GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the
             int len = tmp->value.value.list_value->index;
             int start, end;
             if(tmp != NULL){
-                GWARF_result start_result = traverse(tmp_s->u.value, out_var, false), end_result;
+                GWARF_result start_result = traverse(tmp_s->u.value, out_var, false, global_inter), end_result;
                 if(is_error(&start_result)){  // Name Error错误
                     return_value = start_result;
                     goto return_result;
@@ -1931,7 +1931,7 @@ GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the
                     goto return_result;
                 }
 
-                start = to_int(get__value__(&(start_result.value), the_var).value, out_var).value.int_value;
+                start = to_int(get__value__(&(start_result.value), the_var, global_inter).value, out_var, global_inter).value.int_value;
                 tmp_s = tmp_s->next;
                 if(tmp_s != NULL){
                     end_result = traverse(tmp_s->u.value, out_var, false, global_inter);
@@ -1943,7 +1943,7 @@ GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the
                         return_value = end_result;
                         goto return_result;
                     }
-                    end = to_int(get__value__(&(end_result.value), the_var).value, out_var).value.int_value;
+                    end = to_int(get__value__(&(end_result.value), the_var, global_inter).value, out_var, global_inter).value.int_value;
                 }
                 else{
                     end = len;
@@ -2020,7 +2020,7 @@ GWARF_result list_official_func(func *the_func, parameter *tmp_s, var_list *the_
                 }
                 GWARF_value base_the_var = tmp_result.value;  // 只有一个参数
                 get_value = get__value__(&base_the_var, the_var, global_inter);
-                get_value.value = to_int(get_value.value, out_var);
+                get_value.value = to_int(get_value.value, out_var, global_inter);
 
                 tmp_s = tmp_s->next;
                 GWARF_result new_value = traverse(tmp_s->u.value, out_var, false, global_inter);
@@ -2049,7 +2049,7 @@ GWARF_result list_official_func(func *the_func, parameter *tmp_s, var_list *the_
 }
 
 
-GWARF_value to_dict(GWARF_value value, var_list *the_var){
+GWARF_value to_dict(GWARF_value value, var_list *the_var, inter *global_inter){
     if((value.type == DICT_value)){
         return value;  // 直接返回数据
     }
@@ -2058,7 +2058,7 @@ GWARF_value to_dict(GWARF_value value, var_list *the_var){
     return_number.type = DICT_value;
 
     if(value.type == OBJECT_value){  // 调用__value__方法
-        return_number = to_dict(get__value__(&value, the_var).value, the_var, global_inter);  // 递归
+        return_number = to_dict(get__value__(&value, the_var, global_inter).value, the_var, global_inter);  // 递归
     }
     else{
         // 生成一个空的DICT
@@ -2073,7 +2073,7 @@ GWARF_value to_dict(GWARF_value value, var_list *the_var){
     return return_number;
 }
 
-GWARF_value to_list(GWARF_value value, var_list *the_var){
+GWARF_value to_list(GWARF_value value, var_list *the_var, inter *global_inter){
     if((value.type == LIST_value)){
         return value;  // 直接返回数据
     }
@@ -2082,7 +2082,7 @@ GWARF_value to_list(GWARF_value value, var_list *the_var){
     return_number.type = LIST_value;
 
     if(value.type == OBJECT_value){  // 调用__value__方法
-        return_number = to_list(get__value__(&value, the_var).value, the_var, global_inter);  // 递归
+        return_number = to_list(get__value__(&value, the_var, global_inter).value, the_var, global_inter);  // 递归
     }
     else{
         return_number.value.list_value = malloc(sizeof(the_list));
@@ -2093,7 +2093,7 @@ GWARF_value to_list(GWARF_value value, var_list *the_var){
     return return_number;
 }
 
-GWARF_value parameter_to_list(parameter *tmp_s, var_list *the_var){  // 把parameter转换为list
+GWARF_value parameter_to_list(parameter *tmp_s, var_list *the_var, inter *global_inter){  // 把parameter转换为list
     GWARF_value return_list = GWARF_value_reset;
     return_list.type = LIST_value;
     return_list.value.list_value = malloc(sizeof(the_list));
@@ -2137,7 +2137,7 @@ GWARF_value parameter_to_list(parameter *tmp_s, var_list *the_var){  // 把param
     return return_list;
 }
 
-GWARF_value parameter_to_dict(parameter *tmp_s, var_list *the_var){  // 把parameter转换为list
+GWARF_value parameter_to_dict(parameter *tmp_s, var_list *the_var, inter *global_inter){  // 把parameter转换为list
     GWARF_value return_dict = GWARF_value_reset;
     return_dict.type = DICT_value;
     return_dict.value.dict_value = malloc(sizeof(the_dict));
@@ -2161,7 +2161,7 @@ GWARF_value parameter_to_dict(parameter *tmp_s, var_list *the_var){  // 把param
             GWARF_result get, tmp = traverse(tmp_s->u.value, the_var, false, global_inter);  // 不会和下面发生重复计算
             GWARF_value iter_value = get__iter__(&(tmp.value), the_var, global_inter).value;  // 获取迭代object,一般是返回self
             while (1){
-                GWARF_result tmp_next = get__next__(&(iter_value), the_var), tmp_next_down;// 执行__next__的返回值
+                GWARF_result tmp_next = get__next__(&(iter_value), the_var, global_inter), tmp_next_down;// 执行__next__的返回值
                 if(is_error(&tmp_next) || is_space(&tmp_next)){  // TODO:: 检查是否为IterException
                     goto next;  // goto return_value;
                 }
@@ -2179,7 +2179,7 @@ GWARF_value parameter_to_dict(parameter *tmp_s, var_list *the_var){  // 把param
                 before->next = pack_value_parameter(tmp_next_down.value);
                 before->next->u.var = make_statement();
                 before->next->u.var->type = base_var;
-                before->next->u.var->code.base_var.var_name = to_str(tmp_next.value, the_var).value.string;
+                before->next->u.var->code.base_var.var_name = to_str(tmp_next.value, the_var, global_inter).value.string;
                 before->next->u.var->code.base_var.from = NULL;
                 before->next->type = name_value;
                 before = before->next;
@@ -2205,7 +2205,7 @@ GWARF_value parameter_to_dict(parameter *tmp_s, var_list *the_var){  // 把param
         }
         else{
             GWARF_result key_tmp = traverse(tmp_s->u.var, the_var, 0, global_inter);
-            key = to_str_dict(key_tmp.value, the_var).value.string;
+            key = to_str_dict(key_tmp.value, the_var, global_inter).value.string;
         }
         login_node(key, result_tmp.value, return_dict.value.dict_value->dict_value, public);  // 插入
         dict_key *tmp_dict_name = return_dict.value.dict_value->name_list;
@@ -2293,7 +2293,7 @@ GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_
                     return_value = tmp_result;
                     goto return_result;
                 }
-                tmp.value = to_dict(tmp_result.value, out_var);  // 只有一个参数[要针对不同数据类型对此处作出处理]
+                tmp.value = to_dict(tmp_result.value, out_var, global_inter);  // 只有一个参数[要针对不同数据类型对此处作出处理]
                 assignment_func("value", tmp, login_var, 0, auto_public);  // 注册到self
                 return_value.u = statement_end;  // __init__没有return
             }
@@ -2301,7 +2301,7 @@ GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_
                 GWARF_result tmp_result = GWARF_result_reset;
                 GWARF_value dict_tmp = GWARF_value_reset;
                 dict_tmp.type = DICT_value;
-                dict_tmp.value.dict_value = parameter_to_dict(tmp_s, out_var).value.dict_value;
+                dict_tmp.value.dict_value = parameter_to_dict(tmp_s, out_var, global_inter).value.dict_value;
                 tmp_result.value = dict_tmp;
                 assignment_func("value", tmp_result, login_var, 0, auto_public);  // 注册到self
                 return_value.u = statement_end;  // __init__没有return
@@ -2320,7 +2320,7 @@ GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_
                 iter_index = 0;
             }
             else{
-                iter_index = to_int(tmp->value, out_var).value.int_value;
+                iter_index = to_int(tmp->value, out_var, global_inter).value.int_value;
             }
 
             tmp = find_var(login_var, 0, "value", NULL);
@@ -2359,7 +2359,7 @@ GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_
                     return_value = tmp_result;
                     goto break_down;
                 }
-                get_value.value = to_str_dict(tmp_result.value, out_var);
+                get_value.value = to_str_dict(tmp_result.value, out_var, global_inter);
                 var *find_var = find_node(get_value.value.value.string, tmp->value.value.dict_value->dict_value);
                 if(find_var == NULL){  // not found
                     return_value = to_error("Dict key Not Found", "NameException", out_var);
@@ -2386,7 +2386,7 @@ GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_
                     return_value = tmp_result;
                     goto return_result;
                 }
-                get_value.value = to_str_dict(tmp_result.value, out_var);
+                get_value.value = to_str_dict(tmp_result.value, out_var, global_inter);
 
                 tmp_s = tmp_s->next;
                 GWARF_result new_value = traverse(tmp_s->u.value, out_var, false, global_inter);

+ 106 - 106
inter/interpreter.c

@@ -30,10 +30,10 @@ bool is_error(GWARF_result *tmp){  // 判断是否为error
     return false;
 }
 
-bool to_bool(GWARF_value value){
+bool to_bool(GWARF_value value, inter *global_inter){
     double bool_double = 1;  // if bool_double == 0则返回false其他返回true
     if(value.type == OBJECT_value){  // 调用左add方法
-        bool_double = to_bool(get__bool__(&value, NULL).value, global_inter);  // 实际上不需要the_var参数链[没有实参]
+        bool_double = to_bool(get__bool__(&value, NULL, global_inter).value, global_inter);  // 实际上不需要the_var参数链[没有实参]
     }
     else{
         if(value.type == INT_value || value.type == BOOL_value){
@@ -110,14 +110,14 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 return_value = tmp_result;
                 break;
             }
-            if(to_bool(tmp_result.value)){
+            if(to_bool(tmp_result.value,global_inter)){
                 return_value = traverse(the_statement->code.chose_exp.true_do, the_var, false, global_inter);
             }
             else{
                 return_value = traverse(the_statement->code.chose_exp.false_do, the_var, false, global_inter);
             }
             if(!(is_error(&return_value) || is_space(&return_value))){  // Name Error错误
-                return_value.value = to_object(return_value.value, the_var);
+                return_value.value = to_object(return_value.value,global_inter);
             }
             break;
         }
@@ -184,13 +184,13 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
             // base_value返回字面量 -> 主要返回object类型,还会返回GWARF_value的其他类型供生成object类型
             break;
         case base_tuple:  // get value[所有字面量均为这个表达式]
-            return_value.value = to_tuple(parameter_to_list(the_statement->code.base_tuple.value, the_var), the_var);  // code
+            return_value.value = to_tuple(parameter_to_list(the_statement->code.base_tuple.value, the_var,global_inter), global_inter);  // code
             break;
         case base_list:  // get value[所有字面量均为这个表达式]
-            return_value.value = to_object(parameter_to_list(the_statement->code.base_list.value, the_var), the_var);  // code
+            return_value.value = to_object(parameter_to_list(the_statement->code.base_list.value, the_var,global_inter),global_inter);  // code
             break;
         case base_dict:  // get value[所有字面量均为这个表达式]
-            return_value.value = to_object(parameter_to_dict(the_statement->code.base_dict.value, the_var), the_var);  // code
+            return_value.value = to_object(parameter_to_dict(the_statement->code.base_dict.value, the_var,global_inter),global_inter);  // code
             break;
         case slice:{  // get value[所有字面量均为这个表达式]
             GWARF_result tmp_result = traverse((the_statement->code).slice.base_var, the_var, false, global_inter), get;  // 把a[1:2:3]的a取出来
@@ -210,7 +210,7 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 if(tmp != NULL){
                     get.value = tmp->value;
                     get.father = &base_the_var;  // 设置father
-                    return_value = call_back_core(get, the_var, the_statement->code.slice.value, global_inter, global_inter);
+                    return_value = call_back_core(get, the_var, the_statement->code.slice.value, global_inter);
                     goto the_break_slice;
                 }
             }
@@ -219,13 +219,13 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 if(tmp != NULL){
                     get.value = tmp->value;
                     get.father = &base_the_var;  // 设置father
-                    return_value = call_back_core(get, the_var, the_statement->code.slice.value, global_inter, global_inter);
+                    return_value = call_back_core(get, the_var, the_statement->code.slice.value, global_inter);
                     goto the_break_slice;
                 }
             }
 
             the_break_slice: 
-            return_value.value = to_object(return_value.value, the_var);
+            return_value.value = to_object(return_value.value,global_inter);
             // printf("return_value.value.type = %d\n", return_value.value);
             break;
         }
@@ -289,7 +289,7 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 var_error:
                 str_tmp = malloc((size_t)( 21 + strlen(the_statement->code.base_var.var_name) ));
                 sprintf(str_tmp, "name not found [%s]\n", the_statement->code.base_var.var_name);
-                return_value = to_error(str_tmp, "NameException", out_var);
+                return_value = to_error(str_tmp, "NameException",global_inter);
             }
             else if(tmp->lock == protect && the_statement->code.base_var.lock_token == public_token){  // 权限不够
                 goto var_error;
@@ -336,14 +336,14 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
             else if(is_space(&eq_object)){
                 return eq_object;
             }
-            char *str = to_str_dict(eq_object.value, the_var).value.string;
+            char *str = to_str_dict(eq_object.value, the_var, global_inter).value.string;
             printf("str = %s\n", str);
 
             var *tmp = find_var(the_var, from, str, NULL);
             if(tmp == NULL){  // 输出name error[共两处会输出]
                 char *tmp = malloc((size_t)( 21 + strlen(str) ));
                 sprintf(tmp, "name not found [%s]\n", str);
-                return_value = to_error(tmp, "NameException", the_var);
+                return_value = to_error(tmp, "NameException",global_inter);
             }
             else{
                 return_value.value = tmp->value;  // get_var
@@ -378,15 +378,15 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 }
             }
             if(base_the_var.type == CLASS_value){  // is class so that can use "."
-                return_value = traverse_get_value((the_statement->code).point.child_var, base_the_var.value.class_value->the_var, out_var);
+                return_value = traverse_get_value((the_statement->code).point.child_var, base_the_var.value.class_value->the_var, out_var, global_inter);
             }
             else if(base_the_var.type == OBJECT_value){
-                return_value = traverse_get_value((the_statement->code).point.child_var, base_the_var.value.object_value->the_var, out_var);
+                return_value = traverse_get_value((the_statement->code).point.child_var, base_the_var.value.object_value->the_var, out_var, global_inter);
             }
             else if(base_the_var.type == FUNC_value){
                 var_list *old_tmp = base_the_var.value.func_value->self->next;
                 base_the_var.value.func_value->self->next = NULL;  // 暂时断链
-                return_value = traverse_get_value((the_statement->code).point.child_var, base_the_var.value.func_value->self, out_var);
+                return_value = traverse_get_value((the_statement->code).point.child_var, base_the_var.value.func_value->self, out_var, global_inter);
                 base_the_var.value.func_value->self->next = old_tmp;  // 恢复
             }
             else{  // 其他类型 均返回NULL
@@ -407,7 +407,7 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
             *(return_value.father) = base_the_var;
 
             the_break: 
-            return_value.value = to_object(return_value.value, the_var);
+            return_value.value = to_object(return_value.value,global_inter);
             break;
         }
         case down:{
@@ -427,7 +427,7 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 if(tmp != NULL){
                     get.value = tmp->value;
                     get.father = &base_the_var;  // 设置father
-                    return_value = call_back_core(get, the_var, (the_statement->code).down.child_var, global_inter, global_inter);
+                    return_value = call_back_core(get, the_var, (the_statement->code).down.child_var, global_inter);
                     goto the_break_down;
                 }
             }
@@ -436,13 +436,13 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 if(tmp != NULL){
                     get.value = tmp->value;
                     get.father = &base_the_var;  // 设置father
-                    return_value = call_back_core(get, the_var, (the_statement->code).down.child_var, global_inter, global_inter);
+                    return_value = call_back_core(get, the_var, (the_statement->code).down.child_var, global_inter);
                     goto the_break_down;
                 }
             }
 
             the_break_down: 
-            return_value.value = to_object(return_value.value, the_var);  // call_back_core 返回值是object
+            return_value.value = to_object(return_value.value,global_inter);  // call_back_core 返回值是object
             break;
         }
         case def:{
@@ -592,7 +592,7 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                 if(tmp == NULL){
                     break;  // off
                 }
-                read_statement(tmp, the_var, class_tmp->the_var, NULL, lock);
+                read_statement(tmp, the_var, class_tmp->the_var, NULL, lock, global_inter);
                 tmp = tmp->next;
             }
 
@@ -832,7 +832,7 @@ GWARF_result read_statement(statement *the_statement, var_list *the_var, var_lis
                     return_value = tmp_result;
                     break;
                 }
-                return_value.value = to_object(tmp_result.value, the_var);
+                return_value.value = to_object(tmp_result.value,global_inter);
             }
             return_value.value.lock_token = base;
             break;
@@ -919,7 +919,7 @@ GWARF_result include_func(statement *the_statement, var_list *the_var, inter *gl
     GWARF_result return_value = GWARF_result_reset;
     statement *file_statement = the_statement->code.include_import.file;
 
-    GWARF_value file = to_str(traverse(file_statement, the_var, false).value, the_var, global_inter);
+    GWARF_value file = to_str(traverse(file_statement, the_var, false, global_inter).value, the_var, global_inter);
 
     // TODO:: 使用链表来存储
     inter *old_global = global_inter;  // 保存旧迭代器
@@ -932,7 +932,7 @@ GWARF_result include_func(statement *the_statement, var_list *the_var, inter *gl
     
     parser(file.value.string);
     printf("----start run----\n");
-    traverse_global(global_inter->global_code, the_var);
+    traverse_global(global_inter->global_code, the_var, global_inter);
     printf("code end...\n");
 
     global_inter = old_global;  // 变回旧迭代器
@@ -949,7 +949,7 @@ GWARF_result import_func(statement *the_statement, var_list *the_var, inter *glo
     GWARF_result return_value = GWARF_result_reset;
     statement *file_statement = the_statement->code.import_class.file;
     
-    GWARF_value file = to_str(traverse(file_statement, the_var, false).value, the_var, global_inter);
+    GWARF_value file = to_str(traverse(file_statement, the_var, false, global_inter).value, the_var, global_inter);
 
     // TODO:: 使用链表来存储
     inter *old_global = global_inter;  // 保存旧迭代器
@@ -964,7 +964,7 @@ GWARF_result import_func(statement *the_statement, var_list *the_var, inter *glo
     
     parser(file.value.string);
     printf("----start run----\n");
-    traverse_global(global_inter->global_code, new_the_var);
+    traverse_global(global_inter->global_code, new_the_var, global_inter);
     printf("code end...\n");
 
     global_inter = old_global;  // 保存旧迭代器
@@ -1074,7 +1074,7 @@ GWARF_result if_func(if_list *if_base, var_list *the_var, inter *global_inter){
                 break;
             }
 
-            condition = to_bool(tmp_result.value);
+            condition = to_bool(tmp_result.value, global_inter);
             printf("if condition = %d\n", condition);
             if(rego || (condition)){  // condition run success or rego(condition won't do) bug rewent can
                 if_restart:
@@ -1186,7 +1186,7 @@ GWARF_result for_func(statement *the_statement, var_list *the_var, inter *global
                 value = tmp_result;
                 goto return_value;
             }
-            condition = to_bool(tmp_result.value);
+            condition = to_bool(tmp_result.value, global_inter);
             printf("for condition = %d\n", condition);
             if(!condition){
                 break;
@@ -1278,7 +1278,7 @@ GWARF_result assert_func(statement *the_statement, var_list *the_var, inter *glo
         error_value = tmp_result;
         goto return_value;
     }
-    if(to_bool(tmp_result.value)){
+    if(to_bool(tmp_result.value, global_inter)){
         error_value.u = statement_end;
         error_value.value.type = NULL_value;
         error_value.value.value.int_value = 0;
@@ -1295,8 +1295,8 @@ GWARF_result assert_func(statement *the_statement, var_list *the_var, inter *glo
         goto return_value;
     }
 
-    info = to_str(tmp_info.value, the_var);
-    error_value = to_error(info.value.string , "AssertException", the_var);
+    info = to_str(tmp_info.value, the_var, global_inter);
+    error_value = to_error(info.value.string , "AssertException",global_inter);
     error_value.u = error;
 
     return_value: return error_value;
@@ -1309,14 +1309,14 @@ GWARF_result raise_func(statement *the_statement, var_list *the_var, bool not_cl
 
     if(not_class){  // raise
         error_value = traverse(the_statement->code.raise_e.done, the_var, false, global_inter);
-        info = to_str(traverse(the_statement->code.raise_e.info, the_var, false).value, the_var, global_inter);
+        info = to_str(traverse(the_statement->code.raise_e.info, the_var, false, global_inter).value, the_var, global_inter);
     }
     else{  // raise
         GWARF_value tmp = GWARF_value_reset;
         tmp.type = STRING_value;
         tmp.value.string = "throw by user";
         error_value = traverse(the_statement->code.throw_e.done, the_var, false, global_inter);
-        info = to_str(tmp, the_var);
+        info = to_str(tmp, the_var, global_inter);
     }
 
     // restart操作[和continue效果相同]
@@ -1338,7 +1338,7 @@ GWARF_result raise_func(statement *the_statement, var_list *the_var, bool not_cl
         error_value.value = call_back_core(error_value, the_var, pack_value_parameter(info), global_inter).value;
     }
     else{
-        error_value.value = to_object(error_value.value, the_var);  // 直接返回
+        error_value.value = to_object(error_value.value,global_inter);  // 直接返回
     }
 
     return_value: return error_value;
@@ -1359,7 +1359,7 @@ GWARF_result try_func(statement *the_statement, var_list *the_var, inter *global
     // restart操作[和continue效果相同]
 
     if(is_error(&value)){  // 遇到错误->执行except语句[不需要再检查break...]
-        assignment_statement(the_statement->code.try_code.var, the_var, the_var, value);
+        assignment_statement(the_statement->code.try_code.var, the_var, the_var, value,global_inter);
         puts("----except----");
         value = traverse(the_statement->code.try_code.except, the_var, false, global_inter);
         puts("----stop except----");
@@ -1499,7 +1499,7 @@ GWARF_result forin_func(statement *the_statement, var_list *the_var, inter *glob
             break;  // goto return_value;
         }
         else{
-            assignment_statement(the_statement->code.for_in_cycle.var, the_var, the_var,tmp_next);  // 赋值
+            assignment_statement(the_statement->code.for_in_cycle.var, the_var, the_var,tmp_next,global_inter);  // 赋值
         }
         restart_again: 
         puts("----for in----");
@@ -1580,7 +1580,7 @@ GWARF_result while_func(statement *the_statement, var_list *the_var, inter *glob
                 value = tmp_result;
                 goto return_value;
             }
-            condition = to_bool(tmp_result.value);
+            condition = to_bool(tmp_result.value, global_inter);
             printf("while condition = %d\n", condition);
             if(!condition){
                 break;
@@ -1685,11 +1685,11 @@ GWARF_result operation_func(statement *the_statement, var_list *the_var, var_lis
             value = div_func(left_result, right_result, the_var, global_inter);
             break;
         case AADD_func:
-            value = assignment_statement_value(the_statement->code.operation.left_exp, the_var, login_var, to_object(add_func(left_result, right_result, the_var, global_inter).value, the_var), global_inter);
+            value = assignment_statement_value(the_statement->code.operation.left_exp, the_var, login_var, to_object(add_func(left_result, right_result, the_var, global_inter).value, the_var),global_inter);
             // exit(1);
             break;
         case ASUB_func:
-            value = assignment_statement_value(the_statement->code.operation.left_exp, the_var, login_var, to_object(sub_func(left_result, right_result, the_var, global_inter).value, the_var), global_inter);
+            value = assignment_statement_value(the_statement->code.operation.left_exp, the_var, login_var, to_object(sub_func(left_result, right_result, the_var, global_inter).value, the_var),global_inter);
             break;
         case AMUL_func:
             value = assignment_statement_value(the_statement->code.operation.left_exp, the_var, login_var, to_object(mul_func(left_result, right_result, the_var, global_inter).value, the_var), global_inter);
@@ -1803,7 +1803,7 @@ GWARF_result operation_func(statement *the_statement, var_list *the_var, var_lis
             break;
     }
     value.u = statement_end;  // 正常设置[正常语句结束]
-    value.value = to_object(value.value, the_var);  // 返回类型是object[不下放到add func等]
+    value.value = to_object(value.value,global_inter);  // 返回类型是object[不下放到add func等]
     return value;
 }
 
@@ -1811,7 +1811,7 @@ GWARF_result assignment_statement_value(statement *the_statement, var_list *the_
     GWARF_result tmp = GWARF_result_reset;
     tmp.u = statement_end;
     tmp.value = right_value;
-    return assignment_statement(the_statement, the_var, login_var, tmp);
+    return assignment_statement_core(the_statement, the_var, login_var, tmp, false, auto_public, global_inter);
 }
 
 GWARF_result assignment_statement_core(statement *the_statement, var_list *the_var, var_list *login_var, GWARF_result right_result, bool self, int the_lock, inter *global_inter){  // int lock代表的是注册权限,如果是auto_public则根据the_statement来决定权限
@@ -1896,13 +1896,13 @@ GWARF_result assignment_statement_core(statement *the_statement, var_list *the_v
         
         GWARF_value base_the_var = tmp_result.value;  // 不用取value
         if(base_the_var.type == CLASS_value){
-            value = assignment_statement(the_statement->code.point.child_var, the_var, base_the_var.value.class_value->the_var, right_result);
+            value = assignment_statement(the_statement->code.point.child_var, the_var, base_the_var.value.class_value->the_var, right_result,global_inter);
         }
         else if(base_the_var.type == OBJECT_value){
-            value = assignment_statement(the_statement->code.point.child_var, the_var, base_the_var.value.object_value->the_var, right_result);
+            value = assignment_statement(the_statement->code.point.child_var, the_var, base_the_var.value.object_value->the_var, right_result,global_inter);
         }
         else if(base_the_var.type == FUNC_value){
-            value = assignment_statement(the_statement->code.point.child_var, the_var, base_the_var.value.func_value->self, right_result);
+            value = assignment_statement(the_statement->code.point.child_var, the_var, base_the_var.value.func_value->self, right_result,global_inter);
         }
         else{
             return value;  // 对NONE的point运算均为NULL
@@ -1925,7 +1925,7 @@ GWARF_result assignment_statement_core(statement *the_statement, var_list *the_v
                 get.father = &base_the_var;  // 设置father
                 parameter *tmp = the_statement->code.down.child_var;
                 tmp->next = pack_value_parameter(right_result.value);
-                value = call_back_core(get, the_var, tmp, global_inter, global_inter);
+                value = call_back_core(get, the_var, tmp, global_inter);
                 goto the_else;
             }
         }
@@ -1936,14 +1936,14 @@ GWARF_result assignment_statement_core(statement *the_statement, var_list *the_v
                 get.father = &base_the_var;  // 设置father
                 parameter *tmp = the_statement->code.down.child_var;
                 tmp->next = pack_value_parameter(right_result.value);
-                value = call_back_core(get, the_var, tmp, global_inter, global_inter);
+                value = call_back_core(get, the_var, tmp, global_inter);
             }
             else{
                 goto the_else;
             }
         }
         else{
-            the_else: value = to_error("Bad Assignment", "AssignmentException", the_var);  // 赋值错误
+            the_else: value = to_error("Bad Assignment", "AssignmentException",global_inter);  // 赋值错误
             puts("Bad Assignment");
         }
     }
@@ -1983,7 +1983,7 @@ GWARF_result assignment_statement_core(statement *the_statement, var_list *the_v
         if(eq_object.value.type == NULL_value){  // NULL value 不赋值
             return right_result;
         }
-        char *str = to_str_dict(eq_object.value, the_var).value.string;
+        char *str = to_str_dict(eq_object.value, the_var, global_inter).value.string;
         value = assignment_func(str, right_result, login_var, from, the_lock);
         value.base_name = str;  // str来自value,本身就是malloc申请的内存
     }
@@ -1998,7 +1998,7 @@ GWARF_result assignment_statement_core(statement *the_statement, var_list *the_v
         if(eq_object.value.type == NULL_value){  // NULL value 不赋值
             return right_result;
         }
-        char *str = to_str_dict(eq_object.value, the_var).value.string;
+        char *str = to_str_dict(eq_object.value, the_var, global_inter).value.string;
         value = assignment_func(str, right_result, login_var, 0, the_lock);
         value.base_name = str;
     }
@@ -2014,8 +2014,8 @@ GWARF_result call_back(statement *the_statement, var_list *the_var, inter *globa
     else if(is_space(&get)){
         return get;
     }
-    result = call_back_core(get, the_var, the_statement->code.call.parameter_list, global_inter, global_inter);
-    result.value = to_object(result.value, the_var);  // 返回类型是object
+    result = call_back_core(get, the_var, the_statement->code.call.parameter_list, global_inter);
+    result.value = to_object(result.value,global_inter);  // 返回类型是object
     return result;
 }
 
@@ -2048,7 +2048,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                             return tmp;
                         }
                         printf("tmp_x->u.var->type = %d\n", tmp_x->u.var->type);
-                        assignment_statement(tmp_x->u.var, the_var, the_var, tmp);  // 赋值
+                        assignment_statement(tmp_x->u.var, the_var, the_var, tmp,global_inter);  // 赋值
                         tmp_x = tmp_x->next;  // get the next to iter
                     }
                     else if(tmp_x->type == put_args){  // args默认为[]
@@ -2059,7 +2059,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                         if(list_init != NULL){
                             func_result.value = list_init->value;
                         }
-                        assignment_statement(tmp_x->u.var, the_var, the_var,call_back_core(func_result, old_var_list, NULL), global_inter, global_inter);  // old_var_list用于计算from等
+                        assignment_statement(tmp_x->u.var, the_var, the_var,call_back_core(func_result, old_var_list, NULL, global_inter), global_inter);  // old_var_list用于计算from等
                         tmp_x = tmp_x->next;  // get the next to iter
                     }
                     else{
@@ -2078,7 +2078,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                         break;  // 形参录入完毕
                     }
                     if(tmp_x->type == put_kwargs){  // 如果遇到了**kwargs,直接把tmp_var中的哈希表合并
-                        GWARF_value dict_tmp = get_object(NULL, "dict", old_var_list).value;// 生成一个空的dict
+                        GWARF_value dict_tmp = get_object(NULL, "dict", old_var_list, global_inter).value;// 生成一个空的dict
                         hash_var *var_dict = tmp_var->hash_var_base;
                         for(int i = 0;i < MAX_SIZE;i += 1){  // 迭代哈希表
                             var *dict_var_tmp = var_dict->hash[i];
@@ -2107,7 +2107,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                                 if(__down__tmp != NULL){
                                     get.value = __down__tmp->value;
                                     get.father = &(dict_tmp);  // 设置father
-                                    call_back_core(get, old_var_list, tmp, global_inter, global_inter);  // 赋值
+                                    call_back_core(get, old_var_list, tmp, global_inter);  // 赋值
                                 }
                                 dict_var_tmp = dict_var_tmp->next;  // 迭代到下一个
                             }
@@ -2115,13 +2115,13 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                         }
                         GWARF_result dict_result = GWARF_result_reset;
                         dict_result.value = dict_tmp;
-                        assignment_statement(tmp_x->u.var, the_var, the_var, dict_result);
+                        assignment_statement(tmp_x->u.var, the_var, the_var, dict_result,global_inter);
                         tmp_x->next = NULL;  // 理论上没有下一个
                     }
                     else{
-                        GWARF_result tmp_x_var = traverse_get_value(tmp_x->u.var, tmp_var, the_var);  // 使用tmp_x->u.var在tmp_var中获取变量的值
+                        GWARF_result tmp_x_var = traverse_get_value(tmp_x->u.var, tmp_var, the_var, global_inter);  // 使用tmp_x->u.var在tmp_var中获取变量的值
                         if((!is_error(&tmp_x_var)) && (!is_space(&tmp_x_var))){  // 如果找到了,就赋值
-                            GWARF_result tmp = assignment_statement(tmp_x->u.var, the_var, the_var, tmp_x_var);  // tmp_x的外部变量使用the_var
+                            GWARF_result tmp = assignment_statement(tmp_x->u.var, the_var, the_var, tmp_x_var,global_inter);  // tmp_x的外部变量使用the_var
                             if(tmp.base_name != NULL){  // 删除变量
                                 del_var_var_list(tmp_var, 0, tmp.base_name);  // 从中删除变量
                             }
@@ -2131,7 +2131,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                             if(is_error(&tmp) || is_space(&tmp)){
                                 return tmp;
                             }
-                            assignment_statement(tmp_x->u.var, the_var, the_var, tmp);
+                            assignment_statement(tmp_x->u.var, the_var, the_var, tmp,global_inter);
                         }
                         else{
                             puts("[1]warning!!!");
@@ -2156,7 +2156,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
             parameter *before = tmp_s, *after = tmp_s->next;
             GWARF_value iter_value = get__iter__(&(tmp.value), old_var_list, global_inter).value;  // 获取迭代object,一般是返回self
             while (1){
-                GWARF_result tmp_next = get__next__(&(iter_value), old_var_list), tmp_next_down;// 执行__next__的返回值
+                GWARF_result tmp_next = get__next__(&(iter_value), old_var_list, global_inter), tmp_next_down;// 执行__next__的返回值
                 if(is_error(&tmp_next)){  // TODO:: 检查是否为IterException
                     break;  // goto return_value;
                 }
@@ -2171,13 +2171,13 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                 if(__down__tmp != NULL){
                     get.value = __down__tmp->value;
                     get.father = &(tmp.value);  // 设置father
-                    tmp_next_down = call_back_core(get, the_var, pack_value_parameter(tmp_next.value), global_inter, global_inter);
+                    tmp_next_down = call_back_core(get, the_var, pack_value_parameter(tmp_next.value), global_inter);
                 }
 
                 before->next = pack_value_parameter(tmp_next_down.value);
                 before->next->u.var = make_statement();
                 before->next->u.var->type = base_var;
-                before->next->u.var->code.base_var.var_name = to_str(tmp_next.value, old_var_list).value.string;
+                before->next->u.var->code.base_var.var_name = to_str(tmp_next.value, old_var_list, global_inter).value.string;
                 before->next->u.var->code.base_var.from = NULL;
                 before->next->type = name_value;
                 before = before->next;
@@ -2190,8 +2190,8 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
         else if(assignment_type == 0 && tmp_x->type == put_kwargs){  // tmp_s还没到根据name_value的阶段, 遇到了**kwargs,则把后面的所有直接变成dict
             // 放入list中
             GWARF_result dict_tmp = GWARF_result_reset;
-            dict_tmp.value = to_object(parameter_to_dict(tmp_s, old_var_list), old_var_list);  // 把所有name_value变成dict
-            assignment_statement(tmp_x->u.var, the_var, the_var, dict_tmp);
+            dict_tmp.value = to_object(parameter_to_dict(tmp_s, old_var_list, global_inter), global_inter);  // 把所有name_value变成dict
+            assignment_statement(tmp_x->u.var, the_var, the_var, dict_tmp,global_inter);
             assignment_type = 1;  // 进入根据实参赋值模式
             tmp_x = NULL;  // 已经到最后一个了
             tmp_s = NULL;
@@ -2202,7 +2202,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
                 break;
             }
             assignment_type = 1;
-            assignment_statement(tmp_s->u.var, old_var_list, tmp_var, tmp);  // 先赋值到tmp_var上
+            assignment_statement(tmp_s->u.var, old_var_list, tmp_var, tmp,global_inter);  // 先赋值到tmp_var上
             tmp_s = tmp_s->next;
         }
         else if(tmp_s->type == put_args){  // assignment_type不在1模式 -> 把tmp_s列表解释为参数
@@ -2226,8 +2226,8 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
         else if(assignment_type == 0 && tmp_x->type == put_args){  // 形参出现了*args,收归所有无默认值的实参[如果以及开始了根据tmp_s赋值模式,则*args无效]
             // 放入list中
             GWARF_result list_tmp = GWARF_result_reset;
-            list_tmp.value = to_object(parameter_to_list(tmp_s, old_var_list), old_var_list);  // 把所有only_value变成list
-            assignment_statement(tmp_x->u.var, old_var_list, the_var, list_tmp);
+            list_tmp.value = to_object(parameter_to_list(tmp_s, old_var_list, global_inter), global_inter);  // 把所有only_value变成list
+            assignment_statement(tmp_x->u.var, old_var_list, the_var, list_tmp,global_inter);
             assignment_type = 1;  // 进入根据实参赋值模式
             tmp_x = tmp_x->next;
             while(1){
@@ -2241,7 +2241,7 @@ GWARF_result login_var(var_list *the_var, var_list *old_var_list, parameter *tmp
             }
         }
         else if(assignment_type == 0){
-            assignment_statement(tmp_x->u.var, old_var_list, the_var, tmp);
+            assignment_statement(tmp_x->u.var, old_var_list, the_var, tmp,global_inter);
             tmp_x = tmp_x->next;  // get the next to iter
             tmp_s = tmp_s->next;
         }
@@ -2499,9 +2499,9 @@ GWARF_result and_func(statement *left_statement, statement *right_statement, var
     return_value.u = statement_end;
     return_value.value.type = BOOL_value;
 
-    bool left = to_bool(traverse(left_statement, the_var, false).value, global_inter), right;
+    bool left = to_bool(traverse(left_statement, the_var, false, global_inter).value, global_inter), right;
     if(left){
-        right = to_bool(traverse(right_statement, the_var, false).value, global_inter);
+        right = to_bool(traverse(right_statement, the_var, false, global_inter).value, global_inter);
         if(right){
             return_value.value.value.bool_value = true;
         }
@@ -2521,12 +2521,12 @@ GWARF_result or_func(statement *left_statement, statement *right_statement, var_
     return_value.u = statement_end;
     return_value.value.type = BOOL_value;
 
-    bool left = to_bool(traverse(left_statement, the_var, false).value, global_inter), right;
+    bool left = to_bool(traverse(left_statement, the_var, false, global_inter).value, global_inter), right;
     if(left){
         return_value.value.value.bool_value = true;
     }
     else{
-        right = to_bool(traverse(right_statement, the_var, false).value, global_inter);
+        right = to_bool(traverse(right_statement, the_var, false, global_inter).value, global_inter);
         if(right){
             return_value.value.value.bool_value = true;
         }
@@ -2542,7 +2542,7 @@ GWARF_result not_func(GWARF_result right_result, var_list *the_var, inter *globa
     GWARF_result return_value, get;  // the result by call read_statement_list with left and right = GWARF_result_reset; value is the result for and
     return_value.u = statement_end;
     return_value.value.type = BOOL_value;
-    bool right = to_bool(right_result.value);
+    bool right = to_bool(right_result.value, global_inter);
     if(right)
     {
         return_value.value.value.bool_value = false;
@@ -2565,7 +2565,7 @@ GWARF_result bit_and_func(GWARF_result left_result, GWARF_result right_result, v
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
         // goto next if
@@ -2579,7 +2579,7 @@ GWARF_result bit_and_func(GWARF_result left_result, GWARF_result right_result, v
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -2635,7 +2635,7 @@ GWARF_result bit_or_func(GWARF_result left_result, GWARF_result right_result, va
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
         // goto next if
@@ -2649,7 +2649,7 @@ GWARF_result bit_or_func(GWARF_result left_result, GWARF_result right_result, va
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -2706,7 +2706,7 @@ GWARF_result bit_notor_func(GWARF_result left_result, GWARF_result right_result,
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
         // goto next if
@@ -2720,7 +2720,7 @@ GWARF_result bit_notor_func(GWARF_result left_result, GWARF_result right_result,
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -2776,7 +2776,7 @@ GWARF_result bit_left_func(GWARF_result left_result, GWARF_result right_result,
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
         // goto next if
@@ -2790,7 +2790,7 @@ GWARF_result bit_left_func(GWARF_result left_result, GWARF_result right_result,
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -2846,7 +2846,7 @@ GWARF_result bit_right_func(GWARF_result left_result, GWARF_result right_result,
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
         // goto next if
@@ -2860,7 +2860,7 @@ GWARF_result bit_right_func(GWARF_result left_result, GWARF_result right_result,
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -2916,7 +2916,7 @@ GWARF_result bit_not_func(GWARF_result right_result, var_list *the_var, inter *g
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -2967,7 +2967,7 @@ GWARF_result add_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
         // goto next if
@@ -2981,7 +2981,7 @@ GWARF_result add_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3046,7 +3046,7 @@ GWARF_result sub_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3059,7 +3059,7 @@ GWARF_result sub_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3070,7 +3070,7 @@ GWARF_result sub_func(GWARF_result left_result, GWARF_result right_result, var_l
     {
         if(left_result.value.type == NULL_value){
             return_value.u = statement_end;
-            return negative_func(right_result, the_var);  // NULL减法相当于0
+            return negative_func(right_result, the_var, global_inter);  // NULL减法相当于0
         }
         else if(right_result.value.type == NULL_value){
             return_value.u = statement_end;
@@ -3112,7 +3112,7 @@ GWARF_result negative_func(GWARF_result right_result, var_list *the_var, inter *
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3174,7 +3174,7 @@ GWARF_result mul_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3187,7 +3187,7 @@ GWARF_result mul_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3299,7 +3299,7 @@ GWARF_result div_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3312,7 +3312,7 @@ GWARF_result div_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3366,7 +3366,7 @@ GWARF_result mod_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3379,7 +3379,7 @@ GWARF_result mod_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3433,7 +3433,7 @@ GWARF_result int_div_func(GWARF_result left_result, GWARF_result right_result, v
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3446,7 +3446,7 @@ GWARF_result int_div_func(GWARF_result left_result, GWARF_result right_result, v
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3500,7 +3500,7 @@ GWARF_result pow_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3513,7 +3513,7 @@ GWARF_result pow_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3566,7 +3566,7 @@ GWARF_result log_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3579,7 +3579,7 @@ GWARF_result log_func(GWARF_result left_result, GWARF_result right_result, var_l
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3632,7 +3632,7 @@ GWARF_result sqrt_func(GWARF_result left_result, GWARF_result right_result, var_
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3645,7 +3645,7 @@ GWARF_result sqrt_func(GWARF_result left_result, GWARF_result right_result, var_
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;
@@ -3708,7 +3708,7 @@ GWARF_result equal_func(GWARF_result left_result, GWARF_result right_result, var
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(right_result.value), global_inter);
             goto return_back;
         }
     }
@@ -3721,7 +3721,7 @@ GWARF_result equal_func(GWARF_result left_result, GWARF_result right_result, var
         if(tmp != NULL){
             get.value = tmp->value;
             get.father = &base_the_var;  // 设置father
-            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter, global_inter);
+            return_value = call_back_core(get, the_var, pack_value_parameter(left_result.value), global_inter);
         }
         else{
             return_value.u = statement_end;

+ 31 - 31
inter/interpreter.h

@@ -8,7 +8,7 @@
 #define true 1
 #define bool int
 
-#define assignment_statement(the_statement,the_var,login_var,right_result) assignment_statement_core(the_statement,the_var,login_var,right_result,0,auto_public)
+#define assignment_statement(the_statement,the_var,login_var,right_result,global_inter) assignment_statement_core(the_statement,the_var,login_var,right_result,0,auto_public,global_inter)
 #define read_statement_list(the_statement,the_var,global_inter) read_statement(the_statement,the_var,NULL,NULL,lock,global_inter)
 #define run_func(base_the_var,the_var,name,global_inter) run_func_core(base_the_var,the_var,name,false,global_inter)
 #define GWARF_value_reset {.type=NULL_value,.value.int_value=0,.lock_token=base}
@@ -587,21 +587,21 @@ GWARF_result bit_and_func(GWARF_result, GWARF_result, var_list *, inter *);
 double sqrt_(double, double);
 double log_(double, double);
 
-GWARF_value to_int(GWARF_value, var_list *the_var);
-GWARF_value to_double(GWARF_value value, var_list *the_var);
-GWARF_value to_str(GWARF_value value, var_list *the_var);
-GWARF_value to_str_dict(GWARF_value value, var_list *the_var);
-GWARF_value to_bool_(GWARF_value value, var_list *the_var);
-GWARF_value to_list(GWARF_value value, var_list *the_var);
-GWARF_value to_dict(GWARF_value value, var_list *the_var);
-GWARF_value parameter_to_list(parameter *tmp_s, var_list *the_var);
-GWARF_value parameter_to_dict(parameter *tmp_s, var_list *the_var);
+GWARF_value to_int(GWARF_value, var_list *the_var,inter *);
+GWARF_value to_double(GWARF_value value, var_list *the_var,inter *);
+GWARF_value to_str(GWARF_value value, var_list *the_var,inter *);
+GWARF_value to_str_dict(GWARF_value value, var_list *the_var,inter *);
+GWARF_value to_bool_(GWARF_value value, var_list *the_var,inter *);
+GWARF_value to_list(GWARF_value value, var_list *the_var,inter *);
+GWARF_value to_dict(GWARF_value value, var_list *the_var,inter *);
+GWARF_value parameter_to_list(parameter *tmp_s, var_list *the_var, inter *global_inter);
+GWARF_value parameter_to_dict(parameter *tmp_s, var_list *the_var, inter *global_inter);
 
 bool start_with(char *, char *);
 char *del_start(char *, char *);
 GWARF_value key_to_str(char *);
 
-bool to_bool(GWARF_value);
+bool to_bool(GWARF_value, inter *global_inter);
 
 GWARF_result get__value__(GWARF_value *, var_list *, inter *);
 GWARF_result get__bool__(GWARF_value *, var_list *, inter *);
@@ -614,64 +614,64 @@ int len_only_double(double num);
 int len_double(double num);
 int len_int(int num);
 int len_intx(unsigned int num);
-GWARF_value to_object(GWARF_value, var_list *);
-GWARF_result get_object(parameter *, char *, var_list *);
+GWARF_value to_object(GWARF_value, inter *);
+GWARF_result get_object(parameter *, char *, var_list *, inter *);
 class_object *make_object(var_list *the_var, var_list *father_var_list);
 
 void login_official_func(int type, int is_class, var_list *the_var, char *name, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *));
-void login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *));
+void login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *),inter *);
 
 // 内置函数
 GWARF_result official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // object内置类
-class_object *object_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *));
+class_object *object_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *),inter *);
 GWARF_result object_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // gobject内置类
-class_object *gobject_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *gobject_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // int内置类
-class_object *int_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *int_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result int_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // double内置类
-class_object *double_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *double_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result double_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // str内置类
-class_object *str_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *str_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result str_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // bool内置类
-class_object *bool_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *bool_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result bool_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // list内置类
-class_object *tuple_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *tuple_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // list内置类
-class_object *list_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *list_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result list_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // dict内置类
-class_object *dict_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *dict_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
 // 错误内置类
-class_object *BaseException_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list);
+class_object *BaseException_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list,inter *);
 GWARF_result BaseException_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter);
 
-class_object *Exception_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
-class_object *NameException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
-class_object *IterException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
-class_object *AssertException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
-class_object *AssignmentException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter));
+class_object *Exception_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter);
+class_object *NameException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter);
+class_object *IterException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter);
+class_object *AssertException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter);
+class_object *AssignmentException_login_official(var_list *the_var, var_list *father_var_list,inter *global_inter);
 
 // 生成错误
-GWARF_result to_error(char *error_info, char *error_type, var_list *the_var);
+GWARF_result to_error(char *, char *, inter *);
 
 
 bool is_space(GWARF_result *);
@@ -733,7 +733,7 @@ GWARF_result traverse_get_value(statement *, var_list *, var_list *,inter *);
 inter *get_inter();
 void login(var_list *the_var, inter *global_inter);
 
-inter *global_inter;
+// inter *global_inter;
 statement_list *statement_base;
 
 int yyerror(char const *);