Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2004-07-13 19:23:43 +0000
committerAndrew Niefer2004-07-13 19:23:43 +0000
commit450023d5050b4c1e3b69bd2179541af68a5f9e05 (patch)
tree46060d7c694cdf55d1b752fa606639354b90f8f6
parent11f779dbd995955d9ecc0e7fc8799ab0ff26dde1 (diff)
downloadorg.eclipse.cdt-450023d5050b4c1e3b69bd2179541af68a5f9e05.tar.gz
org.eclipse.cdt-450023d5050b4c1e3b69bd2179541af68a5f9e05.tar.xz
org.eclipse.cdt-450023d5050b4c1e3b69bd2179541af68a5f9e05.zip
fix bug 69662 - conversion operator definitions
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java37
2 files changed, 21 insertions, 24 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
index 92fee1ee0c2..f7e3d4f11da 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
@@ -2071,4 +2071,12 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
parse( writer.toString() );
}
+
+ public void testBug69662() throws Exception{
+ Writer writer = new StringWriter();
+ writer.write( "class A { operator float * (); }; \n" );
+ writer.write( "A::operator float * () { } \n" );
+
+ parse( writer.toString() );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
index 2d3a344279b..5f6a51e0fc9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
@@ -354,6 +354,10 @@ public class BasicTokenDuple implements ITokenDuple {
public String extractNameFromTemplateId(){
ITokenDuple nameDuple = getLastSegment();
+ List [] argLists = getTemplateIdArgLists();
+ if( argLists == null || argLists[ argLists.length - 1 ] == null )
+ return nameDuple.toString();
+
Iterator i = nameDuple.iterator();
if( !i.hasNext() )
@@ -377,30 +381,15 @@ public class BasicTokenDuple implements ITokenDuple {
else if( token.getType() == IToken.t_operator ){
token = (IToken) i.next();
nameBuffer.append( ' ' );
- nameBuffer.append( token.getImage() );
-
- if( !i.hasNext() )
- return nameBuffer.toString();
-
- //operator new [] and operator delete []
- if( (token.getType() == IToken.t_new || token.getType() == IToken.t_delete) &&
- (token.getNext().getType() == IToken.tLBRACKET ) )
- {
- nameBuffer.append( ' ' );
- nameBuffer.append( ((IToken)i.next()).getImage() );
- nameBuffer.append( ((IToken)i.next()).getImage() );
- }
- //operator []
- else if( token.getType() == IToken.tLBRACKET )
- {
- nameBuffer.append( ((IToken)i.next()).getImage() );
- }
- //operator ( )
- else if( token.getType() == IToken.tLBRACE )
- {
- nameBuffer.append( ' ' );
- nameBuffer.append( ((IToken)i.next()).getImage() );
- }
+
+ IToken first = token;
+ IToken temp = null;
+ while( i.hasNext() ){
+ temp = (IToken) i.next();
+ if( temp.getType() != IToken.tLT )
+ token = temp;
+ }
+ nameBuffer.append( createStringRepresentation( first, token ) );
}
return nameBuffer.toString();

Back to the top