PP: Fix issue #408: # as last character in macro.
This would look ahead for a second #, for token pasting, and if not found, backup one token. This is fine, unless at the end of line, which would backup the #, rather than the look ahead.
This commit is contained in:
parent
50d4fbe4c7
commit
73d4fb5bc5
5 changed files with 35 additions and 9 deletions
|
|
@ -180,14 +180,17 @@ int TPpContext::ReadToken(TokenStream *pTok, TPpToken *ppToken)
|
|||
ltoken += 128;
|
||||
switch (ltoken) {
|
||||
case '#':
|
||||
if (lReadByte(pTok) == '#') {
|
||||
parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
|
||||
parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
|
||||
parseContext.error(ppToken->loc, "token pasting not implemented (internal error)", "##", "");
|
||||
//return PpAtomPaste;
|
||||
return ReadToken(pTok, ppToken);
|
||||
} else
|
||||
lUnreadByte(pTok);
|
||||
// Check for ##, unless the current # is the last character
|
||||
if (pTok->current < pTok->data.size()) {
|
||||
if (lReadByte(pTok) == '#') {
|
||||
parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
|
||||
parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
|
||||
parseContext.error(ppToken->loc, "token pasting not implemented (internal error)", "##", "");
|
||||
//return PpAtomPaste;
|
||||
return ReadToken(pTok, ppToken);
|
||||
} else
|
||||
lUnreadByte(pTok);
|
||||
}
|
||||
break;
|
||||
case PpAtomConstString:
|
||||
case PpAtomIdentifier:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue