mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-02-05 16:51:27 +08:00
preproc: don't handle %+ until the final phase of smacro expansion
Revert to the earlier behavior of not expanding %+ until the final phase of smacro expansion. However, the previous code has: if (expanded && paste_tokens(&thead, true)) { ... which would inhibit paste_tokens() if expanded was false on the first iteration. However, if expand_mmac_params is not expanding %+, then we cannot bypass this expansion. Thus use: pasted = paste_tokens(&thead, true); if (expanded && pasted) { ... instead. This seems to work with both Syslinux and x264 usage, and therefore hopefully should be compatible with earlier versions of NASM. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
740df43005
commit
fc30f8c736
12
preproc.c
12
preproc.c
@ -3611,7 +3611,7 @@ static Token *expand_mmac_params(Token * tline)
|
||||
*tail = NULL;
|
||||
|
||||
if (changed)
|
||||
paste_tokens(&thead, true);
|
||||
paste_tokens(&thead, false);
|
||||
|
||||
return thead;
|
||||
}
|
||||
@ -3638,7 +3638,7 @@ static Token *expand_smacro(Token * tline)
|
||||
Context *ctx;
|
||||
const char *mname;
|
||||
int deadman = DEADMAN_LIMIT;
|
||||
bool expanded;
|
||||
bool expanded, pasted;
|
||||
|
||||
/*
|
||||
* Trick: we should avoid changing the start token pointer since it can
|
||||
@ -3928,8 +3928,12 @@ again:
|
||||
* Also we look for %+ tokens and concatenate the tokens before and after
|
||||
* them (without white spaces in between).
|
||||
*/
|
||||
if (expanded && paste_tokens(&thead, true)) {
|
||||
/* If we concatenated something, re-scan the line for macros */
|
||||
pasted = paste_tokens(&thead, true);
|
||||
if (expanded && pasted) {
|
||||
/*
|
||||
* If we concatenated something, *and* we had previously expanded
|
||||
* an actual macro, scan the lines again for macros...
|
||||
*/
|
||||
tline = thead;
|
||||
goto again;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user