diff options
author | John Camelon | 2005-04-05 17:38:30 +0000 |
---|---|---|
committer | John Camelon | 2005-04-05 17:38:30 +0000 |
commit | 17481123ab3ac18a8ebfa6215fc15dd169edc36a (patch) | |
tree | 5f069f3b234b965c712b1b8949e6b64a9b5b1067 /core | |
parent | e2e1f585eb1b261e4788aabd4456a6d8e8a49f6c (diff) | |
download | org.eclipse.cdt-17481123ab3ac18a8ebfa6215fc15dd169edc36a.tar.gz org.eclipse.cdt-17481123ab3ac18a8ebfa6215fc15dd169edc36a.tar.xz org.eclipse.cdt-17481123ab3ac18a8ebfa6215fc15dd169edc36a.zip |
Fixed Bug 88662 - [DOM] Problem parsing postfix expression
Diffstat (limited to 'core')
2 files changed, 18 insertions, 6 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 2300c97d470..11c94bd63a3 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -55,6 +55,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConversionName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPointerToMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleTypeConstructorExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope; @@ -3267,6 +3268,12 @@ public class AST2CPPTests extends AST2BaseTest { assertTrue(((ICPPASTQualifiedName)col.getName(16)).isConversionOrOperator()); } - + public void testBug88662() throws Exception { + IASTTranslationUnit tu = parse( "int foo() { return int();}", ParserLanguage.CPP ); //$NON-NLS-1$ + IASTReturnStatement returnStatement = (IASTReturnStatement) ((IASTCompoundStatement)((IASTFunctionDefinition)tu.getDeclarations()[0]).getBody()).getStatements()[0]; + ICPPASTSimpleTypeConstructorExpression expression = (ICPPASTSimpleTypeConstructorExpression) returnStatement.getReturnValue(); + assertEquals( expression.getInitialValue(), null ); + assertEquals( expression.getSimpleType(), ICPPASTSimpleTypeConstructorExpression.t_int ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index d1dd93711ff..ed31dff855f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -1623,15 +1623,20 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { int startingOffset = LA(1).getOffset(); consume(); consume(IToken.tLPAREN); - IASTExpression operand = expression(); + IASTExpression operand = null; + if( LT(1) != IToken.tRPAREN ) + operand = expression(); int l = consume(IToken.tRPAREN).getEndOffset(); ICPPASTSimpleTypeConstructorExpression result = createSimpleTypeConstructorExpression(); ((ASTNode) result).setOffsetAndLength(startingOffset, l - startingOffset); result.setSimpleType(operator); - result.setInitialValue(operand); - operand.setParent(result); - operand - .setPropertyInParent(ICPPASTSimpleTypeConstructorExpression.INITIALIZER_VALUE); + if( operand != null ) + { + result.setInitialValue(operand); + operand.setParent(result); + operand + .setPropertyInParent(ICPPASTSimpleTypeConstructorExpression.INITIALIZER_VALUE); + } return result; } |