diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser2/cpp/CPPASTArraySubscriptExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser2/cpp/CPPASTArraySubscriptExpression.java new file mode 100644 index 00000000000..1834af487a7 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser2/cpp/CPPASTArraySubscriptExpression.java @@ -0,0 +1,53 @@ +/********************************************************************** + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.cdt.internal.core.parser2.cpp; + +import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; +import org.eclipse.cdt.core.dom.ast.IASTExpression; + +/** + * @author jcamelon + */ +public class CPPASTArraySubscriptExpression extends CPPASTNode implements + IASTArraySubscriptExpression { + + private IASTExpression subscriptExp; + private IASTExpression arrayExpression; + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#getArrayExpression() + */ + public IASTExpression getArrayExpression() { + return arrayExpression; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#setArrayExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) + */ + public void setArrayExpression(IASTExpression expression) { + arrayExpression = expression; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#getSubscriptExpression() + */ + public IASTExpression getSubscriptExpression() { + return subscriptExp; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression#setSubscriptExpression(org.eclipse.cdt.core.dom.ast.IASTExpression) + */ + public void setSubscriptExpression(IASTExpression expression) { + subscriptExp = expression; + } + +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser2/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser2/cpp/GNUCPPSourceParser.java index e09baea0a3f..a8ac1f11b06 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser2/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser2/cpp/GNUCPPSourceParser.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; +import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; import org.eclipse.cdt.core.dom.ast.IASTBreakStatement; import org.eclipse.cdt.core.dom.ast.IASTCaseStatement; @@ -1306,10 +1307,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { */ protected IASTExpression postfixExpression() throws EndOfFileException, BacktrackException { - IToken la = LA(1); - int startingOffset = la.getOffset(); - int line = la.getLineNumber(); - char[] fn = la.getFilename(); IASTExpression firstExpression = null; boolean isTemplate = false; @@ -1419,31 +1416,27 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { IASTExpression secondExpression = null; for (;;) { switch (LT(1)) { - case IToken.tLBRACKET: + case IToken.tLBRACKET: // array access consume(IToken.tLBRACKET); - if (templateIdScopes.size() > 0) { - templateIdScopes.push(IToken.tLBRACKET); - } + if (templateIdScopes.size() > 0) { + templateIdScopes.push(IToken.tLBRACKET); + } secondExpression = expression(); - int endOffset = consume(IToken.tRBRACKET).getEndOffset(); + consume(IToken.tRBRACKET); if (templateIdScopes.size() > 0) { - templateIdScopes.pop(); - } - try { - firstExpression = null; /* - * astFactory.createExpression(scope, - * IASTExpression.Kind.POSTFIX_SUBSCRIPT, - * firstExpression, - * secondExpression, null, null, - * null, EMPTY_STRING, null); } - * catch (ASTSemanticException e2) { - * throwBacktrack(e2.getProblem()); - */ - } catch (Exception e) { - logException("postfixExpression_3::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line, fn); + templateIdScopes.pop(); } + + IASTArraySubscriptExpression s = createArraySubscriptExpression(); + ((ASTNode)s).setOffset( ((ASTNode)firstExpression).getOffset() ); + s.setArrayExpression( firstExpression ); + firstExpression.setParent( s ); + firstExpression.setPropertyInParent( IASTArraySubscriptExpression.ARRAY ); + s.setSubscriptExpression( secondExpression ); + secondExpression.setParent( s ); + secondExpression.setPropertyInParent( IASTArraySubscriptExpression.SUBSCRIPT ); + firstExpression = s; break; case IToken.tLPAREN: // function call @@ -1456,7 +1449,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { secondExpression = expression(); else secondExpression = null; - endOffset = consume(IToken.tRPAREN).getEndOffset(); + consume(IToken.tRPAREN); if (templateIdScopes.size() > 0) { templateIdScopes.pop(); @@ -1492,7 +1485,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } IASTName name = createName( idExpression() ); - endOffset = (lastToken != null) ? lastToken.getEndOffset() : 0; ICPPASTFieldReference fieldReference = createFieldReference(); ((ASTNode)fieldReference).setOffset( ((ASTNode)firstExpression).getOffset()); @@ -1517,7 +1509,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } name = createName( idExpression() ); - endOffset = (lastToken != null) ? lastToken.getEndOffset() : 0; fieldReference = createFieldReference(); ((ASTNode)fieldReference).setOffset( ((ASTNode)firstExpression).getOffset()); @@ -1538,6 +1529,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } } + /** + * @return + */ + protected IASTArraySubscriptExpression createArraySubscriptExpression() { + return new CPPASTArraySubscriptExpression(); + } + /** * @return */