AST: Fixed 'a[1][2]'

This commit is contained in:
Daniel Marjamäki 2013-11-13 17:52:56 +01:00
parent 7fe51eb58b
commit 673400920d
2 changed files with 15 additions and 6 deletions

View File

@ -436,13 +436,21 @@ static void compileTerm(Token *& tok, std::stack<Token*> &op)
name->next()->astOperand1(name);
tok = tok->next();
} else {
compileExpression(tok,op);
tok = tok->next(); // skip ')' or ']'
if (!op.empty()) {
name->next()->astOperand2(op.top());
op.pop();
Token *prev = name;
tok = tok->previous();
while (Token::Match(tok, "(|[")) {
Token *tok1 = tok;
tok = tok->next();
compileExpression(tok, op);
if (!op.empty()) {
tok1->astOperand2(op.top());
op.pop();
}
tok1->astOperand1(prev);
prev = tok1;
if (Token::Match(tok, "]|)"))
tok = tok->next();
}
name->next()->astOperand1(name);
}
op.push(name->next());
}

View File

@ -9985,6 +9985,7 @@ private:
void astbrackets() const { // []
ASSERT_EQUALS("a23+[4+", testAst("a[2+3]+4"));
ASSERT_EQUALS("a1[0[", testAst("a[1][0]"));
}
void astunaryop() const { // unary operators