Browse Source

feat: 增加了参数错误提示

SongZihuan 4 years ago
parent
commit
c930100a5d
2 changed files with 30 additions and 11 deletions
  1. 10 0
      ofunc/src/sys.c
  2. 20 11
      src/parameter.c

+ 10 - 0
ofunc/src/sys.c

@@ -10,10 +10,20 @@ ResultType vm_super(OfficialFunctionSig){
     if (arg != NULL && arg->next != NULL){
     if (arg != NULL && arg->next != NULL){
         arg_father = arg->data.value->value;
         arg_father = arg->data.value->value;
         arg_child = arg->next->data.value->value;
         arg_child = arg->next->data.value->value;
+        if (arg_child == arg_father) {
+            if (arg_child->object.father != NULL){
+                result->value = copyLinkValue(arg_child->object.father->value, inter);
+                result->type = operation_return;
+                gc_addTmpLink(&result->value->gc_status);
+            } else
+                setResultError(result, inter, "SuperException", "Don't get next father", 0, "sys", father, true);
+            return result->type
+        }
     } else{
     } else{
         setResultError(result, inter, "ArgumentException", "Don't get Enough Argument", 0, "sys", father, true);
         setResultError(result, inter, "ArgumentException", "Don't get Enough Argument", 0, "sys", father, true);
         return error_return;
         return error_return;
     }
     }
+
     for (FatherValue *self_father = arg_child->object.father; self_father != NULL; self_father = self_father->next) {
     for (FatherValue *self_father = arg_child->object.father; self_father != NULL; self_father = self_father->next) {
         if (self_father->value->value == arg_father) {
         if (self_father->value->value == arg_father) {
             if (self_father->next != NULL)
             if (self_father->next != NULL)

+ 20 - 11
src/parameter.c

@@ -472,7 +472,9 @@ ResultType setParameterCore(long int line, char *file, Argument *call, Parameter
         self_ass = 3,
         self_ass = 3,
         mul_par = 4,
         mul_par = 4,
         space_kwargs = 5,
         space_kwargs = 5,
-        error = -1,
+        error_to_less = -1,
+        error_to_more = -2,
+        error_kw = -3,
         finished = 0,
         finished = 0,
     } status = match_status;
     } status = match_status;
     function = copyParameter(function_base);
     function = copyParameter(function_base);
@@ -482,9 +484,12 @@ ResultType setParameterCore(long int line, char *file, Argument *call, Parameter
     while (true){
     while (true){
         if (call == NULL && function == NULL)
         if (call == NULL && function == NULL)
             status = finished;
             status = finished;
-        else if ((call != NULL && (function == NULL || call->type == value_par && function->type == kwargs_par)) ||
-                 (call == NULL && function != NULL && function->type == value_par))
-            status = error;
+        else if (call != NULL && function == NULL)
+            status = error_to_less;
+        else if ((call == NULL && function->type == value_par))
+            status = error_to_more;
+        else if (call != NULL && call->type == value_par && function->type == kwargs_par)
+            status = error_kw;
         else if (call == NULL && function->type == name_par)  // 根据前面的条件, 已经决定function不会为NULL
         else if (call == NULL && function->type == name_par)  // 根据前面的条件, 已经决定function不会为NULL
             status = default_status;
             status = default_status;
         else if (call == NULL && function->type == kwargs_par)
         else if (call == NULL && function->type == kwargs_par)
@@ -530,10 +535,8 @@ ResultType setParameterCore(long int line, char *file, Argument *call, Parameter
                 }
                 }
                 popVarList(tmp);
                 popVarList(tmp);
 
 
-                if (!dict_status && set_num > get_num) {
-                    freeResult(result);
-                    goto error_;
-                }
+                if (!dict_status && set_num > get_num)
+                    goto to_more;
                 break;
                 break;
             }
             }
             case mul_par: {
             case mul_par: {
@@ -555,9 +558,15 @@ ResultType setParameterCore(long int line, char *file, Argument *call, Parameter
                 function = function->next;
                 function = function->next;
                 break;
                 break;
             }
             }
-            case error:
-            error_:  // Statement 处理
-                setResultError(result, inter, "ArgumentException", "Set Argument error", line, file, father, true);
+            case error_to_less:
+                setResultError(result, inter, "ArgumentException", "Too less argument", line, file, father, true);
+                goto return_;
+            case error_to_more:
+            to_more:
+                setResultError(result, inter, "ArgumentException", "Too more argument", line, file, father, true);
+                goto return_;
+            case error_kw:
+                setResultError(result, inter, "ArgumentException", "Value argument for double star", line, file, father, true);
                 goto return_;
                 goto return_;
             default:
             default:
                 goto break_;
                 goto break_;