From 5e622155268203521fb76e837241aed44b7f3ca8 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Thu, 23 Sep 2004 15:12:02 +0000 Subject: [PATCH] fix bug 72721: [Parser] new expression Constructor call with expression arg --- .../core/parser/tests/SelectionParseTest.java | 16 ++++++++++++++++ .../ast/complete/CompleteParseASTFactory.java | 10 ++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java index 3fa8241360c..8d31d2b8f70 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java @@ -390,4 +390,20 @@ public class SelectionParseTest extends SelectionParseBaseTest { assertTrue( node instanceof IASTVariable ); assertEquals( ((IASTVariable)node).getName(), "FOUND_ME" ); //$NON-NLS-1$ } + + public void testBug72721() throws Exception{ + Writer writer = new StringWriter(); + writer.write(" class ABC { public: ABC(int); }; \n"); //$NON-NLS-1$ + writer.write("void f() { \n"); //$NON-NLS-1$ + writer.write(" int j = 1; \n"); //$NON-NLS-1$ + writer.write(" new ABC( j + 1 ); \n"); //$NON-NLS-1$ + writer.write("} \n"); //$NON-NLS-1$ + + String code = writer.toString(); + int startIndex = code.indexOf( "ABC(" ); //$NON-NLS-1$ + IASTNode node = parse( code, startIndex, startIndex + 3 ); + assertTrue( node instanceof IASTMethod ); + assertEquals( ((IASTMethod)node).getName(), "ABC" ); //$NON-NLS-1$ + assertTrue( ((IASTMethod)node).isConstructor() ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index bc6bd7ea8b4..b9c758937cd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -1168,7 +1168,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto List parameters = new ArrayList(); while( expressionList != null ){ parameters.add( expressionList.getResultType().getResult() ); - expressionList = (ASTExpression) expressionList.getRHSExpression(); + if( expressionList.getExpressionKind() == IASTExpression.Kind.EXPRESSIONLIST ) + expressionList = (ASTExpression) expressionList.getRHSExpression(); + else + expressionList = null; } IParameterizedSymbol constructor = null; @@ -3610,7 +3613,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ASTExpression expressionList = (ASTExpression) newInitializerExpressions.get(i); while( expressionList != null ){ parameters.add( expressionList.getResultType().getResult() ); - expressionList = (ASTExpression) expressionList.getRHSExpression(); + if( expressionList.getExpressionKind() == IASTExpression.Kind.EXPRESSIONLIST ) + expressionList = (ASTExpression) expressionList.getRHSExpression(); + else + expressionList = null; } }