From 11f779dbd995955d9ecc0e7fc8799ab0ff26dde1 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Tue, 13 Jul 2004 17:55:00 +0000 Subject: [PATCH] fix bug 68739 - open declaration on fprintf --- .../core/parser/tests/SelectionParseTest.java | 19 +++++++++++++++++++ .../ast/complete/CompleteParseASTFactory.java | 9 ++++++--- .../ast/complete/ExpressionResultList.java | 8 ++++++++ 3 files changed, 33 insertions(+), 3 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 baa656679c1..90df1be6410 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 @@ -347,4 +347,23 @@ public class SelectionParseTest extends SelectionParseBaseTest { assertTrue( node instanceof IASTField ); assertEquals( ((IASTField)node).getName(), "stInt" ); //$NON-NLS-1$ } + + public void testBug68739() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "int fprintf( int *, const char *, ... ); \n" ); //$NON-NLS-1$ + writer.write( "void boo( int * lcd ) { \n" ); //$NON-NLS-1$ + writer.write( " /**/fprintf( lcd, \"%c%s 0x%x\", ' ', \"bbb\", 2 ); \n" ); //$NON-NLS-1$ + writer.write( "} \n" ); //$NON-NLS-1$ + + String code = writer.toString(); + int startIndex = code.indexOf( "/**/fprintf") + 4; //$NON-NLS-1$ + + IASTNode node = parse( code, startIndex, startIndex+ 7 ); + + assertTrue( node instanceof IASTFunction ); + assertEquals( ((IASTFunction)node).getName(), "fprintf" ); //$NON-NLS-1$ + + + } } 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 ef8f12c2890..f422d5fcbeb 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 @@ -1806,11 +1806,14 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto if(kind == IASTExpression.Kind.EXPRESSIONLIST){ result = new ExpressionResultList(); if(lhs != null){ - ITypeInfo leftType = ((ASTExpression)lhs).getResultType().getResult(); - result.setResult(leftType); + ExpressionResult resultType = ((ASTExpression)lhs).getResultType(); + if( resultType instanceof ExpressionResultList ) + ((ExpressionResultList)result).setResult( (ExpressionResultList) resultType ); + else + result.setResult( resultType.getResult() ); } if(rhs != null){ - ITypeInfo rightType = ((ASTExpression)rhs).getResultType().getResult(); + ITypeInfo rightType = ((ASTExpression)rhs).getResultType().getResult(); result.setResult(rightType); } return result; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ExpressionResultList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ExpressionResultList.java index f63b15c7df7..dc6429441d3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ExpressionResultList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ExpressionResultList.java @@ -40,6 +40,14 @@ public class ExpressionResultList extends ExpressionResult { resultList.add(info); } + public void setResult( ExpressionResultList result ){ + List list = result.getResultList(); + int size = list.size(); + for( int i = 0; i < size; i++ ){ + resultList.add( list.get( i ) ); + } + } + /** * @return */