X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=parser.c;h=681207c192c01d55b74f565856ae537d78b6fdaa;hb=a568d434878e753126b357031d31899e4a583465;hp=909732e06802fee16a5b41459eaa37ca9d3b40bc;hpb=1e60bafcdc825e1ec3a847ca6b3b5f43599afe29;p=xonotic%2Fgmqcc.git diff --git a/parser.c b/parser.c index 909732e..681207c 100644 --- a/parser.c +++ b/parser.c @@ -319,6 +319,9 @@ static ast_expression* parser_find_label(parser_t *parser, const char *name) static ast_expression* parser_find_global(parser_t *parser, const char *name) { + ast_expression *var = (ast_expression*)util_htget(parser->aliases, parser_tokval(parser)); + if (var) + return var; return (ast_expression*)util_htget(parser->htglobals, name); } @@ -1088,7 +1091,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy) } else { ast_binary *eq = ast_binary_new(ctx, INSTR_EQ_F, exprs[0], exprs[1]); - eq->refs = false; /* references nothing */ + eq->refs = (ast_binary_ref)false; /* references nothing */ /* if (lt) { */ out = (ast_expression*)ast_ternary_new(ctx, @@ -1826,10 +1829,6 @@ static bool parse_sya_operand(parser_t *parser, shunt *sy, bool with_labels) /* intrinsics */ if (!strcmp(parser_tokval(parser), "__builtin_debug_typestring")) { var = (ast_expression*)intrinsic_debug_typestring; - } else { - const char *alias = util_htget(parser->aliases, parser_tokval(parser)); - if (alias) - var = (ast_expression*)parser_find_var(parser, alias); } if (!var) { @@ -5277,8 +5276,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield } } } else { - void *entry = (void*)var->desc; - ast_expression *find = parser_find_var(parser, var->desc); + ast_expression *find = parser_find_global(parser, var->desc); if (!find) { compile_error(parser_ctx(parser), "undeclared variable `%s` for alias `%s`", var->desc, var->name); @@ -5302,7 +5300,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield * add alias to aliases table and to corrector * so corrections can apply for aliases as well. */ - util_htset(parser->aliases, var->name, entry); + util_htset(parser->aliases, var->name, find); /* * add to corrector so corrections can work @@ -5322,9 +5320,13 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield util_asprintf(&buffer[1], "%s_y", var->desc); util_asprintf(&buffer[2], "%s_z", var->desc); - util_htset(parser->aliases, me[0]->name, (void*)buffer[0]); - util_htset(parser->aliases, me[1]->name, (void*)buffer[1]); - util_htset(parser->aliases, me[2]->name, (void*)buffer[2]); + util_htset(parser->aliases, me[0]->name, parser_find_global(parser, buffer[0])); + util_htset(parser->aliases, me[1]->name, parser_find_global(parser, buffer[1])); + util_htset(parser->aliases, me[2]->name, parser_find_global(parser, buffer[2])); + + mem_d(buffer[0]); + mem_d(buffer[1]); + mem_d(buffer[2]); /* * add to corrector so corrections can work