|
@@ -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);
|
|
|
}
|
|
|
|