[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Applied [HEAD] Further parser updates
|
CORE
Fixed Bug 43644 : 6 triangle icons appearing in outline viewer
when typing an error
Fixed Bug 43062 : Outline is confused on operator methods
containing spaces
Fixed Bug 39531 : Problems with type conversion operators
TEST
Added QuickParseASTTests::testBug43644() & testBug43062().
Moved ASTFailedTests::testBug39531() to QuickParseASTTests.
JohnC
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.117
diff -u -r1.117 ChangeLog
--- ChangeLog 26 Sep 2003 17:53:41 -0000 1.117
+++ ChangeLog 26 Sep 2003 19:14:32 -0000
@@ -1,3 +1,7 @@
+2003-09-26 John Camelon
+ Added QuickParseASTTests::testBug43644() & testBug43062().
+ Moved ASTFailedTests::testBug39531() to QuickParseASTTests.
+
2003-09-25 Andrew Niefer
-bug43129 - Cannot search for definitions of global variables
-added testbug43129() in OtherPatternTests
Index: failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java,v
retrieving revision 1.15
diff -u -r1.15 ASTFailedTests.java
--- failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java 23 Sep 2003 22:58:26 -0000 1.15
+++ failures/org/eclipse/cdt/core/parser/failedTests/ASTFailedTests.java 26 Sep 2003 19:14:32 -0000
@@ -62,10 +62,6 @@
}
assertCodeFailsParse(code.toString());
}
- public void testBug39531() throws Exception
- {
- assertCodeFailsParse("class AString { operator char const *() const; };");
- }
public void testBug39536A() throws Exception
{
Index: indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java,v
retrieving revision 1.19
diff -u -r1.19 IndexManagerTests.java
--- indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java 26 Sep 2003 17:53:41 -0000 1.19
+++ indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java 26 Sep 2003 19:14:32 -0000
@@ -421,7 +421,7 @@
for (int i=0;i<methodresults.length; i++)
{
- assertEquals(methodResultModel[i],methodresults[i].toString());
+ assertEquals("Index is " +i , methodResultModel[i],methodresults[i].toString());
}
}
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.33
diff -u -r1.33 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 24 Sep 2003 17:26:38 -0000 1.33
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 26 Sep 2003 19:14:33 -0000
@@ -811,5 +811,37 @@
IASTVariable varX = (IASTVariable)parse( "extern int x;").getDeclarations().next();
assertTrue( varX.isExtern() );
}
-
+
+ public void testBug43503() throws Exception
+ {
+ StringBuffer buff = new StringBuffer();
+
+ buff.append( "class SD_02 {");
+ buff.append( " public:");
+ buff.append( " void f_SD_02();");
+ buff.append( " };");
+ buff.append( "class SD_01 {\n");
+ buff.append( " public:\n");
+ buff.append( " SD_02 *next;"); // REFERENCE SD_02
+ buff.append( " void f_SD_01();\n");
+ buff.append( "};\n");
+ buff.append( "int main(){\n");
+ buff.append( " SD_01 a = new SD_01();\n"); // REFERENCE SD_01 * 2
+ buff.append( " a->f_SD_01();\n"); // REFERENCE a && REFERENCE f_SD_01
+ buff.append( "}\n");
+ buff.append( "void SD_01::f_SD_01()\n"); // REFERENCE SD_01
+ buff.append( "{\n");
+ buff.append( " next->f_SD_02();\n"); // REFERENCE next && reference f_SD_02
+ buff.append( "}\n");
+ Iterator i = parse( buff.toString() ).getDeclarations();
+ IASTClassSpecifier SD_02 = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+ IASTMethod f_SD_02 = (IASTMethod)getDeclarations( SD_02 ).next();
+ IASTClassSpecifier SD_01 = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+ IASTField next= (IASTField)getDeclarations( SD_01 ).next();
+ IASTFunction main = (IASTFunction)i.next();
+ IASTVariable a = (IASTVariable)getDeclarations(main).next();
+ IASTMethod f_SD_01 = (IASTMethod)i.next();
+ assertFalse( i.hasNext() );
+ assertAllReferences( 8, createTaskList( new Task( SD_02), new Task( SD_01, 3 ), new Task( a ), new Task( f_SD_01 ), new Task( f_SD_02 ), new Task( next ) ));
+ }
}
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java,v
retrieving revision 1.7
diff -u -r1.7 CompleteParseBaseTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java 23 Sep 2003 22:58:26 -0000 1.7
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java 26 Sep 2003 19:14:33 -0000
@@ -51,6 +51,7 @@
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
import org.eclipse.cdt.core.parser.ast.IASTParameterReference;
+import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
@@ -687,8 +688,28 @@
{
IASTReference r = (IASTReference)allReferences.next();
if( r.getReferencedElement() == element )
+ {
if( ! matches.add( r ) && ! allowDuplicates )
fail( "Duplicate reference found for ISourceElementCallbackDelegate: " + element + " @ offset " + r.getOffset() );
+ }
+ else
+ {
+ if( r.getReferencedElement() instanceof IASTQualifiedNameElement &&
+ element instanceof IASTQualifiedNameElement )
+ {
+ if( qualifiedNamesEquals(
+ ((IASTQualifiedNameElement)r.getReferencedElement()).getFullyQualifiedName(),
+ ((IASTQualifiedNameElement)element).getFullyQualifiedName()
+ )
+ )
+ {
+
+ if( ! matches.add( r ) && ! allowDuplicates )
+ fail( "Duplicate reference found for ISourceElementCallbackDelegate: " + element + " @ offset " + r.getOffset() );
+ }
+
+ }
+ }
}
assertEquals( expectedDistinctReferenceCount, matches.size() );
@@ -809,6 +830,22 @@
result.add( task6 );
return result;
}
-
+
+ public boolean qualifiedNamesEquals( String [] fromAST, String [] theTruth)
+ {
+ if( fromAST == null || theTruth == null ) return false;
+ if( fromAST.length != theTruth.length ) return false;
+ for( int i = 0; i < fromAST.length; ++i )
+ {
+ if( !( fromAST[i].equals( theTruth[i] ) ) )
+ return false;
+ }
+ return true;
+ }
+
+ protected void assertQualifiedName(String [] fromAST, String [] theTruth)
+ {
+ assertTrue( qualifiedNamesEquals( fromAST, theTruth ));
+ }
}
Index: parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java,v
retrieving revision 1.21
diff -u -r1.21 QuickParseASTTests.java
--- parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java 23 Sep 2003 22:58:26 -0000 1.21
+++ parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java 26 Sep 2003 19:14:34 -0000
@@ -1843,6 +1843,33 @@
assertTrue(m1.getVisiblity() == ASTAccessVisibility.PUBLIC);
assertTrue(m2.getVisiblity() == ASTAccessVisibility.PUBLIC);
assertTrue(m3.getVisiblity() == ASTAccessVisibility.PUBLIC);
- }
+ }
+
+ public void testBug43644() throws Exception
+ {
+ Iterator i = parse( "void foo();{ int x; }", true, false ).getDeclarations();
+ IASTFunction f = (IASTFunction)i.next();
+ assertFalse( i.hasNext() );
+ }
+
+ public void testBug43062() throws Exception
+ {
+ Iterator i = parse( "class X { operator short (); operator int unsigned(); operator int signed(); };").getDeclarations();
+ IASTClassSpecifier classX = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
+ assertFalse( i.hasNext() );
+ Iterator members = classX.getDeclarations();
+ IASTMethod shortMethod = (IASTMethod)members.next();
+ IASTMethod unsignedMethod = (IASTMethod)members.next();
+ IASTMethod signedMethod = (IASTMethod)members.next();
+ assertFalse( members.hasNext() );
+ assertEquals( shortMethod.getName(), "operator short");
+ assertEquals( unsignedMethod.getName(), "operator int unsigned");
+ assertEquals( signedMethod.getName(), "operator int signed");
+ }
+
+ public void testBug39531() throws Exception
+ {
+ parse("class AString { operator char const *() const; };");
+ }
}
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.139
diff -u -r1.139 ChangeLog
--- parser/ChangeLog 25 Sep 2003 19:40:35 -0000 1.139
+++ parser/ChangeLog 26 Sep 2003 19:13:56 -0000
@@ -1,3 +1,8 @@
+2003-09-26 John Camelon
+ Fixed Bug 43644 : 6 triangle icons appearing in outline viewer when typing an error
+ Fixed Bug 43062 : Outline is confused on operator methods containing spaces
+ Fixed Bug 39531 : Problems with type conversion operators
+
2003-09-25 Hoda Amer
- Last part of solution to bug#42453: Expression result types not computed
Added the handling of POSTFIX_TYPENAME_IDENTIFIER
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.114
diff -u -r1.114 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 25 Sep 2003 13:32:33 -0000 1.114
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 26 Sep 2003 19:13:59 -0000
@@ -846,8 +846,9 @@
IASTTemplate ownerTemplate)
throws Backtrack
{
+ IToken firstToken = LA(1);
DeclarationWrapper sdw =
- new DeclarationWrapper(scope, LA(1).getOffset(), ownerTemplate);
+ new DeclarationWrapper(scope, firstToken.getOffset(), ownerTemplate);
declSpecifierSeq(false, strategy == SimpleDeclarationStrategy.TRY_CONSTRUCTOR, sdw, forKR );
try
@@ -893,6 +894,8 @@
case IToken.tLBRACE :
if (forKR)
throw backtrack;
+ if( firstToken == LA(1) )
+ throw backtrack;
declarator.setHasFunctionBody(true);
hasFunctionBody = true;
break;
@@ -2202,7 +2205,7 @@
else
{
// must be a conversion function
- typeId(d.getDeclarationWrapper().getScope(), false );
+ typeId(d.getDeclarationWrapper().getScope(), true );
toSend = lastToken;
}
ITokenDuple duple =
@@ -3553,7 +3556,7 @@
/**
* @throws Backtrack
*/
- protected IASTTypeId typeId(IASTScope scope, boolean forNewExpression ) throws Backtrack
+ protected IASTTypeId typeId(IASTScope scope, boolean skipArrayModifiers ) throws Backtrack
{
IToken mark = mark();
ITokenDuple name = null;
@@ -3576,6 +3579,7 @@
// do nothing
}
+ boolean encounteredType = false;
simpleMods : for (;;)
{
switch (LT(1))
@@ -3611,45 +3615,61 @@
break;
case IToken.tIDENTIFIER :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
name = name();
kind = IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME;
- break simpleMods;
+ break;
case IToken.t_int :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
kind = IASTSimpleTypeSpecifier.Type.INT;
consume();
- break simpleMods;
+ break;
case IToken.t_char :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
kind = IASTSimpleTypeSpecifier.Type.CHAR;
consume();
- break simpleMods;
+ break;
case IToken.t_bool :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
kind = IASTSimpleTypeSpecifier.Type.BOOL;
consume();
- break simpleMods;
+ break;
case IToken.t_double :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
kind = IASTSimpleTypeSpecifier.Type.DOUBLE;
consume();
- break simpleMods;
+ break;
case IToken.t_float :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
kind = IASTSimpleTypeSpecifier.Type.FLOAT;
consume();
- break simpleMods;
+ break;
case IToken.t_wchar_t :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
kind = IASTSimpleTypeSpecifier.Type.WCHAR_T;
consume();
- break simpleMods;
+ break;
case IToken.t_void :
+ if( encounteredType ) break simpleMods;
+ encounteredType = true;
kind = IASTSimpleTypeSpecifier.Type.VOID;
consume();
- break simpleMods;
+ break;
default :
@@ -3690,13 +3710,13 @@
throw backtrack;
TypeId id = new TypeId();
- IToken last = mark();
+ IToken last = lastToken;
consumePointerOperators( id );
if( lastToken == null ) lastToken = last;
- if( ! forNewExpression )
+ if( ! skipArrayModifiers )
{
- last = mark();
+ last = lastToken;
consumeArrayModifiers( id, scope );
if( lastToken == null ) lastToken = last;
}
Index: parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java,v
retrieving revision 1.11
diff -u -r1.11 TokenDuple.java
--- parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java 15 Sep 2003 22:50:25 -0000 1.11
+++ parser/org/eclipse/cdt/internal/core/parser/TokenDuple.java 26 Sep 2003 19:13:59 -0000
@@ -84,16 +84,28 @@
public String toString()
{
StringBuffer buff = new StringBuffer();
+ IToken prev = null;
IToken iter = firstToken;
for( ; ; )
{
- buff.append( iter.getImage() );
- if( iter.getType() == IToken.t_operator )
+ if( prev != null &&
+ prev.getType() != IToken.tCOLONCOLON &&
+ prev.getType() != IToken.tIDENTIFIER &&
+ prev.getType() != IToken.tLT &&
+ prev.getType() != IToken.tCOMPL &&
+ iter.getType() != IToken.tGT &&
+ prev.getType() != IToken.tLBRACKET &&
+ iter.getType() != IToken.tRBRACKET &&
+ iter.getType() != IToken.tCOLONCOLON )
buff.append( ' ');
+
+
+ buff.append( iter.getImage() );
if( iter == lastToken ) break;
+ prev = iter;
iter = iter.getNext();
}
- return buff.toString();
+ return buff.toString().trim();
}
public boolean isIdentifier()
- Prev by Date:
Applied: [cdt-patch] Fixes for 43099, 43100, 42400, 42717
- Next by Date:
[cdt-patch] Fixes for 43220, 43616, 43756, and 43614
- Previous by thread:
Applied: [cdt-patch] Fixes for 43099, 43100, 42400, 42717
- Next by thread:
[cdt-patch] Fixes for 43220, 43616, 43756, and 43614
- Index(es):