소스 검색

fix: 修复了null的repo函数

null继承于object, 已经将其移动到object类下
SongZihuan 4 년 전
부모
커밋
a36466632a
4개의 변경된 파일13개의 추가작업 그리고 24개의 파일을 삭제
  1. 0 1
      VirtulMathCore/include/value.h
  2. 13 9
      VirtulMathCore/ofunc/src/object.c
  3. 0 3
      VirtulMathCore/ofunc/src/vobject.c
  4. 0 11
      VirtulMathCore/src/value.c

+ 0 - 1
VirtulMathCore/include/value.h

@@ -189,7 +189,6 @@ void freeValue(Value **Value);
 LinkValue *makeLinkValue(Value *value, LinkValue *belong, Inter *inter);
 void freeLinkValue(LinkValue **value);
 LinkValue *copyLinkValue(LinkValue *value, Inter *inter);
-Value *makeNoneValue(fline line, char *file, INTER_FUNCTIONSIG_NOT_ST);
 Value *useNoneValue(Inter *inter, Result *result);
 Value *makeBoolValue(bool bool_num, fline line, char *file, INTER_FUNCTIONSIG_NOT_ST);
 Value *makePassValue(fline line, char *file, INTER_FUNCTIONSIG_NOT_ST);

+ 13 - 9
VirtulMathCore/ofunc/src/object.c

@@ -30,7 +30,6 @@ ResultType objectRepoStrCore(OFFICAL_FUNCTIONSIG, bool is_repo){
     char *repo;
     char *name;
     char *type;
-    size_t len;
     LinkValue *name_value;
     setResultCore(result);
     parserArgumentUnion(ap, arg, CALL_INTER_FUNCTIONSIG_NOT_ST(var_list, result, belong));
@@ -49,14 +48,19 @@ ResultType objectRepoStrCore(OFFICAL_FUNCTIONSIG, bool is_repo){
     } else
         name = "unknown";
 
-    if (ap[0].value->value->type == class)
-        type = "class";
-    else
-        type = "object";
+    if (ap[0].value->value->type == none) {
+        repo = memStrcpy("null");
+    } else {
+        size_t len;
+        if (ap[0].value->value->type == class)
+            type = "class";
+        else
+            type = "object";
+        len = memStrlen(name) + 30;
+        repo = memCalloc(len, sizeof(char ));
+        snprintf(repo, len, "(%s: %s on %p)", type, name, ap[0].value->value);
+    }
 
-    len = memStrlen(name) + 30;
-    repo = memCalloc(len, sizeof(char ));
-    snprintf(repo, len, "(%s: %s on %p)", type, name, ap[0].value->value);
     makeStringValue(repo, 0, "object.repo", CALL_INTER_FUNCTIONSIG_NOT_ST(var_list, result, belong));
     memFree(repo);
     return result->type;
@@ -101,13 +105,13 @@ void makeBaseObject(Inter *inter, LinkValue *belong){
     }
 
 
-    // TODO-szh base father在这里设置
     {
         Result result;
         Argument *arg = makeValueArgument(makeLinkValue(object, g_belong, inter));
         setResultCore(&result);
         object_new(CALL_OFFICAL_FUNCTION(arg, inter->var_list, &result, g_belong));
 
+        result.value->value->type = none;
         inter->data.none = result.value;
         gc_addStatementLink(&inter->data.none->gc_status);
 

+ 0 - 3
VirtulMathCore/ofunc/src/vobject.c

@@ -158,9 +158,6 @@ ResultType vobject_repo(OFFICAL_FUNCTIONSIG){
             repo = memStrcpy(str);
             break;
         }
-        case none:
-            repo = memStrcpy("(null)");
-            break;
         case class: {
             char str[30] = {};
             snprintf(str, 30, "(class on %p)", value);

+ 0 - 11
VirtulMathCore/src/value.c

@@ -29,17 +29,6 @@ Value *makeObject(Inter *inter, VarList *object, VarList *out_var, Inherit *inhe
     return tmp;
 }
 
-Value *makeNoneValue(fline line, char *file, INTER_FUNCTIONSIG_NOT_ST) {  // TODO-szh 删除该函数
-    Value *tmp;
-    setResultCore(result);
-    callBackCore(inter->data.object, NULL, line, file, CALL_INTER_FUNCTIONSIG_NOT_ST(var_list, result ,belong));
-    if (!CHECK_RESULT(result))
-        return NULL;
-    tmp = result->value->value;
-    tmp->type = none;
-    return tmp;
-}
-
 Value *useNoneValue(Inter *inter, Result *result) {
     LinkValue *tmp = inter->data.none;
     if (result != NULL) {