From 8a1eeee22db7329ef20726177e8579f29bf8cd9a Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Tue, 17 Sep 2024 15:34:41 +0200 Subject: [PATCH] Fix arrow dereferencing of array variables --- oscar64/Parser.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/oscar64/Parser.cpp b/oscar64/Parser.cpp index fbd19f6..7cec76d 100644 --- a/oscar64/Parser.cpp +++ b/oscar64/Parser.cpp @@ -7380,20 +7380,23 @@ Expression* Parser::ParsePostfixExpression(bool lhs) else if (mScanner->mToken == TK_ARROW) { mScanner->NextToken(); - while (exp->mDecType->mType != DT_TYPE_POINTER) + if (exp->mDecType->mType != DT_TYPE_ARRAY) { - Expression* dexp = new Expression(mScanner->mLocation, EX_PREFIX); - dexp->mToken = TK_ARROW; - dexp->mDecType = TheVoidPointerTypeDeclaration; - dexp->mLeft = exp; - - Expression* oexp = CheckOperatorOverload(dexp); - if (oexp == dexp) - break; - exp = oexp; + while (exp->mDecType->mType != DT_TYPE_POINTER) + { + Expression* dexp = new Expression(mScanner->mLocation, EX_PREFIX); + dexp->mToken = TK_ARROW; + dexp->mDecType = TheVoidPointerTypeDeclaration; + dexp->mLeft = exp; + + Expression* oexp = CheckOperatorOverload(dexp); + if (oexp == dexp) + break; + exp = oexp; + } } - if (exp->mDecType->mType == DT_TYPE_POINTER) + if (exp->mDecType->mType == DT_TYPE_POINTER || exp->mDecType->mType == DT_TYPE_ARRAY) { Expression * dexp = new Expression(mScanner->mLocation, EX_PREFIX); dexp->mToken = TK_MUL;