summaryrefslogtreecommitdiff
path: root/asm
diff options
context:
space:
mode:
Diffstat (limited to 'asm')
-rw-r--r--asm/preproc.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/asm/preproc.c b/asm/preproc.c
index 9ab05765..c7b2e7d4 100644
--- a/asm/preproc.c
+++ b/asm/preproc.c
@@ -4756,6 +4756,7 @@ static Token *expand_mmac_params(Token * tline)
while (tline) {
bool change;
+ bool err_not_mac = false;
Token *t = tline;
const char *text = tok_text(t);
int type = t->type;
@@ -4765,9 +4766,15 @@ static Token *expand_mmac_params(Token * tline)
switch (type) {
case TOK_LOCAL_SYMBOL:
+ change = true;
+
+ if (!mac) {
+ err_not_mac = true;
+ break;
+ }
+
type = TOK_ID;
text = nasm_asprintf("..@%"PRIu64".%s", mac->unique, text+2);
- change = true;
break;
case TOK_MMACRO_PARAM:
{
@@ -4776,8 +4783,7 @@ static Token *expand_mmac_params(Token * tline)
change = true;
if (!mac) {
- nasm_nonfatal("`%s': not in a macro call", text);
- text = NULL;
+ err_not_mac = true;
break;
}
@@ -4910,6 +4916,12 @@ static Token *expand_mmac_params(Token * tline)
break;
}
+ if (err_not_mac) {
+ nasm_nonfatal("`%s': not in a macro call", text);
+ text = NULL;
+ change = true;
+ }
+
if (change) {
if (!text) {
delete_Token(t);