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; 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; ilast->mAsmInsMode = ASMIM_IMPLIED;
else if (mScanner->mToken == TK_HASH) 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"); 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(); mScanner->NextToken();
offset += AsmInsSize(ilast->mAsmInsType, ilast->mAsmInsMode); offset += AsmInsSize(ilast->mAsmInsType, ilast->mAsmInsMode);
@ -12815,7 +12815,7 @@ Expression* Parser::ParseAssembler(Declaration* vdasm)
ilast = ilast->mRight; ilast = ilast->mRight;
} }
} }
else if (mScanner->mToken == TK_EOL) else if (mScanner->mToken == TK_EOL || mScanner->mToken == TK_SEMICOLON)
{ {
mScanner->NextToken(); mScanner->NextToken();
} }
@ -12823,7 +12823,7 @@ Expression* Parser::ParseAssembler(Declaration* vdasm)
{ {
mErrors->Error(mScanner->mLocation, EERR_ASM_INVALID_INSTRUCTION, "Invalid assembler token"); 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(); mScanner->NextToken();
} }
} }

View File

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