]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
assignment to constant error
authorWolfgang (Blub) Bumiller <blub@speed.at>
Sun, 25 Nov 2012 18:37:31 +0000 (19:37 +0100)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Sun, 25 Nov 2012 18:37:31 +0000 (19:37 +0100)
parser.c

index 3bc4884ee8eab5ef9ee9841d914d1b03bcc1e35d..3883631092b247ab995bc737d65cae1b58aff184 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -940,6 +940,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                         parseerror(parser, "invalid types in assignment: cannot assign %s to %s", ty2, ty1);
                 }
             }
+            if (ast_istype(exprs[0], ast_value) && asvalue[0]->constant) {
+                parseerror(parser, "assignment to constant `%s`", asvalue[0]->name);
+            }
             out = (ast_expression*)ast_store_new(ctx, assignop, exprs[0], exprs[1]);
             break;
         case opid3('+','+','P'):
@@ -954,6 +957,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                 addop = INSTR_ADD_F;
             else
                 addop = INSTR_SUB_F;
+            if (ast_istype(exprs[0], ast_value) && asvalue[0]->constant) {
+                parseerror(parser, "assignment to constant `%s`", asvalue[0]->name);
+            }
             if (ast_istype(exprs[0], ast_entfield)) {
                 out = (ast_expression*)ast_binstore_new(ctx, INSTR_STOREP_F, addop,
                                                         exprs[0],
@@ -979,6 +985,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                 addop = INSTR_SUB_F;
                 subop = INSTR_ADD_F;
             }
+            if (ast_istype(exprs[0], ast_value) && asvalue[0]->constant) {
+                parseerror(parser, "assignment to constant `%s`", asvalue[0]->name);
+            }
             if (ast_istype(exprs[0], ast_entfield)) {
                 out = (ast_expression*)ast_binstore_new(ctx, INSTR_STOREP_F, addop,
                                                         exprs[0],
@@ -1005,6 +1014,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                            ty1, ty2);
                 return false;
             }
+            if (ast_istype(exprs[0], ast_value) && asvalue[0]->constant) {
+                parseerror(parser, "assignment to constant `%s`", asvalue[0]->name);
+            }
             if (ast_istype(exprs[0], ast_entfield))
                 assignop = type_storep_instr[exprs[0]->expression.vtype];
             else
@@ -1039,6 +1051,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                            ty1, ty2);
                 return false;
             }
+            if (ast_istype(exprs[0], ast_value) && asvalue[0]->constant) {
+                parseerror(parser, "assignment to constant `%s`", asvalue[0]->name);
+            }
             if (ast_istype(exprs[0], ast_entfield))
                 assignop = type_storep_instr[exprs[0]->expression.vtype];
             else
@@ -1080,6 +1095,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                            ty1, ty2);
                 return false;
             }
+            if (ast_istype(exprs[0], ast_value) && asvalue[0]->constant) {
+                parseerror(parser, "assignment to constant `%s`", asvalue[0]->name);
+            }
             if (ast_istype(exprs[0], ast_entfield))
                 assignop = type_storep_instr[exprs[0]->expression.vtype];
             else
@@ -1107,6 +1125,9 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
             out = (ast_expression*)ast_binary_new(ctx, INSTR_BITAND, exprs[0], exprs[1]);
             if (!out)
                 return false;
+            if (ast_istype(exprs[0], ast_value) && asvalue[0]->constant) {
+                parseerror(parser, "assignment to constant `%s`", asvalue[0]->name);
+            }
             out = (ast_expression*)ast_binstore_new(ctx, assignop, INSTR_SUB_F, exprs[0], out);
             break;
     }