From: Cyrill Gorcunov Date: Sun, 3 Feb 2013 21:24:54 +0000 (+0400) Subject: BR3392240: preproc: Don't fail on pasting of space expanded rvalue tokens X-Git-Tag: nasm-2.10.08~80 X-Git-Url: https://repo.or.cz/w/nasm.git/commitdiff_plain/8b5c9fba4ea12437ec4fe28d3e6675880ca92d59 BR3392240: preproc: Don't fail on pasting of space expanded rvalue tokens Reported-by: KO Myung-Hun Tested-by: KO Myung-Hun Signed-off-by: Cyrill Gorcunov --- diff --git a/preproc.c b/preproc.c index 9d659174..0ca360ed 100644 --- a/preproc.c +++ b/preproc.c @@ -3640,14 +3640,35 @@ static bool paste_tokens(Token **head, const struct tokseq_match *m, if (!pasted) pasted = true; - /* No ending token */ - if (!next) - error(ERR_FATAL, "No rvalue found on pasting"); - /* Left pasting token is start of line */ if (!prev_nonspace) error(ERR_FATAL, "No lvalue found on pasting"); + /* + * No ending token, this might happen in two + * cases + * + * 1) There indeed no right token at all + * 2) There is a bare "%define ID" statement, + * and @ID does expand to whitespace. + * + * So technically we need to do a grammar analysis + * in another stage of parsing, but for now lets don't + * change the behaviour people used to. Simply allow + * whitespace after paste token. + */ + if (!next) { + /* + * Zap ending space tokens and that's all. + */ + tok = (*prev_nonspace)->next; + while (tok_type_(tok, TOK_WHITESPACE)) + tok = delete_Token(tok); + tok = *prev_nonspace; + tok->next = NULL; + break; + } + tok = *prev_nonspace; while (tok_type_(tok, TOK_WHITESPACE)) tok = delete_Token(tok);