Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] fix for bug43951

This bug was caused by a couple of bugs in the parser symbol table.

core:
  PST changes:
  - modify lookupConstructor to copy the constructor list before resolving 
on it
  - modify checkUserDefinedConversionSequence the same way
  - modify isValidFunctionOverload to check for forward declarations

core.tests:
- added testBug43951 to CompleteParseASTTest

tested on windows & linux

-Andrew

Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.149
diff -u -r1.149 ChangeLog
--- parser/ChangeLog	1 Oct 2003 19:43:06 -0000	1.149
+++ parser/ChangeLog	1 Oct 2003 20:28:28 -0000
@@ -1,3 +1,10 @@
+2003-10-01 Andrew Niefer
+	bug43951 - search on ctor declarations returns definition too.
+	PST changes:
+	- modify lookupConstructor to copy the constructor list before resolving on it
+	- modify checkUserDefinedConversionSequence the same way
+	- modify isValidFunctionOverload to check for forward declarations
+
 2003-10-01 Bogdan Gheorghe
 	Modified CDT log dump in Parser.fetchToken to include error message
 
Index: parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java,v
retrieving revision 1.23
diff -u -r1.23 ParserSymbolTable.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java	30 Sep 2003 18:03:15 -0000	1.23
+++ parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java	1 Oct 2003 20:28:29 -0000
@@ -512,6 +512,12 @@
 			return false;
 		}
 		
+		//handle forward decls
+		if( origSymbol.getTypeInfo().isForwardDeclaration() &&
+			origSymbol.getTypeSymbol() == newSymbol )
+		{
+			return true;
+		}
 		if( origSymbol.hasSameParameters( newSymbol ) ){
 			//functions with the same name and same parameter types cannot be overloaded if any of them
 			//is static
@@ -1473,7 +1479,8 @@
 				}
 				
 				if( container.getConstructors() != null ){
-					constructor = resolveFunction( data, container.getConstructors() );
+					LinkedList constructors = new LinkedList( container.getConstructors() );
+					constructor = resolveFunction( data, constructors );
 				}
 				if( constructor != null && constructor.getTypeInfo().checkBit( TypeInfo.isExplicit ) ){
 					constructor = null;
@@ -3294,7 +3301,11 @@
 			LookupData data = new LookupData( EMPTY_NAME, TypeInfo.t_constructor, null );
 			data.parameters = parameters;
 			
-			return ParserSymbolTable.resolveFunction( data, getConstructors() );
+			List constructors = new LinkedList();
+			if( getConstructors() != null )
+				constructors.addAll( getConstructors() );
+				
+			return ParserSymbolTable.resolveFunction( data, constructors );
 		}
 		
 		/**
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.130
diff -u -r1.130 ChangeLog
--- ChangeLog	1 Oct 2003 19:55:04 -0000	1.130
+++ ChangeLog	1 Oct 2003 20:29:16 -0000
@@ -1,4 +1,7 @@
 2003-10-01 Andrew Niefer
+	added testBug43951 to CompleteParseASTTest
+
+2003-10-01 Andrew Niefer
 	modified OtherPatternTests.testBug42911() and renamed it testBug42911_43988
 
 2003-10-01 Andrew Niefer
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.37
diff -u -r1.37 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	30 Sep 2003 20:42:15 -0000	1.37
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	1 Oct 2003 20:29:17 -0000
@@ -31,7 +31,6 @@
 import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
 import org.eclipse.cdt.core.parser.ast.IASTMethod;
 import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
-import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement;
 import org.eclipse.cdt.core.parser.ast.IASTReference;
 import org.eclipse.cdt.core.parser.ast.IASTScope;
 import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
@@ -906,4 +905,15 @@
 			fail();
 		}
 	}
+	
+	public void testBug43951() throws Exception
+	{
+		Iterator i = parse( "class B{ B(); ~B(); }; B::B(){} B::~B(){}", false ).getDeclarations();
+	
+		IASTClassSpecifier b = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+		assertEquals( b.getName(), "B");
+		IASTMethod constructor = (IASTMethod) i.next();
+		assertEquals( constructor.getName(), "B" );
+		assertTrue( constructor.previouslyDeclared() );
+	}	
 }

Back to the top