Fix arrow dereferencing of array variables

This commit is contained in:
drmortalwombat 2024-09-17 15:34:41 +02:00
parent 3e78933e9c
commit 8a1eeee22d

View File

@ -7380,20 +7380,23 @@ Expression* Parser::ParsePostfixExpression(bool lhs)
else if (mScanner->mToken == TK_ARROW) else if (mScanner->mToken == TK_ARROW)
{ {
mScanner->NextToken(); mScanner->NextToken();
while (exp->mDecType->mType != DT_TYPE_POINTER) if (exp->mDecType->mType != DT_TYPE_ARRAY)
{ {
Expression* dexp = new Expression(mScanner->mLocation, EX_PREFIX); while (exp->mDecType->mType != DT_TYPE_POINTER)
dexp->mToken = TK_ARROW; {
dexp->mDecType = TheVoidPointerTypeDeclaration; Expression* dexp = new Expression(mScanner->mLocation, EX_PREFIX);
dexp->mLeft = exp; dexp->mToken = TK_ARROW;
dexp->mDecType = TheVoidPointerTypeDeclaration;
Expression* oexp = CheckOperatorOverload(dexp); dexp->mLeft = exp;
if (oexp == dexp)
break; Expression* oexp = CheckOperatorOverload(dexp);
exp = oexp; 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); Expression * dexp = new Expression(mScanner->mLocation, EX_PREFIX);
dexp->mToken = TK_MUL; dexp->mToken = TK_MUL;