Sfoglia il codice sorgente

refacot: 修改inter记录value的链表

inter记录value的链表改为向前插入形式
所见makeLinkValue等函数的运行时间
SongZihuan 4 anni fa
parent
commit
14289a80c2
2 ha cambiato i file con 20 aggiunte e 26 eliminazioni
  1. 10 13
      vmcore/src/value.c
  2. 10 13
      vmcore/src/var.c

+ 10 - 13
vmcore/src/value.c

@@ -1,8 +1,6 @@
 #include "__run.h"
 
 Value *makeObject(Inter *inter, VarList *object, VarList *out_var, bool set_out_var, Inherit *inherit) {
-    register Value **list_tmp = &inter->base;
-    Value *last;
     Value *tmp;
     MACRO_CALLOC(tmp, 1, sizeof(Value));
     setGC(&tmp->gc_status);
@@ -18,11 +16,11 @@ Value *makeObject(Inter *inter, VarList *object, VarList *out_var, bool set_out_
     tmp->object.out_var = out_var;
     tmp->object.inherit = inherit;
 
-    for (last = NULL; (*list_tmp) != NULL; list_tmp = &(*list_tmp)->gc_next)
-        last = *list_tmp;
-
-    *list_tmp = tmp;
-    tmp->gc_last = last;
+    tmp->gc_next = inter->base;
+    tmp->gc_last = NULL;
+    if (inter->base != NULL)
+        inter->base->gc_last = tmp;
+    inter->base = tmp;
     return tmp;
 }
 
@@ -280,8 +278,6 @@ void freeValue(Value **value) {
 }
 
 LinkValue *makeLinkValue(Value *value, LinkValue *belong, enum ValueAuthority aut, Inter *inter) {  // TODO-szh 为LinkValue添加gc_tmpLink
-    LinkValue **list_tmp = &inter->link_base;
-    LinkValue *last;
     LinkValue *tmp;
     MACRO_CALLOC(tmp, 1, sizeof(LinkValue));
     tmp->belong = belong;
@@ -290,11 +286,12 @@ LinkValue *makeLinkValue(Value *value, LinkValue *belong, enum ValueAuthority au
     setGC(&tmp->gc_status);
 
     inter->data.run_gc ++;
-    for (last = NULL; *list_tmp != NULL; list_tmp = &(*list_tmp)->gc_next)
-        last = *list_tmp;
+    tmp->gc_next = inter->link_base;
+    tmp->gc_last = NULL;
+    if (inter->link_base != NULL)
+        inter->link_base->gc_last = tmp;
+    inter->link_base = tmp;
 
-    *list_tmp = tmp;
-    tmp->gc_last = last;
     tmp->aut = aut;
     return tmp;
 }

+ 10 - 13
vmcore/src/var.c

@@ -1,8 +1,6 @@
 #include "__virtualmath.h"
 
 Var *makeVar(wchar_t *name, LinkValue *value, LinkValue *name_, Inter *inter) {
-    Var **list_tmp = &inter->base_var;
-    Var *last;
     Var *tmp;
     MACRO_CALLOC(tmp, 1, sizeof(Var));
     setGC(&tmp->gc_status);
@@ -12,11 +10,11 @@ Var *makeVar(wchar_t *name, LinkValue *value, LinkValue *name_, Inter *inter) {
     tmp->next = NULL;
     tmp->gc_next = NULL;
 
-    // var 不算入 inter 的 run_gc 中
-    for (last = NULL; *list_tmp !=  NULL; list_tmp = &(*list_tmp)->gc_next)
-        last = *list_tmp;
-    *list_tmp = tmp;
-    tmp->gc_last = last;
+    tmp->gc_next = inter->base_var;
+    tmp->gc_last = NULL;
+    if (inter->base_var != NULL)
+        inter->base_var->gc_last = tmp;
+    inter->base_var = tmp;
     return tmp;
 }
 
@@ -34,8 +32,6 @@ void freeVar(Var **var) {
 }
 
 HashTable *makeHashTable(Inter *inter) {
-    register HashTable **list_tmp = &inter->hash_base;
-    HashTable *last;
     HashTable *tmp;
     MACRO_CALLOC(tmp, 1, sizeof(HashTable));
     MACRO_CALLOC(tmp->hashtable, MAX_SIZE, sizeof(Var *));
@@ -44,10 +40,11 @@ HashTable *makeHashTable(Inter *inter) {
     tmp->gc_next = NULL;
 
     // hashTable 不算入 inter 的 run_gc 中
-    for (last = NULL; *list_tmp != NULL; list_tmp = &(*list_tmp)->gc_next)
-        last = *list_tmp;
-    *list_tmp = tmp;
-    tmp->gc_last = last;
+    tmp->gc_next = inter->hash_base;
+    tmp->gc_last = NULL;
+    if (inter->hash_base != NULL)
+        inter->hash_base->gc_last = tmp;
+    inter->hash_base = tmp;
     return tmp;
 }