Browse Source

refactoring

Kajetan Johannes Hammerle 3 years ago
parent
commit
4537c206fa
1 changed files with 9 additions and 21 deletions
  1. 9 21
      Compiler.c

+ 9 - 21
Compiler.c

@@ -894,16 +894,15 @@ static void cSetVariable() {
     }
 }
 
-static void cDeclare(DataType dt) {
-    cConsumeToken(T_LITERAL);
-    const char* var = cReadString();
-    if(vsInScope(&vars, var)) {
+static void cDeclareSet(Variables* vs, DataType dt, const char* var,
+                        Operation op) {
+    if(vsInScope(vs, var)) {
         cDeclared(var);
     }
-    Variable* v = vsAdd(&vars, var, dt, &structs);
+    Variable* v = vsAdd(vs, var, dt, &structs);
     if(dt.type != DT_STRUCT || dtIsPointer(dt)) {
         cConsumeToken(T_SET);
-        cAddInt32Operation(OP_DEREFERENCE_VAR, v->address);
+        cAddInt32Operation(op, v->address);
         DataType right = cUnpackedExpression();
         if(!right.constant) {
             dt.constant = 0;
@@ -917,7 +916,9 @@ static bool cDeclaration(Token t) {
     if(dtIsVoid(dt)) {
         return false;
     }
-    cDeclare(dt);
+    cConsumeToken(T_LITERAL);
+    const char* var = cReadString();
+    cDeclareSet(&vars, dt, var, OP_DEREFERENCE_VAR);
     return true;
 }
 
@@ -1116,20 +1117,7 @@ static void cGlobalScope(Token t) {
         cFunction(dt, name);
         return;
     }
-
-    if(vsInScope(&globalVars, name)) {
-        cDeclared(name);
-    }
-    Variable* v = vsAdd(&globalVars, name, dt, &structs);
-    if(dt.type != DT_STRUCT || dtIsPointer(dt)) {
-        cConsumeToken(T_SET);
-        cAddInt32Operation(OP_DEREFERENCE_GVAR, v->address);
-        DataType right = cUnpackedExpression();
-        if(!right.constant) {
-            dt.constant = 0;
-        }
-        cStore(dt, right, "=");
-    }
+    cDeclareSet(&globalVars, dt, name, OP_DEREFERENCE_GVAR);
     cConsumeToken(T_SEMICOLON);
 }