Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJohn Camelon2005-04-05 17:38:30 +0000
committerJohn Camelon2005-04-05 17:38:30 +0000
commit17481123ab3ac18a8ebfa6215fc15dd169edc36a (patch)
tree5f069f3b234b965c712b1b8949e6b64a9b5b1067 /core
parente2e1f585eb1b261e4788aabd4456a6d8e8a49f6c (diff)
downloadorg.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')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java15
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;
}

Back to the top