[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Applied [HEAD] partial fix for operator overloading
|
CORE
Partially fixed Bug 42979 : Cannot search for operator overloaders
TESTS
Added CompleteParseASTTest::testBug42979().
Updated CompleteParseASTTest::testAndrewsExample().
JohnC
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.95
diff -u -r1.95 ChangeLog
--- ChangeLog 15 Sep 2003 17:31:17 -0000 1.95
+++ ChangeLog 15 Sep 2003 19:03:32 -0000
@@ -1,3 +1,7 @@
+2003-09-15 John Camelon
+ Added CompleteParseASTTest::testBug42979().
+ Updated CompleteParseASTTest::testAndrewsExample().
+
2003-09-13 Andrew Niefer
- added testBadParameterInfo to ParserSymbolTableTest
Index: parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java,v
retrieving revision 1.7
diff -u -r1.7 BaseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java 8 Sep 2003 18:10:55 -0000 1.7
+++ parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java 15 Sep 2003 19:03:32 -0000
@@ -92,7 +92,7 @@
public void assertCodeFailsParse(String code) {
boolean testPassed = false;
try {
- IASTCompilationUnit tu = parse(code);
+ parse(code);
testPassed = true;
fail( "We should not reach this point");
} catch (Throwable e) {
@@ -106,7 +106,7 @@
public void assertCodeFailsFullParse(String code) {
boolean testPassed = false;
try {
- IASTCompilationUnit tu = fullParse(code);
+ fullParse(code);
testPassed = true;
fail( "We should not reach this point");
} catch (Throwable e) {
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.28
diff -u -r1.28 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 11 Sep 2003 18:06:15 -0000 1.28
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 15 Sep 2003 19:03:33 -0000
@@ -345,6 +345,7 @@
Iterator i = parse(code.toString()).getDeclarations();
IASTVariable instanceA = (IASTVariable)i.next();
assertFalse( i.hasNext() );
+ assertEquals( callback.getReferences().size(), 0 );
}
public void testNestedClassname() throws Exception
@@ -744,4 +745,32 @@
IASTFunction foo = (IASTFunction)i.next();
assertFalse( i.hasNext() );
}
+
+
+ public void testBug42979() throws Exception
+ {
+ Writer code = new StringWriter();
+ code.write( "class OperatorOverload{\n" );
+ code.write( "public:\n" );
+ code.write( " bool operator==( const class OperatorOverload& that )\n" );
+ code.write( " { return true; }\n" );
+ code.write( " bool operator!=( const class OperatorOverload& that );\n" );
+ code.write( "}; \n" );
+
+ code.write( "bool OperatorOverload::operator!=( const class OperatorOverload& that )\n" );
+ code.write( "{ return false; }\n" );
+
+ Iterator i = parse( code.toString() ).getDeclarations();
+ IASTClassSpecifier classOp = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+ Iterator subDeclarations = getDeclarations(classOp);
+ IASTMethod operatorEqualsDeclaration = (IASTMethod)subDeclarations.next();
+ IASTMethod operatorNotEqualsDeclaration = (IASTMethod)subDeclarations.next();
+ IASTMethod operatorNotEqualDefinition = (IASTMethod)i.next();
+ assertEquals( operatorNotEqualDefinition.getName(), operatorNotEqualsDeclaration.getName() );
+ assertFalse( i.hasNext());
+ assertEquals( callback.getReferences().size(), 4 );
+ for( int j =0; j < 4; ++j )
+ assertFalse( classOp.getNameOffset() == ((IASTReference)callback.getReferences().get(j)).getOffset() );
+ }
+
}
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.125
diff -u -r1.125 ChangeLog
--- parser/ChangeLog 15 Sep 2003 13:20:30 -0000 1.125
+++ parser/ChangeLog 15 Sep 2003 19:02:41 -0000
@@ -1,3 +1,6 @@
+2003-09-15 John Camelon
+ Partially fixed Bug 42979 : Cannot search for operator overloaders
+
2003-09-12 Hoda Amer
In completeParseASTFactory.getExpressionResultType()
- Added the handling of some more expression types.
Index: parser/org/eclipse/cdt/core/parser/ast/IASTFunction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFunction.java,v
retrieving revision 1.7
diff -u -r1.7 IASTFunction.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTFunction.java 8 Sep 2003 19:17:53 -0000 1.7
+++ parser/org/eclipse/cdt/core/parser/ast/IASTFunction.java 15 Sep 2003 19:02:42 -0000
@@ -32,5 +32,7 @@
*/
public void setHasFunctionBody(boolean b);
public boolean hasFunctionBody();
+
+ public boolean previouslyDeclared();
}
Index: parser/org/eclipse/cdt/internal/core/parser/Declarator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Declarator.java,v
retrieving revision 1.9
diff -u -r1.9 Declarator.java
--- parser/org/eclipse/cdt/internal/core/parser/Declarator.java 11 Sep 2003 18:05:55 -0000 1.9
+++ parser/org/eclipse/cdt/internal/core/parser/Declarator.java 15 Sep 2003 19:02:42 -0000
@@ -326,7 +326,7 @@
*/
public void hasFunctionBody(boolean b)
{
- hasFunctionBody = true;
+ hasFunctionBody = b;
}
/**
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.109
diff -u -r1.109 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 15 Sep 2003 13:20:30 -0000 1.109
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 15 Sep 2003 19:02:44 -0000
@@ -23,8 +23,8 @@
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ITranslationResult;
-import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserFactory;
+import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerException;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
@@ -53,6 +53,7 @@
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType;
@@ -1545,7 +1546,7 @@
}
ITokenDuple d = name();
- IASTElaboratedTypeSpecifier elaboratedTypeSpec = null;
+ IASTTypeSpecifier elaboratedTypeSpec = null;
final boolean isForewardDecl = ( LT(1) == IToken.tSEMI );
try
@@ -1567,7 +1568,7 @@
sdw.setTypeSpecifier(elaboratedTypeSpec);
if( isForewardDecl )
- elaboratedTypeSpec.acceptElement( requestor );
+ ((IASTElaboratedTypeSpecifier)elaboratedTypeSpec).acceptElement( requestor );
}
/**
* Consumes template parameters.
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java,v
retrieving revision 1.4
diff -u -r1.4 ASTElaboratedTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java 14 Aug 2003 19:49:44 -0000 1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java 15 Sep 2003 19:02:44 -0000
@@ -26,7 +26,8 @@
*/
public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElaboratedTypeSpecifier
{
- private final boolean isForwardDeclaration;
+ private List references;
+ private final boolean isForwardDeclaration;
private final ASTClassKind kind;
private final ASTQualifiedNamedElement qualifiedName;
private NamedOffsets offsets = new NamedOffsets();
@@ -48,7 +49,7 @@
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), checkSymbol.getName() );
store = new ASTReferenceStore( references );
isForwardDeclaration = isDecl;
-
+ this.references = references;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getName()
@@ -138,5 +139,10 @@
*/
public void setNameOffset(int o) {
offsets.setNameOffset(o);
+ }
+
+ public List getReferences()
+ {
+ return references;
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java,v
retrieving revision 1.5
diff -u -r1.5 ASTFunction.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java 8 Sep 2003 19:17:53 -0000 1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java 15 Sep 2003 19:02:44 -0000
@@ -32,7 +32,8 @@
*/
public class ASTFunction extends ASTScope implements IASTFunction
{
- private boolean hasFunctionBody = false;
+ private final boolean previouslyDeclared;
+ private boolean hasFunctionBody = false;
private final IASTTemplate ownerTemplate;
private final IASTAbstractDeclaration returnType;
private final IASTExceptionSpecification exception;
@@ -51,7 +52,7 @@
* @param ownerTemplate
* @param references
*/
- public ASTFunction(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int nameOffset, IASTTemplate ownerTemplate, List references)
+ public ASTFunction(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int nameOffset, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared )
{
super( symbol );
this.parameters = parameters;
@@ -63,6 +64,7 @@
this.ownerTemplate = ownerTemplate;
this.references = new ASTReferenceStore( references );
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() );
+ this.previouslyDeclared =previouslyDeclared;
}
@@ -249,5 +251,14 @@
{
return ( getSymbol().getContainingSymbol().getASTExtension().getPrimaryDeclaration() ) instanceof IASTCodeScope ?
(IASTCodeScope) getSymbol().getContainingSymbol().getASTExtension().getPrimaryDeclaration() : null;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTFunction#previouslyDeclared()
+ */
+ public boolean previouslyDeclared()
+ {
+ return previouslyDeclared;
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java,v
retrieving revision 1.5
diff -u -r1.5 ASTMethod.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java 14 Aug 2003 15:33:27 -0000 1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java 15 Sep 2003 19:02:44 -0000
@@ -45,7 +45,7 @@
* @param ownerTemplate
* @param references
*/
- public ASTMethod(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int nameOffset, IASTTemplate ownerTemplate, List references,
+ public ASTMethod(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int nameOffset, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared,
boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain )
{
super(
@@ -56,7 +56,7 @@
startOffset,
nameOffset,
ownerTemplate,
- references);
+ references, previouslyDeclared );
this.visibility = visibility;
this.isConstructor = isConstructor;
this.isDestructor = isDestructor;
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java,v
retrieving revision 1.37
diff -u -r1.37 CompleteParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java 15 Sep 2003 13:20:30 -0000 1.37
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java 15 Sep 2003 19:02:46 -0000
@@ -425,9 +425,13 @@
ISymbolASTExtension extension = symbol.getASTExtension();
if( extension == null )
{
- if( astSymbol instanceof IASTNamespaceDefinition )
+ if( astSymbol instanceof IASTNamespaceDefinition ||
+ astSymbol instanceof IASTEnumerationSpecifier ||
+ astSymbol instanceof IASTClassSpecifier ||
+ astSymbol instanceof IASTElaboratedTypeSpecifier )
+
extension = new NamespaceSymbolExtension( symbol, astSymbol );
- else if( astSymbol instanceof IASTFunction ) // TODO : other foreward declare cases
+ else if( astSymbol instanceof IASTFunction || astSymbol instanceof IASTMethod )
{
extension = new ForewardDeclaredSymbolExtension( symbol, astSymbol );
}
@@ -1351,7 +1355,7 @@
setParameters( symbol, references, parameters.iterator() );
symbol.setIsForwardDeclaration(!isFunctionDefinition);
-
+ boolean previouslyDeclared = false;
if( isFunctionDefinition )
{
List functionParameters = new LinkedList();
@@ -1371,6 +1375,7 @@
if( functionDeclaration != null )
{
functionDeclaration.setTypeSymbol( symbol );
+ previouslyDeclared = true;
}
}
@@ -1382,7 +1387,7 @@
{
throw new ASTSemanticException();
}
- ASTFunction function = new ASTFunction( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references );
+ ASTFunction function = new ASTFunction( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references, previouslyDeclared );
try
{
attachSymbolExtension(symbol, function);
@@ -1491,13 +1496,20 @@
List newReferences = null;
if( absDecl.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier )
{
- IASTSimpleTypeSpecifier.Type kind = ((IASTSimpleTypeSpecifier)absDecl.getTypeSpecifier()).getType();
- if( kind == IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME )
+ if( ((IASTSimpleTypeSpecifier)absDecl.getTypeSpecifier()).getType() == IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME )
{
xrefSymbol = ((ASTSimpleTypeSpecifier)absDecl.getTypeSpecifier()).getSymbol();
newReferences = ((ASTSimpleTypeSpecifier)absDecl.getTypeSpecifier()).getReferences();
}
}
+ else if( absDecl.getTypeSpecifier() instanceof ASTElaboratedTypeSpecifier )
+ {
+ ASTElaboratedTypeSpecifier elab = (ASTElaboratedTypeSpecifier)absDecl.getTypeSpecifier();
+ xrefSymbol = elab.getSymbol();
+ newReferences = new ArrayList();
+ newReferences.addAll( elab.getReferences() );
+ newReferences.add( createReference( xrefSymbol, elab.getName(), elab.getNameOffset()) );
+ }
String paramName = "";
if(absDecl instanceof IASTParameterDeclaration){
@@ -1654,8 +1666,10 @@
throw new ASTSemanticException();
}
+ boolean previouslyDeclared = false;
+ //TODO : Hoda - if symbol was previously declared in PST, then set this to true
- ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain );
+ ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references, previouslyDeclared, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain );
try
{
attachSymbolExtension( symbol, method );
@@ -1984,10 +1998,31 @@
throw new ASTSemanticException();
}
}
+ return (IASTElaboratedTypeSpecifier)checkSymbol.getASTExtension().getPrimaryDeclaration();
}
-
-
- return (IASTElaboratedTypeSpecifier)checkSymbol.getASTExtension().getPrimaryDeclaration();
+ else
+ {
+ if( checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTClassSpecifier ||
+ checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTEnumerationSpecifier
+ )
+ {
+ ASTElaboratedTypeSpecifier elab = new ASTElaboratedTypeSpecifier( checkSymbol, kind, startingOffset, name.getFirstToken().getOffset(), endOffset, references, isForewardDecl );
+ try
+ {
+ attachSymbolExtension( checkSymbol, elab );
+ }
+ catch (ExtensionException e2)
+ {
+ throw new ASTSemanticException();
+ }
+ return elab;
+ }
+ if( checkSymbol.getASTExtension().getPrimaryDeclaration() instanceof IASTElaboratedTypeSpecifier )
+ return (IASTElaboratedTypeSpecifier)checkSymbol.getASTExtension().getPrimaryDeclaration();
+
+ }
+
+ throw new ASTSemanticException();
}
protected ParserSymbolTable pst;
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java,v
retrieving revision 1.9
diff -u -r1.9 ASTFunction.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java 8 Sep 2003 19:17:53 -0000 1.9
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java 15 Sep 2003 19:02:46 -0000
@@ -218,4 +218,12 @@
{
return null;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTFunction#previouslyDeclared()
+ */
+ public boolean previouslyDeclared()
+ {
+ // TODO Auto-generated method stub
+ return false;
+ }
}