Fix use of hash character in preprocessor defines

This commit is contained in:
drmortalwombat 2025-05-08 08:18:57 +02:00
parent 3c306e0899
commit 2b224f262b
2 changed files with 28 additions and 20 deletions

View File

@ -12691,7 +12691,7 @@ Expression* Parser::ParseAssembler(Declaration* vdasm)
break;
}
}
else if (mScanner->mToken == TK_EOL || mScanner->mToken == TK_CLOSE_BRACE)
else if (mScanner->mToken == TK_EOL || mScanner->mToken == TK_CLOSE_BRACE || mScanner->mToken == TK_SEMICOLON)
ilast->mAsmInsMode = ASMIM_IMPLIED;
else if (mScanner->mToken == TK_HASH)
{
@ -12799,12 +12799,12 @@ Expression* Parser::ParseAssembler(Declaration* vdasm)
}
}
if (mScanner->mToken != TK_EOL && mScanner->mToken != TK_CLOSE_BRACE)
if (mScanner->mToken != TK_EOL && mScanner->mToken != TK_CLOSE_BRACE && mScanner->mToken != TK_SEMICOLON)
{
mErrors->Error(mScanner->mLocation, EERR_SYNTAX, "End of line expected");
}
while (mScanner->mToken != TK_EOL && mScanner->mToken != TK_EOF && mScanner->mToken != TK_CLOSE_BRACE)
while (mScanner->mToken != TK_EOL && mScanner->mToken != TK_EOF && mScanner->mToken != TK_CLOSE_BRACE && mScanner->mToken != TK_SEMICOLON)
mScanner->NextToken();
offset += AsmInsSize(ilast->mAsmInsType, ilast->mAsmInsMode);
@ -12815,7 +12815,7 @@ Expression* Parser::ParseAssembler(Declaration* vdasm)
ilast = ilast->mRight;
}
}
else if (mScanner->mToken == TK_EOL)
else if (mScanner->mToken == TK_EOL || mScanner->mToken == TK_SEMICOLON)
{
mScanner->NextToken();
}
@ -12823,7 +12823,7 @@ Expression* Parser::ParseAssembler(Declaration* vdasm)
{
mErrors->Error(mScanner->mLocation, EERR_ASM_INVALID_INSTRUCTION, "Invalid assembler token");
while (mScanner->mToken != TK_EOL && mScanner->mToken != TK_EOF)
while (mScanner->mToken != TK_EOL && mScanner->mToken != TK_CLOSE_BRACE && mScanner->mToken != TK_SEMICOLON && mScanner->mToken != TK_EOF)
mScanner->NextToken();
}
}

View File

@ -821,6 +821,8 @@ void Scanner::NextPreToken(void)
}
}
else if (mToken == TK_PREP_IDENT)
{
if (mTokenIdent->mString[0])
{
Macro* def = nullptr;
if (mDefineArguments)
@ -845,6 +847,12 @@ void Scanner::NextPreToken(void)
else
mErrors->Error(mLocation, EERR_INVALID_PREPROCESSOR, "Invalid preprocessor command", mTokenIdent);
}
else
{
mToken = TK_HASH;
return;
}
}
else if (mToken == TK_PREP_UNDEF)
{
NextRawToken();