Explorar el Código

feat: 加入各类型变量名定义

SongZihuan hace 4 años
padre
commit
1163eddb8d
Se han modificado 4 ficheros con 45 adiciones y 12 borrados
  1. 6 2
      include/inter.h
  2. 0 3
      main.c
  3. 27 2
      src/__run.c
  4. 12 5
      src/inter.c

+ 6 - 2
include/inter.h

@@ -27,7 +27,11 @@ struct Inter{
         char *log_dir;  // 记录log文件夹的位置
         char *var_str_prefix;
         char *var_num_prefix;
-        char *var_defualt;
+        char *var_bool_prefix;
+        char *var_none;
+        char *var_pass;
+        char *var_class_prefix;
+        char *var_object_prefix;
         char *object_init;
         char *object_new;
         char *object_call;
@@ -47,7 +51,7 @@ struct Inter{
 typedef struct Inter Inter;
 typedef struct Statement Statement;
 
-Inter *makeInter(char *debug, struct LinkValue *father);
+Inter *makeInter(char *debug, struct LinkValue *belong);
 void freeInter(Inter *inter, bool show_gc);
 void setBaseInterData(struct Inter *inter);
 int runCodeBlock(char *code_file, Inter *inter);

+ 0 - 3
main.c

@@ -21,9 +21,6 @@ int main(int argc, char *argv[]) {
 
 
 /** TODO-szh List
- * argument 设定 tmp_link
- * __var__ 设定
- * 下标和切片
  * 官方函数
  * 官方类
  * for 循环

+ 27 - 2
src/__run.c

@@ -81,8 +81,33 @@ char *getNameFromValue(Value *value, struct Inter *inter) {
             return setStrVarName(value->data.str.str, false, inter);
         case number:
             return setNumVarName(value->data.num.num, inter);
-        default:
-            return memStrcpy(inter->data.var_defualt);
+        case bool_:
+            if (value->data.bool_.bool_)
+                return memStrcat(inter->data.var_bool_prefix, "true", false, false);
+            else
+                return memStrcat(inter->data.var_bool_prefix, "false", false, false);
+        case none:
+            return memStrcpy(inter->data.var_none);
+        case pass_:
+            return memStrcpy(inter->data.var_pass);
+        case class:{
+            size_t len = memStrlen(inter->data.var_class_prefix) + 20;
+            char *name = memString(len);
+            char *return_ = NULL;
+            snprintf(name, len, "%s%p", inter->data.var_class_prefix, value);
+            return_ = memStrcpy(name);
+            memFree(name);
+            return return_;
+        }
+        default:{
+            size_t len = memStrlen(inter->data.var_object_prefix) + 20;
+            char *name = memString(len);
+            char *return_ = NULL;
+            snprintf(name, len, "%s%p", inter->data.var_object_prefix, value);
+            return_ = memStrcpy(name);
+            memFree(name);
+            return return_;
+        }
     }
 }
 

+ 12 - 5
src/inter.c

@@ -1,6 +1,6 @@
 #include "__virtualmath.h"
 
-Inter *makeInter(char *debug, LinkValue *father) {
+Inter *makeInter(char *debug, LinkValue *belong) {
     Inter *tmp = memCalloc(1, sizeof(Inter));
     LinkValue *base_father = NULL;
     setBaseInterData(tmp);
@@ -35,7 +35,7 @@ Inter *makeInter(char *debug, LinkValue *father) {
 
     {
         Value *global_belong = makeObject(tmp, copyVarList(tmp->var_list, false, tmp), NULL, NULL);
-        base_father = makeLinkValue(global_belong, father, tmp);
+        base_father = makeLinkValue(global_belong, belong, tmp);
         gc_addStatementLink(&base_father->gc_status);
         tmp->base_father = base_father;
     }
@@ -52,7 +52,11 @@ void setBaseInterData(struct Inter *inter){
     inter->data.none = NULL;
     inter->data.var_str_prefix = memStrcpy("str_");
     inter->data.var_num_prefix = memStrcpy("num_");
-    inter->data.var_defualt = memStrcpy("default_var");
+    inter->data.var_none = memStrcpy("none");
+    inter->data.var_pass = memStrcpy("ellipsis");
+    inter->data.var_bool_prefix = memStrcpy("bool_");
+    inter->data.var_class_prefix = memStrcpy("class_");
+    inter->data.var_object_prefix = memStrcpy("obj_");
     inter->data.object_init = memStrcpy("__init__");
     inter->data.object_enter = memStrcpy("__enter__");
     inter->data.object_exit = memStrcpy("__exit__");
@@ -66,7 +70,6 @@ void setBaseInterData(struct Inter *inter){
     inter->data.object_down = memStrcpy("__down__");
     inter->data.object_slice = memStrcpy("__slice__");
     inter->data.default_pt_type = free_;
-
 }
 
 void freeBaseInterData(struct Inter *inter){
@@ -82,7 +85,11 @@ void freeBaseInterData(struct Inter *inter){
     gc_freeStatementLink(&inter->data.dict->gc_status);
     memFree(inter->data.var_num_prefix);
     memFree(inter->data.var_str_prefix);
-    memFree(inter->data.var_defualt);
+    memFree(inter->data.var_object_prefix);
+    memFree(inter->data.var_class_prefix);
+    memFree(inter->data.var_bool_prefix);
+    memFree(inter->data.var_pass);
+    memFree(inter->data.var_none);
     memFree(inter->data.object_init);
     memFree(inter->data.object_enter);
     memFree(inter->data.object_exit);