From cfe2c7bed52200d10402b0db627b7e858131236e Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Mon, 2 Dec 2024 16:27:13 +0100 Subject: [PATCH] Fix infinite loop in parser due to failure to detect label --- oscar64/Parser.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/oscar64/Parser.cpp b/oscar64/Parser.cpp index ed790b2..03c85e3 100644 --- a/oscar64/Parser.cpp +++ b/oscar64/Parser.cpp @@ -6813,11 +6813,19 @@ Expression* Parser::ParseSimpleExpression(bool lhs, bool tid) } break; case TK_OPEN_BRACE: - mScanner->NextToken(); - exp = new Expression(mScanner->mLocation, EX_AGGREGATE); - exp->mLeft = ParseListExpression(false); - exp->mDecType = TheConstVoidTypeDeclaration; - ConsumeToken(TK_CLOSE_BRACE); + if (!lhs) + { + mScanner->NextToken(); + exp = new Expression(mScanner->mLocation, EX_AGGREGATE); + exp->mLeft = ParseListExpression(false); + exp->mDecType = TheConstVoidTypeDeclaration; + ConsumeToken(TK_CLOSE_BRACE); + } + else + { + mErrors->Error(mScanner->mLocation, EERR_SYNTAX, "Term starts with invalid token", TokenNames[mScanner->mToken]); + mScanner->NextToken(); + } break; case TK_ASM: mScanner->NextToken(); @@ -7726,7 +7734,7 @@ Expression* Parser::ParsePostfixExpression(bool lhs) nexp->mDecType = TheVoidTypeDeclaration; exp = nexp->ConstantFold(mErrors, mDataSection, mCompilationUnits->mLinker); } - else if (mScanner->mToken == TK_OPEN_BRACE) + else if (mScanner->mToken == TK_OPEN_BRACE && exp->mType == EX_TYPE) { exp = ParseCastExpression(exp); }