Fix use of hash character in preprocessor defines
This commit is contained in:
parent
3c306e0899
commit
2b224f262b
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -822,28 +822,36 @@ void Scanner::NextPreToken(void)
|
||||||
}
|
}
|
||||||
else if (mToken == TK_PREP_IDENT)
|
else if (mToken == TK_PREP_IDENT)
|
||||||
{
|
{
|
||||||
Macro* def = nullptr;
|
if (mTokenIdent->mString[0])
|
||||||
if (mDefineArguments)
|
|
||||||
def = mDefineArguments->Lookup(mTokenIdent);
|
|
||||||
if (!def)
|
|
||||||
def = mDefines->Lookup(mTokenIdent);
|
|
||||||
|
|
||||||
if (def)
|
|
||||||
{
|
{
|
||||||
if (def->mNumArguments == -1)
|
Macro* def = nullptr;
|
||||||
|
if (mDefineArguments)
|
||||||
|
def = mDefineArguments->Lookup(mTokenIdent);
|
||||||
|
if (!def)
|
||||||
|
def = mDefines->Lookup(mTokenIdent);
|
||||||
|
|
||||||
|
if (def)
|
||||||
{
|
{
|
||||||
mToken = TK_STRING;
|
if (def->mNumArguments == -1)
|
||||||
int i = 0;
|
{
|
||||||
while ((mTokenString[i] = def->mString[i]))
|
mToken = TK_STRING;
|
||||||
i++;
|
int i = 0;
|
||||||
mTokenStringSize = i;
|
while ((mTokenString[i] = def->mString[i]))
|
||||||
return;
|
i++;
|
||||||
|
mTokenStringSize = i;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mErrors->Error(mLocation, EERR_INVALID_PREPROCESSOR, "Invalid preprocessor command", mTokenIdent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
mErrors->Error(mLocation, EERR_INVALID_PREPROCESSOR, "Invalid preprocessor command", mTokenIdent);
|
mErrors->Error(mLocation, EERR_INVALID_PREPROCESSOR, "Invalid preprocessor command", mTokenIdent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
mErrors->Error(mLocation, EERR_INVALID_PREPROCESSOR, "Invalid preprocessor command", mTokenIdent);
|
{
|
||||||
|
mToken = TK_HASH;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (mToken == TK_PREP_UNDEF)
|
else if (mToken == TK_PREP_UNDEF)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue