Browse Source

refactor: free类函数去除参数 bool self

SongZihuan 4 years ago
parent
commit
f34a6d562c
10 changed files with 36 additions and 52 deletions
  1. 1 1
      include/inter.h
  2. 3 3
      include/lexical.h
  3. 1 1
      include/var.h
  4. 1 4
      main.c
  5. 7 13
      parser/lexical.c
  6. 7 11
      parser/token.c
  7. 4 5
      src/inter.c
  8. 3 3
      src/runfile.c
  9. 2 2
      src/value.c
  10. 7 9
      src/var.c

+ 1 - 1
include/inter.h

@@ -25,7 +25,7 @@ typedef struct Inter Inter;
 typedef struct Statement Statement;
 
 Inter *makeInter(char *debug);
-void freeInter(Inter *inter, bool self, bool show_gc);
+void freeInter(Inter *inter, bool show_gc);
 void setBaseInterData(struct Inter *inter);
 int runCodeBlock(char *code_file, Inter *inter);
 void runParser(char *code_file, Inter *inter, Statement **st);

+ 3 - 3
include/lexical.h

@@ -41,14 +41,14 @@ int readChar(LexFile *file);
 void backChar(LexFile *file);
 
 LexFile *makeLexFile(char *dir);
-void freeLexFile(LexFile *file, bool self);
+void freeLexFile(LexFile *file);
 
 void setupMather(LexMather *mather);
 LexMather *makeMather();
-void freeMather(LexMather *mather, bool self);
+void freeMather(LexMather *mather);
 
 LexMathers *makeMathers(int size);
-void freeMathers(LexMathers *mathers, bool self);
+void freeMathers(LexMathers *mathers);
 void setupMathers(LexMathers *mathers);
 int checkoutMather(LexMathers *mathers, int max);
 #endif //VIRTUALMATH_LEXICAL_H

+ 1 - 1
include/var.h

@@ -44,7 +44,7 @@ HashTable *makeHashTable(Inter *inter);
 void freeHashTable(HashTable **value);
 
 VarList *makeVarList(Inter *inter);
-VarList *freeVarList(VarList *vl, bool self);
+VarList *freeVarList(VarList *vl);
 
 HASH_INDEX time33(char *key);
 LinkValue *findVar(char *name, bool del_var, INTER_FUNCTIONSIG_CORE);

+ 1 - 4
main.c

