Fix arrow dereferencing of array variables
This commit is contained in:
parent
3e78933e9c
commit
8a1eeee22d
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue