Cleaner handling since intrin_func deals with alias

This commit is contained in:
Dale Weiler 2013-11-23 07:02:45 -05:00
parent 292c8150b4
commit 74b58c5bb8

View file

@ -1575,8 +1575,6 @@ static bool parse_sya_operand(parser_t *parser, shunt *sy, bool with_labels)
if (!var && !strcmp(parser_tokval(parser), "__FUNC__")) if (!var && !strcmp(parser_tokval(parser), "__FUNC__"))
var = (ast_expression*)fold_constgen_string(parser->fold, parser->function->name, false); var = (ast_expression*)fold_constgen_string(parser->fold, parser->function->name, false);
if (!var) { if (!var) {
char *tryintrinsic = NULL;
/* /*
* now we try for the real intrinsic hashtable. If the string * now we try for the real intrinsic hashtable. If the string
* begins with __builtin, we simply skip past it, otherwise we * begins with __builtin, we simply skip past it, otherwise we
@ -1587,22 +1585,19 @@ static bool parse_sya_operand(parser_t *parser, shunt *sy, bool with_labels)
} }
/* /*
* Try it as an instruction by appending __builtin_ to the token * Try it again, intrin_func deals with the alias method as well
* and emit a warning if an intrinsic function matching that * the first one masks for __builtin though, we emit warning here.
* name exists.
*/ */
if (!var) { if (!var) {
util_asprintf(&tryintrinsic, "__builtin_%s", parser_tokval(parser)); if ((var = intrin_func(parser->intrin, parser_tokval(parser)))) {
if ((var = intrin_func(parser->intrin, tryintrinsic))) {
(void)!!compile_warning( (void)!!compile_warning(
parser_ctx(parser), parser_ctx(parser),
WARN_BUILTINS, WARN_BUILTINS,
"using implicitly defined builtin `%s' for `%s'", "using implicitly defined builtin `__builtin_%s' for `%s'",
tryintrinsic, parser_tokval(parser),
parser_tokval(parser) parser_tokval(parser)
); );
} }
mem_d(tryintrinsic);
} }