@@ -13,7 +13,7 @@ int main(int argc, char *argv[]) {
     inter = makeInter(args.log_file);
     for (int status=0; status == 0 && argv[optind] != NULL; optind++)
         status = runCodeBlock(argv[optind], inter);
-    freeInter(inter, true, true);
+    freeInter(inter, true);
 
     args_error: freeArgs();
     return 0;
@@ -24,9 +24,6 @@ int main(int argc, char *argv[]) {
  * TODO-szh 断言
  * TODO-szh 代码块
  * TODO-szh 类super语句
- * TODO-szh const声明
- * TODO-szh 生成语法树
  * TODO-szh 取反符号 -
  * TODO-szh 字面量后缀
- * TODO-szh 去掉free的self参数
  */

+ 7 - 13
parser/lexical.c

@@ -34,12 +34,10 @@ LexFile *makeLexFile(char *dir){
     return tmp;
 }
 
-void freeLexFile(LexFile *file, bool self){
+void freeLexFile(LexFile *file) {
     freeBase(file, return_);
     fclose(file->file);
-    if (self){
-        memFree(file);
-    }
+    memFree(file);
     return_:
     return;
 }
@@ -62,13 +60,11 @@ LexMather *makeMather(){
     return tmp;
 }
 
-void freeMather(LexMather *mather, bool self){
+void freeMather(LexMather *mather) {
     memFree(mather->str);
     memFree(mather->second_str);
     mather->len = 0;
-    if (self){
-        memFree(mather);
-    }
+    memFree(mather);
 }
 
 LexMathers *makeMathers(int size){
@@ -81,16 +77,14 @@ LexMathers *makeMathers(int size){
     return tmp;
 }
 
-void freeMathers(LexMathers *mathers, bool self){
+void freeMathers(LexMathers *mathers) {
     freeBase(mathers, return_);
     for(int i=0;i < mathers->size; i++){
-        freeMather(mathers->mathers[i], true);
+        freeMather(mathers->mathers[i]);
     }
     memFree(mathers->mathers);
     mathers->size = 0;
-    if (self){
-        memFree(mathers);
-    }
+    memFree(mathers);
     return_:
     return;
 }

+ 7 - 11
parser/token.c

@@ -47,17 +47,13 @@ TokenStream *makeTokenStream(){
     return tmp;
 }
 
-void freeToekStream(TokenStream *ts, bool self, bool free_st) {
+void freeToekStream(TokenStream *ts, bool free_st) {
     freeBase(ts, return_);
-    Token *tmp = ts->token_list;
-    while (tmp != NULL){
-        Token *tmp_next = tmp->next;
+    for (Token *tmp = ts->token_list, *tmp_next=NULL; tmp != NULL; tmp = tmp_next){
+        tmp_next = tmp->next;
         freeToken(tmp, true, free_st);
-        tmp = tmp_next;
-    }
-    if (self){
-        memFree(ts);
     }
+    memFree(ts);
     return_:
     return;
 }
@@ -71,9 +67,9 @@ TokenMessage *makeTokenMessage(char *file_dir) {
 }
 
 void freeTokenMessage(TokenMessage *tm, bool self, bool free_st) {
-    freeLexFile(tm->file, true);
-    freeToekStream(tm->ts, true, free_st);
-    freeMathers(tm->mathers, true);
+    freeLexFile(tm->file);
+    freeToekStream(tm->ts, free_st);
+    freeMathers(tm->mathers);
     if (self)
         free(tm);
 }

+ 4 - 5
src/inter.c

@@ -54,7 +54,7 @@ void freeBaseInterData(struct Inter *inter){
     }
 }
 
-void freeInter(Inter *inter, bool self, bool show_gc) {
+void freeInter(Inter *inter, bool show_gc) {
     freeBase(inter, return_);
 
     if (show_gc && (printf("Enter '1' to show gc: "), getc(stdin) == '1')) {
@@ -66,7 +66,7 @@ void freeInter(Inter *inter, bool self, bool show_gc) {
             PASS;
     }
 
-    freeVarList(inter->var_list, true);
+    freeVarList(inter->var_list);
     freeBaseInterData(inter);
     while (inter->base != NULL)
         freeValue(&inter->base);
@@ -76,8 +76,7 @@ void freeInter(Inter *inter, bool self, bool show_gc) {
         freeLinkValue(&inter->link_base);
     while (inter->hash_base != NULL)
         freeHashTable(&inter->hash_base);
-    if (self)
-        memFree(inter);
+    memFree(inter);
     return_:
     return;
 }
@@ -102,7 +101,7 @@ void mergeInter(Inter *new, Inter *base){
     *base_hash = new->hash_base;
     *base_var = new->base_var;
 
-    freeVarList(new->var_list, true);
+    freeVarList(new->var_list);
     freeBaseInterData(new);
     memFree(new);
 }

+ 3 - 3
src/runfile.c

@@ -66,14 +66,14 @@ ResultType importFileCore(VarList **new_object, char **file_dir, INTER_FUNCTIONS
     run_st = makeStatement(0, *file_dir);
     parserCommandList(pm, import_inter, true, run_st);
     if (pm->status != success) {
-        freeInter(import_inter, true, false);
+        freeInter(import_inter, false);
         setResultError(result, inter, "ImportSyntaxException", pm->status_message, st, father, true);
         goto return_;
     }
 
     globalIterStatement(result, father, import_inter, run_st);
     if (!run_continue(result)) {
-        freeInter(import_inter, true, false);
+        freeInter(import_inter, false);
         result->value = makeLinkValue(inter->base, father, inter);  // 重新设定none值
         setResultError(result, inter, NULL, NULL, st, father, false);
         goto return_;
@@ -138,6 +138,6 @@ ResultType fromImportFile(INTER_FUNCTIONSIG) {
     setResult(result, inter, father);
 
     return_:
-    freeVarList(new_object, true);
+    freeVarList(new_object);
     return result->type;
 }

+ 2 - 2
src/value.c

@@ -104,9 +104,9 @@ Value *makeDictValue(Argument **arg_ad, bool new_hash, INTER_FUNCTIONSIG_NOT_ST)
 void freeValue(Value **value) {
     Value *free_value = *value;
     freeBase(free_value, return_);
-    for (VarList *tmp = free_value->object.var; tmp != NULL; tmp = freeVarList(tmp, true))
+    for (VarList *tmp = free_value->object.var; tmp != NULL; tmp = freeVarList(tmp))
             PASS;
-    for (VarList *tmp = free_value->object.out_var; tmp != NULL; tmp = freeVarList(tmp, true))
+    for (VarList *tmp = free_value->object.out_var; tmp != NULL; tmp = freeVarList(tmp))
             PASS;
     for (struct FatherValue *tmp = free_value->object.father; tmp != NULL; tmp = freeFatherValue(tmp))
             PASS;

+ 7 - 9
src/var.c

@@ -86,17 +86,15 @@ VarList *makeVarList(Inter *inter) {
     return tmp;
 }
 
-VarList *freeVarList(VarList *vl, bool self){
+VarList *freeVarList(VarList *vl) {
+    VarList *next_var = NULL;
     freeBase(vl, return_);
+    next_var = vl->next;
     for (PASS; vl->default_var != NULL; vl->default_var = freeDefaultVar(vl->default_var))
         PASS;
-    if (self){
-        VarList *next_var = vl->next;
-        memFree(vl);
-        return next_var;
-    }
+    memFree(vl);
     return_:
-    return vl;
+    return next_var;
 }
 
 DefaultVar *makeDefaultVar(char *name, NUMBER_TYPE times) {
@@ -218,7 +216,7 @@ VarList *pushVarList(VarList *base, Inter *inter){
 VarList *popVarList(VarList *base) {
     if (base->next == NULL)
         return base;
-    return freeVarList(base, true);
+    return freeVarList(base);
 }
 
 VarList *copyVarListCore(VarList *base, Inter *inter){
@@ -256,7 +254,7 @@ VarList *connectSafeVarListBack(VarList *base, VarList *back){
     VarList **last_node = &base;
     for (PASS; *last_node != NULL; ){
         if ((*last_node)->hashtable == back->hashtable)
-            *last_node = freeVarList(*last_node, true);
+            *last_node = freeVarList(*last_node);
         else
             last_node = &(*last_node)->next;
     }