Support for aliases to aliases too.

This commit is contained in:
Dale Weiler 2013-02-06 08:43:11 +00:00
parent 060bc0be10
commit 6fc141733f

View file

@ -5275,9 +5275,18 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
} }
} }
} else { } else {
void *entry = (void*)var->desc;
ast_expression *find = parser_find_var(parser, var->desc); ast_expression *find = parser_find_var(parser, var->desc);
/* aliases to aliases are also allowed */
if (!find) { if (!find) {
compile_error(parser_ctx(parser), "undeclared variable `%s` for alias `%s", var->desc, var->name); char *name = NULL;
if ((find = parser_find_var(parser, (const char *)(name = util_htget(parser->aliases, var->desc)))))
entry = (void*)name;
}
if (!find) {
compile_error(parser_ctx(parser), "undeclared variable `%s` for alias `%s`", var->desc, var->name);
return false; return false;
} }
@ -5294,7 +5303,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
return false; return false;
} }
util_htset(parser->aliases, var->name, (void*)var->desc); util_htset(parser->aliases, var->name, entry);
/* /*
* TODO: vector, find . or _ (last of), and build * TODO: vector, find . or _ (last of), and build
* [._]x, [._]y, [._]z aliases too. * [._]x, [._]y, [._]z aliases too.