X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=parser.c;h=3e1bad925b4fccc312840d91cd33625fb47ba74b;hp=87a15141a38fedc1880ce12ff0741265b3db70fd;hb=2a3e7c1cff95a06b85ca2860735433cc59da64f5;hpb=316298650e21c2f81c04e1124ef2943306386ae5 diff --git a/parser.c b/parser.c index 87a1514..3e1bad9 100644 --- a/parser.c +++ b/parser.c @@ -4025,6 +4025,8 @@ skipvar: var->hasvalue = true; if (cval->expression.vtype == TYPE_STRING) var->constval.vstring = parser_strdup(cval->constval.vstring); + else if (cval->expression.vtype == TYPE_FIELD) + var->constval.vfield = cval; else memcpy(&var->constval, &cval->constval, sizeof(var->constval)); ast_unref(cval); @@ -4466,14 +4468,11 @@ bool parser_finish(const char *output) return false; } } - for (i = 0; i < vec_size(parser->fields); ++i) { + for (i = 0; i < vec_size(parser->globals); ++i) { ast_value *asvalue; - asvalue = (ast_value*)(parser->fields[i]->expression.next); - - if (!ast_istype((ast_expression*)asvalue, ast_value)) - continue; - if (asvalue->expression.vtype != TYPE_ARRAY) + if (!ast_istype(parser->globals[i], ast_value)) continue; + asvalue = (ast_value*)(parser->globals[i]); if (asvalue->setter) { if (!ast_global_codegen(asvalue->setter, ir, false) || !ast_function_codegen(asvalue->setter->constval.vfunc, ir) || @@ -4495,11 +4494,14 @@ bool parser_finish(const char *output) } } } - for (i = 0; i < vec_size(parser->globals); ++i) { + for (i = 0; i < vec_size(parser->fields); ++i) { ast_value *asvalue; - if (!ast_istype(parser->globals[i], ast_value)) + asvalue = (ast_value*)(parser->fields[i]->expression.next); + + if (!ast_istype((ast_expression*)asvalue, ast_value)) + continue; + if (asvalue->expression.vtype != TYPE_ARRAY) continue; - asvalue = (ast_value*)(parser->globals[i]); if (asvalue->setter) { if (!ast_global_codegen(asvalue->setter, ir, false) || !ast_function_codegen(asvalue->setter->constval.vfunc, ir) ||