mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
CORE
Fixed Bug 43084 : need to restructure TypeId to allow dynamic_cast<> type expression references. Fixed Bug 39504 : sizeof-expressions are not handled properly TESTS Replaced ASTFailedTests::testBug39504A() with CompleteParseASTTest::testBug39504(). Moved testPostfixTypeIdExpression2() && testPostfixTypeIdTypeId2() to CompleteParseASTExpressionTest. Restructured expression reference tests so that the order of arrival will not cause JUnit failures.
This commit is contained in:
parent
66859771be
commit
02c194aaf4
26 changed files with 1445 additions and 695 deletions
|
@ -1,3 +1,8 @@
|
|||
2003-09-23 John Camelon
|
||||
Replaced ASTFailedTests::testBug39504A() with CompleteParseASTTest::testBug39504().
|
||||
Moved testPostfixTypeIdExpression2() && testPostfixTypeIdTypeId2() to CompleteParseASTExpressionTest.
|
||||
Restructured expression reference tests so that the order of arrival will not cause JUnit failures.
|
||||
|
||||
2003-09-23 Hoda Amer
|
||||
Added CompleteParseASTTest.testBug43373()
|
||||
Added QuickParseASTTests.testBug43371()
|
||||
|
|
|
@ -37,10 +37,7 @@ public class ASTFailedTests extends BaseASTTest
|
|||
{
|
||||
assertCodeFailsParse("FUNCTION_MACRO( 1, a )\n int i;");
|
||||
}
|
||||
public void testBug39504A() throws Exception
|
||||
{
|
||||
assertCodeFailsParse("int y = sizeof(x[0]);");
|
||||
}
|
||||
|
||||
|
||||
public void testBug39525() throws Exception
|
||||
{
|
||||
|
|
|
@ -41,62 +41,6 @@ public class FailedCompleteParseASTExpressionTest extends CompleteParseBaseTest
|
|||
super(name);
|
||||
}
|
||||
|
||||
// public void testPostfixSubscriptA_Bug43238() throws Exception
|
||||
// {
|
||||
// Iterator i = parse ("int pa[10][5] ; \n int f(int ia){} \n int f(void); \n int x = f(pa[1][2]);").getDeclarations();
|
||||
// IASTVariable pa = (IASTVariable) i.next();
|
||||
// IASTFunction f1 = (IASTFunction) i.next();
|
||||
// IASTFunction f2 = (IASTFunction) i.next();
|
||||
// IASTVariable x = (IASTVariable) i.next();
|
||||
// Iterator references = callback.getReferences().iterator();
|
||||
// assertEquals( callback.getReferences().size(), 1 ); // should be = 2
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), pa );
|
||||
// //assertEquals( ((IASTReference)references.next()).getReferencedElement(), f1 );
|
||||
// }
|
||||
// public void testPostfixSubscriptB_Bug43238() throws Exception
|
||||
// {
|
||||
// Iterator i = parse ("int* pa[10][5] ; \n int f(int* ia){} \n int f(void); \n int x = f(pa[1][2]);").getDeclarations();
|
||||
// IASTVariable pa = (IASTVariable) i.next();
|
||||
// IASTFunction f1 = (IASTFunction) i.next();
|
||||
// IASTFunction f2 = (IASTFunction) i.next();
|
||||
// IASTVariable x = (IASTVariable) i.next();
|
||||
// Iterator references = callback.getReferences().iterator();
|
||||
// assertEquals( callback.getReferences().size(), 1 ); // should be = 2
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), pa );
|
||||
// //assertEquals( ((IASTReference)references.next()).getReferencedElement(), f1 );
|
||||
// }
|
||||
// public void testPostfixSubscriptWithReferences_Bug43238() throws Exception
|
||||
// {
|
||||
// Iterator i = parse ("class A{}; \n A *pa[10][5] ; \n int f(A* ia){} \n int f(void); \n int x = f(pa[1][2]);").getDeclarations();
|
||||
// IASTClassSpecifier cl = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
|
||||
// IASTVariable pa = (IASTVariable) i.next();
|
||||
// IASTFunction f1 = (IASTFunction) i.next();
|
||||
// IASTFunction f2 = (IASTFunction) i.next();
|
||||
// IASTVariable x = (IASTVariable) i.next();
|
||||
// Iterator references = callback.getReferences().iterator();
|
||||
// assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
// assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), pa );
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), f1 );
|
||||
// }
|
||||
// public void testConditionalExpression_Bug43159() throws Exception {
|
||||
// Iterator i = parse( "int foo(bool); int foo(int); int a = 10, b = 4, c = 2; int x = foo( a > 5 ? b : c );").getDeclarations();
|
||||
// IASTFunction foo1 = (IASTFunction)i.next();
|
||||
// IASTFunction foo2 = (IASTFunction)i.next();
|
||||
// IASTVariable a = (IASTVariable)i.next();
|
||||
// IASTVariable b = (IASTVariable)i.next();
|
||||
// IASTVariable c = (IASTVariable)i.next();
|
||||
// IASTVariable x = (IASTVariable)i.next();
|
||||
// assertFalse( i.hasNext() );
|
||||
// assertEquals( callback.getReferences().size(), 3 ); // should be 4
|
||||
// Iterator references =callback.getReferences().iterator();
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), c );
|
||||
// //assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
// assertFalse( references.hasNext() );
|
||||
// }
|
||||
|
||||
public void testConditionalExpressionWithReferencesB_Bug43106() throws Exception {
|
||||
Iterator i = parse( "class A{}; class B : public A{}; int foo(); int foo(A&); A a ; B b; int c = 0; int x = foo( c > 5 ? b : a );").getDeclarations();
|
||||
IASTClassSpecifier cla = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
|
||||
|
@ -108,18 +52,10 @@ public class FailedCompleteParseASTExpressionTest extends CompleteParseBaseTest
|
|||
IASTVariable c = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 7 ); // should be 8
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), cla );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), cla );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), cla );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), clb );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), c );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
//assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 7 /* should be 8 */,
|
||||
createTaskList( new Task( cla, 3 ), new Task( clb ), new Task( c), new Task( b ), new Task( a )/*, new Task( foo2) */));
|
||||
}
|
||||
|
||||
public void testPMDotStarPointerToMemberFunction_Bug43242() throws Exception
|
||||
{
|
||||
Iterator i = parse ("class A { int m(int); }; \n A a; int A::*pm = &A::m; \n int f(){} \n int f(int); \n int x = f((a.*pm)(5));").getDeclarations();
|
||||
|
@ -131,14 +67,10 @@ public class FailedCompleteParseASTExpressionTest extends CompleteParseBaseTest
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( callback.getReferences().size(), 5 ); // should be 6
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), method );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), pm );
|
||||
// assertEquals( ((IASTReference) references.next()).getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences( 5 /* should be 8 */,
|
||||
createTaskList( new Task( cl, 2 /* should be 3 */ ), new Task( method ), new Task( a ), new Task( pm ) /* should be ,new Task( f2 ) */
|
||||
));
|
||||
}
|
||||
public void testPMArrowStarPointerToMemberFunction_Bug43242() throws Exception
|
||||
{
|
||||
|
@ -151,14 +83,10 @@ public class FailedCompleteParseASTExpressionTest extends CompleteParseBaseTest
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( callback.getReferences().size(), 5 ); // should be 6
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), method );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), pm );
|
||||
// assertEquals( ((IASTReference) references.next()).getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences( 5 /* should be more */,
|
||||
createTaskList( new Task( cl, 2 ), new Task( method ), new Task( a /*, 2 */), new Task( pm )/* ,new Task( f2 )*/));
|
||||
|
||||
}
|
||||
public void testUnaryStarCastexpressionPointerToFunction_Bug43241() throws Exception
|
||||
{
|
||||
|
@ -168,11 +96,9 @@ public class FailedCompleteParseASTExpressionTest extends CompleteParseBaseTest
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( callback.getReferences().size(), 2 ); // should be 3
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), m );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), pm );
|
||||
// assertEquals( ((IASTReference) references.next()).getReferencedElement(), f2 );
|
||||
assertAllReferences( 2 /* should be 3 */,
|
||||
createTaskList( new Task( m ), new Task( pm ) /* ,new Task( f2 )*/));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,13 +16,10 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||
|
||||
/**
|
||||
* @author hamer
|
||||
|
@ -43,10 +40,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( fr1.getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences(1, createTaskList( new Task( f2 ) ));
|
||||
}
|
||||
// Kind PRIMARY_INTEGER_LITERAL : int
|
||||
public void testPrimaryIntegerLiteral() throws Exception
|
||||
|
@ -55,9 +49,10 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( fr1.getReferencedElement(), f1 );
|
||||
assertAllReferences( 1, createTaskList( new Task( f1 )));
|
||||
// Iterator references = callback.getReferences().iterator();
|
||||
// IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
// assertEquals( fr1.getReferencedElement(), f1 );
|
||||
|
||||
}
|
||||
// Kind PRIMARY_CHAR_LITERAL : char
|
||||
|
@ -67,10 +62,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( fr1.getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences( 1, createTaskList( new Task( f2 )));
|
||||
}
|
||||
// Kind PRIMARY_FLOAT_LITERAL : float
|
||||
public void testPrimaryFloatLiteral() throws Exception
|
||||
|
@ -79,10 +71,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( fr1.getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences( 1, createTaskList( new Task( f2 )));
|
||||
}
|
||||
// Kind PRIMARY_STRING_LITERAL : char*
|
||||
public void testPrimaryStringLiteral() throws Exception
|
||||
|
@ -91,10 +80,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( fr1.getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences( 1, createTaskList( new Task( f2 )));
|
||||
}
|
||||
// Kind PRIMARY_BOOLEAN_LITERAL : bool
|
||||
public void testPrimaryBooleanLiteral() throws Exception
|
||||
|
@ -103,10 +89,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( fr1.getReferencedElement(), f1 );
|
||||
|
||||
assertAllReferences( 1, createTaskList( new Task( f1 )));
|
||||
}
|
||||
// Kind PRIMARY_THIS : type of inner most enclosing structure scope
|
||||
public void testPrimaryThis() throws Exception
|
||||
|
@ -119,11 +102,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTMethod m = (IASTMethod) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( ((IASTClassReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTClassReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTClassReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTFunctionReference) references.next()).getReferencedElement(), f2 );
|
||||
assertAllReferences( 4, createTaskList( new Task( cl, 3 ), new Task( f2 )));
|
||||
}
|
||||
// Kind PRIMARY_BRACKETED_EXPRESSION : LHS
|
||||
public void testPrimaryBracketedExpression() throws Exception
|
||||
|
@ -132,24 +111,20 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( fr1.getReferencedElement(), f1 );
|
||||
assertAllReferences( 1, createTaskList( new Task( f1 )));
|
||||
}
|
||||
// Kind ID_EXPRESSION : type of the ID
|
||||
public void testIdExpression() throws Exception
|
||||
{
|
||||
Iterator i = parse ("class A{}a; \n int f(A a); \n int f(void); \n int x = f(a);").getDeclarations();
|
||||
|
||||
IASTVariable a = (IASTVariable) i.next();
|
||||
IASTClassSpecifier cl = (IASTClassSpecifier)a.getAbstractDeclaration().getTypeSpecifier();
|
||||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTClassReference clr1 = (IASTClassReference) references.next();
|
||||
IASTVariableReference ar1 = (IASTVariableReference) references.next();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( ar1.getReferencedElement(), a );
|
||||
assertEquals( fr1.getReferencedElement(), f1 );
|
||||
|
||||
assertAllReferences( 3, createTaskList( new Task( cl ), new Task( f1 ),new Task( a ) ) );
|
||||
}
|
||||
// Kind ID_EXPRESSION ( refers to a pointer ) : pointer to type of ID
|
||||
public void testIdExpressionToPointer() throws Exception
|
||||
|
@ -160,14 +135,8 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTClassReference clr1 = (IASTClassReference) references.next();
|
||||
IASTClassReference clr2 = (IASTClassReference) references.next();
|
||||
IASTVariableReference ar1 = (IASTVariableReference) references.next();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( clr1.getReferencedElement(), cl );
|
||||
assertEquals( ar1.getReferencedElement(), a );
|
||||
assertEquals( fr1.getReferencedElement(), f1 );
|
||||
assertAllReferences( 4, createTaskList( new Task( cl, 2 ), new Task( f1 ), new Task( a ) ) );
|
||||
|
||||
}
|
||||
// Kind POSTFIX_SUBSCRIPT
|
||||
public void testPostfixSubscript() throws Exception
|
||||
|
@ -177,10 +146,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), pa );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), f1 );
|
||||
assertAllReferences( 2, createTaskList( new Task( f1 ), new Task( pa ) ) );
|
||||
}
|
||||
|
||||
public void testPostfixSubscriptA() throws Exception
|
||||
|
@ -190,10 +156,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( callback.getReferences().size(), 2 ); // should be = 2
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), pa );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), f1 );
|
||||
assertAllReferences( 2, createTaskList( new Task( f1 ), new Task( pa ) ) );
|
||||
}
|
||||
|
||||
public void testPostfixSubscriptB() throws Exception
|
||||
|
@ -203,10 +166,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( callback.getReferences().size(), 2 ); // should be = 2
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), pa );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), f1 );
|
||||
assertAllReferences( 2, createTaskList( new Task( f1 ), new Task( pa ) ) );
|
||||
}
|
||||
|
||||
public void testPostfixSubscriptWithReferences() throws Exception
|
||||
|
@ -217,11 +177,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( ((IASTClassReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTClassReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), pa );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), f1 );
|
||||
assertAllReferences( 4, createTaskList( new Task( cl, 2 ), new Task( pa ), new Task( f1 )));
|
||||
}
|
||||
|
||||
// Kind POSTFIX_FUNCTIONCALL : return type of called function
|
||||
|
@ -230,11 +186,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
Iterator i = parse( "int foo( float b ); int bar( int a, int b ); int test( void ) { int x = bar( foo( 3.0 ), foo( 5.0 ) ) ; }").getDeclarations();
|
||||
IASTFunction foo = (IASTFunction)i.next();
|
||||
IASTFunction bar = (IASTFunction)i.next();
|
||||
IASTFunction test = (IASTFunction)i.next();
|
||||
i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
//THIS SHOULD BE 3, 2 references of foo(), one reference of bar()
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
assertAllReferences( 3, createTaskList( new Task( bar ), new Task( foo, 2 )));
|
||||
}
|
||||
// Kind POSTFIX_SIMPLETYPE_* : simple type
|
||||
public void testPostfixSimpletypesBug42823() throws Exception
|
||||
|
@ -246,10 +200,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction foo = (IASTFunction)i.next();
|
||||
IASTFunction test = (IASTFunction)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
//should be 1
|
||||
assertEquals( callback.getReferences().size(), 1 );
|
||||
assertAllReferences( 1, createTaskList( new Task( foo )));
|
||||
}
|
||||
|
||||
// Kind POSTFIX_TYPENAME_IDENTIFIER
|
||||
// public void testPostfixTypenameIdentifier() throws Exception{
|
||||
// Iterator i = parse( "class A {}; \n int foo(); int foo( A a ); \n int x = foo( typename A(); );").getDeclarations();
|
||||
|
@ -282,15 +235,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator members = getDeclarations(cl);
|
||||
IASTField m = (IASTField)members.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTClassReference clr= (IASTClassReference)references.next();
|
||||
assertEquals(clr.getReferencedElement(), cl);
|
||||
IASTVariableReference ar = (IASTVariableReference)references.next();
|
||||
assertEquals(ar.getReferencedElement(), a);
|
||||
IASTFieldReference mr = (IASTFieldReference) references.next();
|
||||
assertEquals(mr.getReferencedElement(), m);
|
||||
IASTFunctionReference fr = (IASTFunctionReference) references.next();
|
||||
assertEquals(fr.getReferencedElement(), f2);
|
||||
assertAllReferences( 4, createTaskList( new Task(cl), new Task(a), new Task(m), new Task(f2) ));
|
||||
}
|
||||
// Kind POSTFIX_ARROW_IDEXPRESSION : type of member in the scope of the container
|
||||
public void testPostfixArrowExpression() throws Exception{
|
||||
|
@ -302,15 +247,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator members = getDeclarations(cl);
|
||||
IASTField m = (IASTField)members.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTClassReference clr= (IASTClassReference)references.next();
|
||||
assertEquals(clr.getReferencedElement(), cl);
|
||||
IASTVariableReference ar = (IASTVariableReference)references.next();
|
||||
assertEquals(ar.getReferencedElement(), a);
|
||||
IASTFieldReference mr = (IASTFieldReference) references.next();
|
||||
assertEquals(mr.getReferencedElement(), m);
|
||||
IASTFunctionReference fr = (IASTFunctionReference) references.next();
|
||||
assertEquals(fr.getReferencedElement(), f2);
|
||||
assertAllReferences( 4, createTaskList( new Task(cl), new Task(a), new Task(m), new Task(f2) ));
|
||||
}
|
||||
// Kind POSTFIX_DOT_TEMPL_IDEXPRESS
|
||||
// Kind POSTFIX_ARROW_TEMPL_IDEXP
|
||||
|
@ -329,11 +266,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable y = (IASTVariable)subDecls.next();
|
||||
assertFalse( subDecls.hasNext() );
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), x );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 ); // should be foo2
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2)));
|
||||
}
|
||||
// Kind POSTFIX_DECREMENT : LHS
|
||||
public void testPostfixDecrement() throws Exception
|
||||
|
@ -347,11 +280,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable y = (IASTVariable)subDecls.next();
|
||||
assertFalse( subDecls.hasNext() );
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), x );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 ); // should be foo2
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2)));
|
||||
}
|
||||
|
||||
// Kind POSTFIX_DYNAMIC_CAST
|
||||
|
@ -382,30 +311,45 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTFunctionReference fr = (IASTFunctionReference) references.next();
|
||||
assertEquals(fr.getReferencedElement(), f2);
|
||||
|
||||
assertAllReferences( 1, createTaskList( new Task( f2 )));
|
||||
}
|
||||
// Kind POSTFIX_TYPEID_TYPEID : type of the ID
|
||||
public void testPostfixTypeIdTypeId() throws Exception{
|
||||
|
||||
// Kind POSTFIX_TYPEID_EXPRESSION : type of the ID
|
||||
public void testPostfixTypeIdExpression2() throws Exception{
|
||||
Iterator i = parse( "class A {}; \n A a; \n int foo(A); int foo( int ); \n int x = foo( typeid(a) );").getDeclarations();
|
||||
IASTClassSpecifier cl = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
|
||||
IASTVariable a = (IASTVariable) i.next();
|
||||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTClassReference clr= (IASTClassReference)references.next();
|
||||
assertEquals(clr.getReferencedElement(), cl);
|
||||
IASTClassReference clr2= (IASTClassReference)references.next();
|
||||
assertEquals(clr2.getReferencedElement(), cl);
|
||||
IASTVariableReference ar = (IASTVariableReference)references.next();
|
||||
assertEquals(ar.getReferencedElement(), a);
|
||||
IASTFunctionReference fr = (IASTFunctionReference) references.next();
|
||||
assertEquals(fr.getReferencedElement(), f1);
|
||||
|
||||
assertAllReferences( 4, createTaskList( new Task(cl, 2),new Task(a),new Task(f1)));
|
||||
}
|
||||
|
||||
|
||||
// Kind POSTFIX_TYPEID_TYPEID : type of the ID
|
||||
public void testPostfixTypeIdTypeId() throws Exception{
|
||||
Iterator i = parse( "class A {}; \n A a; \n int foo(A); int foo( int ); \n int x = foo( typeid(A) );").getDeclarations();
|
||||
IASTClassSpecifier cl = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
|
||||
IASTVariable a = (IASTVariable) i.next();
|
||||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
assertAllReferences( 4, createTaskList( new Task(cl, 3), new Task(f1)));
|
||||
}
|
||||
|
||||
// Kind POSTFIX_TYPEID_TYPEID : type of the ID
|
||||
public void testPostfixTypeIdTypeId2() throws Exception{
|
||||
Iterator i = parse( "class A {}; \n A a; \n int foo(A); int foo( int ); \n int x = foo( typeid(const A) );").getDeclarations();
|
||||
IASTClassSpecifier cl = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
|
||||
IASTVariable a = (IASTVariable) i.next();
|
||||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
assertAllReferences( 4, createTaskList( new Task(cl, 3), new Task(f1)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Kind UNARY_INCREMENT : LHS
|
||||
public void testUnaryIncrement() throws Exception
|
||||
{
|
||||
|
@ -418,11 +362,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable y = (IASTVariable)subDecls.next();
|
||||
assertFalse( subDecls.hasNext() );
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), x );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 ); // should be foo2
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(foo2), new Task(x) ));
|
||||
}
|
||||
// Kind UNARY_DECREMENT : LHS
|
||||
public void testUnaryDecrement() throws Exception
|
||||
|
@ -436,11 +376,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable y = (IASTVariable)subDecls.next();
|
||||
assertFalse( subDecls.hasNext() );
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), x );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 ); // should be foo2
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(foo2), new Task(x) ));
|
||||
}
|
||||
// Kind UNARY_STAR_CASTEXPRESSION : LHS + t_pointer
|
||||
public void testUnaryStarCastExpression() throws Exception
|
||||
|
@ -451,15 +387,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTClassReference clr1 = (IASTClassReference) references.next();
|
||||
IASTClassReference clr2 = (IASTClassReference) references.next();
|
||||
IASTVariableReference ar1 = (IASTVariableReference) references.next();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( clr1.getReferencedElement(), cl );
|
||||
assertEquals( ar1.getReferencedElement(), a );
|
||||
assertEquals( fr1.getReferencedElement(), f1 );
|
||||
|
||||
assertAllReferences( 4, createTaskList( new Task(cl, 2 ), new Task( a ), new Task(f1) ));
|
||||
}
|
||||
// Kind UNARY_AMPSND_CASTEXPRESSION : LHS + t_reference
|
||||
public void testUnaryAmpersandCastExpression() throws Exception
|
||||
|
@ -470,14 +398,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
IASTClassReference clr1 = (IASTClassReference) references.next();
|
||||
IASTClassReference clr2 = (IASTClassReference) references.next();
|
||||
IASTVariableReference ar1 = (IASTVariableReference) references.next();
|
||||
IASTFunctionReference fr1 = (IASTFunctionReference) references.next();
|
||||
assertEquals( clr1.getReferencedElement(), cl );
|
||||
assertEquals( ar1.getReferencedElement(), a );
|
||||
assertEquals( fr1.getReferencedElement(), f1 );
|
||||
assertAllReferences( 4, createTaskList( new Task(cl, 2 ), new Task( a ), new Task(f1) ));
|
||||
}
|
||||
// Kind UNARY_PLUS_CASTEXPRESSION : LHS
|
||||
public void testUnaryPlusCastExpression() throws Exception {
|
||||
|
@ -486,10 +407,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction foo2 = (IASTFunction)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 1 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 1, createTaskList( new Task( foo2 )));
|
||||
}
|
||||
// Kind UNARY_MINUS_CASTEXPRESSION : LHS
|
||||
public void testUnaryMinusCastExpression() throws Exception {
|
||||
|
@ -498,10 +416,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction foo2 = (IASTFunction)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 1 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 1, createTaskList( new Task( foo2 )));
|
||||
}
|
||||
// Kind UNARY_NOT_CASTEXPRESSION : LHS
|
||||
public void testUnaryNotCastExpression() throws Exception {
|
||||
|
@ -511,11 +426,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task( b ), new Task( foo2 )));
|
||||
}
|
||||
// Kind UNARY_TILDE_CASTEXPRESSION : LHS
|
||||
public void testTildeNotCastExpression() throws Exception {
|
||||
|
@ -525,11 +436,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable x = (IASTVariable)i.next();
|
||||
IASTVariable y = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), x );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2 )));
|
||||
}
|
||||
// Kind UNARY_SIZEOF_UNARYEXPRESSION : unsigned int
|
||||
public void testUnarySizeofUnaryExpression() throws Exception {
|
||||
|
@ -539,10 +446,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable x = (IASTVariable)i.next();
|
||||
IASTVariable y = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 1 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 1, createTaskList( new Task( foo2 )));
|
||||
}
|
||||
// Kind UNARY_SIZEOF_TYPEID : unsigned int
|
||||
public void testUnarySizeofTypeId() throws Exception {
|
||||
|
@ -552,29 +456,20 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable x = (IASTVariable)i.next();
|
||||
IASTVariable y = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), x );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2 )));
|
||||
}
|
||||
|
||||
// Kind NEW_NEWTYPEID
|
||||
// Kind NEW_TYPEID
|
||||
// There are so many ways to call new, only this case is handeled.
|
||||
// // Kind NEW_NEWTYPEID
|
||||
// // Kind NEW_TYPEID
|
||||
// // There are so many ways to call new, only this case is handeled.
|
||||
// public void testNewTypeId() throws Exception {
|
||||
// Iterator i = parse( "class A{}; void foo(); int foo( A a ); int x = foo( new A() );").getDeclarations();
|
||||
// Iterator i = parse( "class A{}; void foo(); int foo( A * a ); int x = foo( new A() );").getDeclarations();
|
||||
// IASTClassSpecifier cl = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
|
||||
// IASTFunction foo = (IASTFunction)i.next();
|
||||
// IASTFunction foo2 = (IASTFunction)i.next();
|
||||
// IASTVariable x = (IASTVariable)i.next();
|
||||
// assertFalse( i.hasNext() );
|
||||
// //assertEquals( callback.getReferences().size(), 3 );
|
||||
// Iterator references =callback.getReferences().iterator();
|
||||
// IASTClassReference clr1 = (IASTClassReference) references.next();
|
||||
// IASTClassReference clr2 = (IASTClassReference) references.next();
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
// assertFalse( references.hasNext() );
|
||||
// assertAllReferences( 3, createTaskList( new Task( cl, 2), new Task( foo2 )));
|
||||
// }
|
||||
|
||||
// Kind DELETE_CASTEXPRESSION
|
||||
|
@ -590,12 +485,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), pm );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences( 4, createTaskList( new Task( cl ), new Task( a), new Task( pm ), new Task(f2)));
|
||||
}
|
||||
|
||||
// Kind PM_ARROWSTAR
|
||||
|
@ -608,12 +498,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTFunction f1 = (IASTFunction) i.next();
|
||||
IASTFunction f2 = (IASTFunction) i.next();
|
||||
IASTVariable x = (IASTVariable) i.next();
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), cl );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), pm );
|
||||
assertEquals( ((IASTReference) references.next()).getReferencedElement(), f2 );
|
||||
|
||||
assertAllReferences( 4, createTaskList( new Task( cl ), new Task( a), new Task( pm), new Task( f2)));
|
||||
}
|
||||
|
||||
// Kind MULTIPLICATIVE_MULTIPLY : usual arithmetic conversions
|
||||
|
@ -626,11 +511,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind MULTIPLICATIVE_DIVIDE : usual arithmetic conversions
|
||||
public void testMultiplicativeDivide() throws Exception {
|
||||
|
@ -641,12 +522,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind MULTIPLICATIVE_MODULUS : usual arithmetic conversions
|
||||
public void testMultiplicativeModulus() throws Exception {
|
||||
|
@ -657,12 +533,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind ADDITIVE_PLUS : usual arithmetic conversions
|
||||
public void testAdditivePlus() throws Exception {
|
||||
|
@ -673,12 +544,13 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
|
||||
// assertEquals( callback.getReferences().size(), 3 );
|
||||
// Iterator references =callback.getReferences().iterator();
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
// assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
// assertFalse( references.hasNext() );
|
||||
}
|
||||
// Kind ADDITIVE_MINUS : usual arithmetic conversions
|
||||
public void testAdditiveMinus() throws Exception {
|
||||
|
@ -689,12 +561,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind SHIFT_LEFT : LHS
|
||||
public void testShiftLeft() throws Exception {
|
||||
|
@ -704,11 +571,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(a), new Task( foo1 ) ) );
|
||||
}
|
||||
|
||||
// Kind SHIFT_RIGHT : LHS
|
||||
|
@ -719,11 +582,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(a), new Task( foo1 ) ) );
|
||||
}
|
||||
|
||||
// Kind RELATIONAL_LESSTHAN : bool
|
||||
|
@ -734,11 +593,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind RELATIONAL_GREATERTHAN : bool
|
||||
public void testRelationalGreaterThan() throws Exception {
|
||||
|
@ -748,11 +603,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind RELATIONAL_LESSTHANEQUALTO : bool
|
||||
public void testRelationalLessThanOrEqual() throws Exception {
|
||||
|
@ -762,11 +613,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind RELATIONAL_GREATERTHANEQUALTO : bool
|
||||
public void testRelationalGreaterThanOrEqual() throws Exception {
|
||||
|
@ -776,11 +623,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind EQUALITY_EQUALS : bool
|
||||
public void testEqualityEquals() throws Exception {
|
||||
|
@ -790,11 +633,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind EQUALITY_NOTEQUALS : bool
|
||||
public void testEqualityNotEquals() throws Exception {
|
||||
|
@ -804,11 +643,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind ANDEXPRESSION : usual arithmetic conversions
|
||||
public void testAndExpression() throws Exception {
|
||||
|
@ -819,12 +654,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind EXCLUSIVEOREXPRESSION : usual arithmetic conversions
|
||||
public void testExclusiveOrExpression() throws Exception {
|
||||
|
@ -835,12 +665,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind INCLUSIVEOREXPRESSION : : usual arithmetic conversions
|
||||
public void testInclusiveOrExpression() throws Exception {
|
||||
|
@ -851,12 +676,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind LOGICALANDEXPRESSION : bool
|
||||
public void testLogicalAndExpression() throws Exception {
|
||||
|
@ -867,12 +687,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind LOGICALOREXPRESSION : bool
|
||||
public void testLogicalOrExpression() throws Exception {
|
||||
|
@ -883,12 +698,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable b = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 3 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind CONDITIONALEXPRESSION : conditional Expression Conversions
|
||||
public void testConditionalExpression() throws Exception {
|
||||
|
@ -900,13 +710,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable c = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 4 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), c );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences( 4, createTaskList( new Task( a ), new Task(b), new Task( c ), new Task( foo2 ) ) );
|
||||
}
|
||||
// Kind CONDITIONALEXPRESSION with references : conditional Expression Conversions
|
||||
public void testConditionalExpressionWithReferencesA() throws Exception {
|
||||
|
@ -920,17 +724,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable c = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 8 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), cla );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), cla );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), cla );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), clb );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), c );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), b );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo2 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(8, createTaskList( new Task( cla, 3 ), new Task( clb ), new Task( c ), new Task( b ), new Task( a ), new Task( foo2 )) );
|
||||
}
|
||||
|
||||
// Kind THROWEXPRESSION
|
||||
|
@ -943,11 +737,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
|
||||
// Kind ASSIGNMENTEXPRESSION_PLUS : LHS
|
||||
|
@ -958,11 +748,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_MINUS : LHS
|
||||
public void testAssignmentExpressionMinus() throws Exception {
|
||||
|
@ -972,11 +758,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_MULT : LHS
|
||||
public void testAssignmentExpressionMulti() throws Exception {
|
||||
|
@ -986,11 +768,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_DIV : LHS
|
||||
public void testAssignmentExpressionDiv() throws Exception {
|
||||
|
@ -1000,11 +778,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_MOD : LHS
|
||||
public void testAssignmentExpressionMod() throws Exception {
|
||||
|
@ -1014,11 +788,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_LSHIFT : LHS
|
||||
public void testAssignmentExpressionLShift() throws Exception {
|
||||
|
@ -1028,11 +798,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_RSHIFT : LHS
|
||||
public void testAssignmentExpressionRShift() throws Exception {
|
||||
|
@ -1042,11 +808,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_AND : LHS
|
||||
public void testAssignmentExpressionAnd() throws Exception {
|
||||
|
@ -1056,11 +818,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_OR : LHS
|
||||
public void testAssignmentExpressionOr() throws Exception {
|
||||
|
@ -1070,11 +828,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind ASSIGNMENTEXPRESSION_XOR : LHS
|
||||
public void testAssignmentExpressionXOr() throws Exception {
|
||||
|
@ -1084,11 +838,7 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
|
|||
IASTVariable a = (IASTVariable)i.next();
|
||||
IASTVariable x = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
Iterator references =callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), a );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), foo1 );
|
||||
assertFalse( references.hasNext() );
|
||||
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
|
||||
}
|
||||
// Kind EXPRESSIONLIST : list of LHS, RHS
|
||||
// Already tested with each test trying to find a reference to function.
|
||||
|
|
|
@ -499,11 +499,11 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
|
|||
IASTVariable variablep = (IASTVariable)declarations.next();
|
||||
assertEquals( callback.getReferences().size(), 5 );
|
||||
Iterator references = callback.getReferences().iterator();
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableA );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableP );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableB );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableC );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableD );
|
||||
assertEquals( ((IASTReference)references.next()).getReferencedElement(), variableA );
|
||||
}
|
||||
|
||||
public void testBug41520() throws Exception
|
||||
|
@ -796,5 +796,14 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
|
|||
}
|
||||
}
|
||||
|
||||
public void testBug39504() throws Exception
|
||||
{
|
||||
Iterator i = parse( "const int w = 2; int x[ 5 ]; int y = sizeof (x[w]);" ).getDeclarations();
|
||||
IASTVariable varW = (IASTVariable)i.next();
|
||||
IASTVariable varX = (IASTVariable)i.next();
|
||||
IASTVariable vary = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,15 +12,18 @@ package org.eclipse.cdt.core.parser.tests;
|
|||
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Stack;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
|
@ -48,6 +51,7 @@ import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
|
|||
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.IASTReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
|
||||
|
@ -170,6 +174,17 @@ public class CompleteParseBaseTest extends TestCase
|
|||
private Stack inclusions = new Stack();
|
||||
private Scope compilationUnit;
|
||||
|
||||
public FullParseCallback()
|
||||
{
|
||||
// System.out.println( "NEW");
|
||||
// System.out.println();
|
||||
}
|
||||
|
||||
public void finalize()
|
||||
{
|
||||
// System.out.println( );
|
||||
}
|
||||
|
||||
public IASTScope getCompilationUnit()
|
||||
{
|
||||
return compilationUnit;
|
||||
|
@ -504,7 +519,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptClassReference(IASTClassReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -512,7 +527,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptTypedefReference(IASTTypedefReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
|
||||
}
|
||||
|
||||
|
@ -521,7 +536,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptNamespaceReference(IASTNamespaceReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
|
||||
}
|
||||
|
||||
|
@ -530,7 +545,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptEnumerationReference(IASTEnumerationReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -538,8 +553,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptVariableReference(IASTVariableReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
|
||||
processReference( reference );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -547,8 +561,13 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptFunctionReference(IASTFunctionReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference(reference);
|
||||
}
|
||||
|
||||
protected void processReference(IASTReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
// System.out.println( "Callback received Reference to " + reference.getName() + " @ offset " + reference.getOffset() );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -556,7 +575,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptFieldReference(IASTFieldReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
|
||||
}
|
||||
|
||||
|
@ -565,7 +584,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptMethodReference(IASTMethodReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
|
||||
}
|
||||
|
||||
|
@ -617,7 +636,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptEnumeratorReference(IASTEnumeratorReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -625,7 +644,7 @@ public class CompleteParseBaseTest extends TestCase
|
|||
*/
|
||||
public void acceptParameterReference(IASTParameterReference reference)
|
||||
{
|
||||
references.add( reference );
|
||||
processReference( reference );
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -656,4 +675,140 @@ public class CompleteParseBaseTest extends TestCase
|
|||
if( ! parser.parse() ) throw new ParserException( "FAILURE");
|
||||
return callback.getCompilationUnit();
|
||||
}
|
||||
|
||||
protected void assertReferences(
|
||||
ISourceElementCallbackDelegate element,
|
||||
int expectedDistinctReferenceCount,
|
||||
boolean allowDuplicates )
|
||||
{
|
||||
Set matches = new HashSet();
|
||||
Iterator allReferences = callback.getReferences().iterator();
|
||||
while( allReferences.hasNext() )
|
||||
{
|
||||
IASTReference r = (IASTReference)allReferences.next();
|
||||
if( r.getReferencedElement() == element )
|
||||
if( ! matches.add( r ) && ! allowDuplicates )
|
||||
fail( "Duplicate reference found for ISourceElementCallbackDelegate: " + element + " @ offset " + r.getOffset() );
|
||||
}
|
||||
|
||||
assertEquals( expectedDistinctReferenceCount, matches.size() );
|
||||
}
|
||||
|
||||
protected static class Task
|
||||
{
|
||||
private final boolean unique;
|
||||
private final int count;
|
||||
private final ISourceElementCallbackDelegate element;
|
||||
|
||||
|
||||
public Task( ISourceElementCallbackDelegate element, int referenceCount, boolean distinct )
|
||||
{
|
||||
this.element = element;
|
||||
this.count = referenceCount;
|
||||
this.unique = distinct;
|
||||
}
|
||||
|
||||
public Task( ISourceElementCallbackDelegate element, int referenceCount )
|
||||
{
|
||||
this( element, referenceCount, true );
|
||||
}
|
||||
|
||||
public Task( ISourceElementCallbackDelegate element )
|
||||
{
|
||||
this( element, 1, false );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public int getCount()
|
||||
{
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public ISourceElementCallbackDelegate getElement()
|
||||
{
|
||||
return element;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public boolean isUnique()
|
||||
{
|
||||
return unique;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void assertReferenceTask( Task task )
|
||||
{
|
||||
assertReferences( task.getElement(), task.getCount(), task.isUnique() );
|
||||
}
|
||||
|
||||
protected void assertAllReferences( int count, List tasks )
|
||||
{
|
||||
assertEquals( callback.getReferences().size(), count );
|
||||
if( tasks == null ) return;
|
||||
Iterator i = tasks.iterator();
|
||||
while( i.hasNext() )
|
||||
{
|
||||
assertReferenceTask( (Task)i.next() );
|
||||
}
|
||||
}
|
||||
|
||||
protected List createTaskList( Task t1 )
|
||||
{
|
||||
List result = new ArrayList();
|
||||
result.add( t1 );
|
||||
return result;
|
||||
}
|
||||
|
||||
protected List createTaskList( Task t1, Task t2 )
|
||||
{
|
||||
List result = createTaskList(t1);
|
||||
result.add( t2 );
|
||||
return result;
|
||||
}
|
||||
|
||||
protected List createTaskList( Task t1, Task t2, Task t3 )
|
||||
{
|
||||
List result = createTaskList(t1, t2);
|
||||
result.add( t3 );
|
||||
return result;
|
||||
}
|
||||
|
||||
protected List createTaskList( Task t1, Task t2, Task t3, Task t4 )
|
||||
{
|
||||
List result = createTaskList(t1, t2, t3);
|
||||
result.add( t4 );
|
||||
return result;
|
||||
}
|
||||
|
||||
protected List createTaskList( Task t1, Task t2, Task t3, Task t4, Task t5 )
|
||||
{
|
||||
List result = createTaskList(t1, t2, t3, t4);
|
||||
result.add( t5 );
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* @param task
|
||||
* @param task2
|
||||
* @param task3
|
||||
* @param task4
|
||||
* @param task5
|
||||
* @param task6
|
||||
* @return
|
||||
*/
|
||||
protected List createTaskList(Task task, Task task2, Task task3, Task task4, Task task5, Task task6)
|
||||
{
|
||||
List result = createTaskList( task, task2, task3, task4, task5 );
|
||||
result.add( task6 );
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1431,7 +1431,7 @@ public class QuickParseASTTests extends BaseASTTest
|
|||
assertFalse( enumerators.hasNext() );
|
||||
assertEquals( enumerator.getName(), "isPointer");
|
||||
assertEquals( enumerator.getInitialValue().getExpressionKind(), IASTExpression.Kind.ID_EXPRESSION );
|
||||
assertEquals( enumerator.getInitialValue().getTypeIdString(), "PointerTraits<T>::result");
|
||||
assertEquals( enumerator.getInitialValue().getIdExpression(), "PointerTraits<T>::result");
|
||||
}
|
||||
|
||||
public void testBug36690() throws Exception {
|
||||
|
@ -1814,7 +1814,9 @@ public class QuickParseASTTests extends BaseASTTest
|
|||
public void testBug39556() throws Exception
|
||||
{
|
||||
parse("int *restrict ip_fn (void);", true, true, ParserLanguage.C).getDeclarations().next();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test code: struct Example { Example(); Example(int); ~Example();};
|
||||
* Purpose: tests a declaration in a class scope.
|
||||
|
@ -1842,4 +1844,5 @@ public class QuickParseASTTests extends BaseASTTest
|
|||
assertTrue(m2.getVisiblity() == ASTAccessVisibility.PUBLIC);
|
||||
assertTrue(m3.getVisiblity() == ASTAccessVisibility.PUBLIC);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,3 +1,7 @@
|
|||
2003-09-23 John Camelon
|
||||
Fixed Bug 43084 : need to restructure TypeId to allow dynamic_cast<> type expression references.
|
||||
Fixed Bug 39504 : sizeof-expressions are not handled properly
|
||||
|
||||
2003-09-23 Hoda Amer
|
||||
Solution to bug#43373: No reference to static member in definition
|
||||
Solution to bug#43371: constructor incorrectly marked private
|
||||
|
|
|
@ -121,7 +121,7 @@ public interface IASTExpression extends ISourceElementCallbackDelegate
|
|||
|
||||
}
|
||||
|
||||
public interface IASTNewExpressionDescriptor
|
||||
public interface IASTNewExpressionDescriptor extends ISourceElementCallbackDelegate
|
||||
{
|
||||
public Iterator getNewPlacementExpressions();
|
||||
public Iterator getNewTypeIdExpressions();
|
||||
|
@ -135,9 +135,11 @@ public interface IASTExpression extends ISourceElementCallbackDelegate
|
|||
public IASTExpression getRHSExpression();
|
||||
public IASTExpression getThirdExpression();
|
||||
public String getLiteralString();
|
||||
public String getTypeIdString();
|
||||
public String getIdExpression();
|
||||
public IASTTypeId getTypeId();
|
||||
public IASTNewExpressionDescriptor getNewExpressionDescriptor();
|
||||
|
||||
public int evaluateExpression() throws ExpressionEvaluationException;
|
||||
public void reconcileReferences() throws ASTNotImplementedException;
|
||||
|
||||
}
|
||||
|
|
|
@ -102,8 +102,8 @@ public interface IASTFactory
|
|||
IASTExpression lhs,
|
||||
IASTExpression rhs,
|
||||
IASTExpression thirdExpression,
|
||||
ITokenDuple typeId,
|
||||
String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException;
|
||||
IASTTypeId typeId,
|
||||
ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException;
|
||||
public IASTExpression.IASTNewExpressionDescriptor createNewDescriptor(List newPlacementExpressions,List newTypeIdExpressions,List newInitializerExpressions);
|
||||
public IASTInitializerClause createInitializerClause(
|
||||
IASTInitializerClause.Kind kind,
|
||||
|
@ -201,4 +201,8 @@ public interface IASTFactory
|
|||
*/
|
||||
public IASTCodeScope createNewCodeBlock(IASTScope scope);
|
||||
|
||||
public IASTTypeId createTypeId( IASTScope scope, IASTSimpleTypeSpecifier.Type kind, boolean isConst, boolean isVolatile, boolean isShort,
|
||||
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods ) throws ASTSemanticException;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.core.parser.ast;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
|
||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public interface IASTTypeId extends ISourceElementCallbackDelegate
|
||||
{
|
||||
public IASTSimpleTypeSpecifier.Type getKind();
|
||||
public String getTypeOrClassName();
|
||||
public Iterator getPointerOperators();
|
||||
public Iterator getArrayModifiers();
|
||||
|
||||
public boolean isConst();
|
||||
public boolean isVolatile();
|
||||
public boolean isLong();
|
||||
public boolean isShort();
|
||||
public boolean isSigned();
|
||||
public boolean isUnsigned();
|
||||
public boolean isTypename();
|
||||
|
||||
|
||||
public String getFullSignature() throws ASTNotImplementedException;
|
||||
public ISymbol getTypeSymbol() throws ASTNotImplementedException;
|
||||
}
|
|
@ -348,7 +348,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
{
|
||||
|
||||
Declarator d = declarator.getOwnedDeclarator();
|
||||
Iterator i = d.getPtrOps().iterator();
|
||||
Iterator i = d.getPointerOperators().iterator();
|
||||
if( !i.hasNext() )
|
||||
{
|
||||
boolean isWithinClass = scope instanceof IASTClassSpecifier;
|
||||
|
@ -375,7 +375,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
|
||||
List convertedParms = createParameterList( declarator.getParameters() );
|
||||
IASTAbstractDeclaration abs = astFactory.createAbstractDeclaration(
|
||||
constt, volatil, getTypeSpecifier(), declarator.getPtrOps(), declarator.getArrayModifiers(),
|
||||
constt, volatil, getTypeSpecifier(), declarator.getPointerOperators(), declarator.getArrayModifiers(),
|
||||
convertedParms, (ASTPointerOperator)i.next() );
|
||||
String name = ( d.getPointerOperatorNameDuple() != null ) ? d.getPointerOperatorNameDuple().toString() + d.getName() : d.getName();
|
||||
if( typedef )
|
||||
|
@ -407,7 +407,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
constt,
|
||||
volatil,
|
||||
getTypeSpecifier(),
|
||||
declarator.getPtrOps(), declarator.getArrayModifiers(), null, null), startingOffset, declarator.getNameStartOffset());
|
||||
declarator.getPointerOperators(), declarator.getArrayModifiers(), null, null), startingOffset, declarator.getNameStartOffset());
|
||||
}
|
||||
/**
|
||||
* @param declarator
|
||||
|
@ -425,7 +425,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
constt,
|
||||
volatil,
|
||||
getTypeSpecifier(),
|
||||
declarator.getPtrOps(), declarator.getArrayModifiers(), null, null),
|
||||
declarator.getPointerOperators(), declarator.getArrayModifiers(), null, null),
|
||||
declarator.getExceptionSpecification(),
|
||||
inline,
|
||||
friend,
|
||||
|
@ -455,7 +455,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
constt,
|
||||
volatil,
|
||||
getTypeSpecifier(),
|
||||
declarator.getPtrOps(), declarator.getArrayModifiers(), null, null),
|
||||
declarator.getPointerOperators(), declarator.getArrayModifiers(), null, null),
|
||||
declarator.getExceptionSpecification(),
|
||||
inline,
|
||||
friend,
|
||||
|
@ -486,7 +486,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
constt,
|
||||
volatil,
|
||||
getTypeSpecifier(),
|
||||
declarator.getPtrOps(), declarator.getArrayModifiers(), null, null),
|
||||
declarator.getPointerOperators(), declarator.getArrayModifiers(), null, null),
|
||||
mutable,
|
||||
extern,
|
||||
register,
|
||||
|
@ -511,7 +511,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
wrapper.isConst(),
|
||||
wrapper.isVolatile(),
|
||||
wrapper.getTypeSpecifier(),
|
||||
declarator.getPtrOps(),
|
||||
declarator.getPointerOperators(),
|
||||
declarator.getArrayModifiers(),
|
||||
null, null, declarator.getName() == null
|
||||
? ""
|
||||
|
@ -536,7 +536,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
constt,
|
||||
volatil,
|
||||
getTypeSpecifier(),
|
||||
declarator.getPtrOps(), declarator.getArrayModifiers(), null, null),
|
||||
declarator.getPointerOperators(), declarator.getArrayModifiers(), null, null),
|
||||
mutable,
|
||||
extern,
|
||||
register,
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
|||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public class Declarator implements IParameterCollection, IDeclaratorOwner
|
||||
public class Declarator implements IParameterCollection, IDeclaratorOwner, IDeclarator
|
||||
{
|
||||
private ITokenDuple pointerOperatorNameDuple;
|
||||
private ITokenDuple namedDuple;
|
||||
|
@ -116,12 +116,12 @@ public class Declarator implements IParameterCollection, IDeclaratorOwner
|
|||
/**
|
||||
* @return
|
||||
*/
|
||||
public List getPtrOps()
|
||||
public List getPointerOperators()
|
||||
{
|
||||
return Collections.unmodifiableList( ptrOps );
|
||||
}
|
||||
|
||||
public void addPtrOp( ASTPointerOperator ptrOp )
|
||||
public void addPointerOperator( ASTPointerOperator ptrOp )
|
||||
{
|
||||
ptrOps.add( ptrOp );
|
||||
}
|
||||
|
@ -362,7 +362,7 @@ public class Declarator implements IParameterCollection, IDeclaratorOwner
|
|||
public DeclarationWrapper getDeclarationWrapper()
|
||||
{
|
||||
Declarator d = this;
|
||||
while( d.getOwner() instanceof Declarator )
|
||||
while( d.getOwner() instanceof IDeclarator )
|
||||
d = (Declarator)d.getOwner();
|
||||
return (DeclarationWrapper)d.getOwner();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public interface IDeclarator
|
||||
{
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public abstract List getPointerOperators();
|
||||
public abstract void addPointerOperator(ASTPointerOperator ptrOp);
|
||||
/**
|
||||
* @param arrayMod
|
||||
*/
|
||||
public abstract void addArrayModifier(IASTArrayModifier arrayMod);
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public abstract List getArrayModifiers();
|
||||
|
||||
/**
|
||||
* @param nameDuple
|
||||
*/
|
||||
public void setPointerOperatorName(ITokenDuple nameDuple);
|
||||
|
||||
public ITokenDuple getPointerOperatorNameDuple();
|
||||
|
||||
}
|
|
@ -52,6 +52,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
|||
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.IASTTypeId;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
|
||||
|
@ -521,7 +522,7 @@ public class Parser implements IParser
|
|||
: IASTTemplateParameter.ParamKind.TYPENAME;
|
||||
|
||||
IToken id = null;
|
||||
ITokenDuple typeId = null;
|
||||
IASTTypeId typeId = null;
|
||||
try
|
||||
{
|
||||
if (LT(1) == IToken.tIDENTIFIER) // optional identifier
|
||||
|
@ -531,7 +532,7 @@ public class Parser implements IParser
|
|||
if (LT(1) == IToken.tASSIGN) // optional = type-id
|
||||
{
|
||||
consume(IToken.tASSIGN);
|
||||
typeId = typeId(); // type-id
|
||||
typeId = typeId(scope, false); // type-id
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -544,7 +545,7 @@ public class Parser implements IParser
|
|||
astFactory.createTemplateParameter(
|
||||
kind,
|
||||
( id == null )? "" : id.getImage(),
|
||||
(typeId == null) ? null : typeId.toString(),
|
||||
(typeId == null) ? null : typeId.getTypeOrClassName(),
|
||||
null,
|
||||
null));
|
||||
|
||||
|
@ -558,7 +559,7 @@ public class Parser implements IParser
|
|||
consume(IToken.tGT);
|
||||
consume(IToken.t_class);
|
||||
IToken optionalId = null;
|
||||
ITokenDuple optionalTypeId = null;
|
||||
IASTTypeId optionalTypeId = null;
|
||||
if (LT(1) == IToken.tIDENTIFIER) // optional identifier
|
||||
{
|
||||
optionalId = identifier();
|
||||
|
@ -566,7 +567,7 @@ public class Parser implements IParser
|
|||
if (LT(1) == IToken.tASSIGN) // optional = type-id
|
||||
{
|
||||
consume(IToken.tASSIGN);
|
||||
optionalTypeId = typeId();
|
||||
optionalTypeId = typeId(scope, false);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -601,7 +602,7 @@ public class Parser implements IParser
|
|||
wrapper.isConst(),
|
||||
wrapper.isVolatile(),
|
||||
wrapper.getTypeSpecifier(),
|
||||
declarator.getPtrOps(),
|
||||
declarator.getPointerOperators(),
|
||||
declarator.getArrayModifiers(),
|
||||
null, null, declarator.getName() == null
|
||||
? ""
|
||||
|
@ -1732,7 +1733,7 @@ public class Parser implements IParser
|
|||
* @throws Backtrack
|
||||
*/
|
||||
protected IToken cvQualifier(
|
||||
Declarator declarator)
|
||||
IDeclarator declarator)
|
||||
throws Backtrack
|
||||
{
|
||||
IToken result = null;
|
||||
|
@ -1740,17 +1741,17 @@ public class Parser implements IParser
|
|||
{
|
||||
case IToken.t_const :
|
||||
result = consume( IToken.t_const );
|
||||
if( declarator != null ) declarator.addPtrOp(ASTPointerOperator.CONST_POINTER);
|
||||
declarator.addPointerOperator(ASTPointerOperator.CONST_POINTER);
|
||||
break;
|
||||
case IToken.t_volatile :
|
||||
result = consume( IToken.t_volatile );
|
||||
if( declarator != null ) declarator.addPtrOp(ASTPointerOperator.VOLATILE_POINTER);
|
||||
declarator.addPointerOperator(ASTPointerOperator.VOLATILE_POINTER);
|
||||
break;
|
||||
case IToken.t_restrict :
|
||||
if( language == ParserLanguage.C )
|
||||
{
|
||||
result = consume( IToken.t_restrict );
|
||||
if( declarator != null ) declarator.addPtrOp(ASTPointerOperator.RESTRICT_POINTER);
|
||||
declarator.addPointerOperator(ASTPointerOperator.RESTRICT_POINTER);
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
@ -1882,7 +1883,7 @@ public class Parser implements IParser
|
|||
{
|
||||
d = new Declarator(owner);
|
||||
|
||||
consumePointerOperators(d, false);
|
||||
consumePointerOperators(d);
|
||||
|
||||
if (LT(1) == IToken.tLPAREN)
|
||||
{
|
||||
|
@ -2014,7 +2015,7 @@ public class Parser implements IParser
|
|||
consume(); // throw
|
||||
consume(IToken.tLPAREN); // (
|
||||
boolean done = false;
|
||||
ITokenDuple duple = null;
|
||||
IASTTypeId duple = null;
|
||||
while (!done)
|
||||
{
|
||||
switch (LT(1))
|
||||
|
@ -2030,7 +2031,7 @@ public class Parser implements IParser
|
|||
String image = LA(1).getImage();
|
||||
try
|
||||
{
|
||||
duple = typeId();
|
||||
duple = typeId(scope, false);
|
||||
exceptionSpecIds.add(duple);
|
||||
}
|
||||
catch (Backtrack e)
|
||||
|
@ -2120,21 +2121,7 @@ public class Parser implements IParser
|
|||
}
|
||||
break;
|
||||
case IToken.tLBRACKET :
|
||||
while (LT(1) == IToken.tLBRACKET)
|
||||
{
|
||||
consume(); // eat the '['
|
||||
|
||||
IASTExpression exp = null;
|
||||
if (LT(1) != IToken.tRBRACKET)
|
||||
{
|
||||
exp = constantExpression(sdw.getScope());
|
||||
}
|
||||
consume(IToken.tRBRACKET);
|
||||
IASTArrayModifier arrayMod =
|
||||
astFactory.createArrayModifier(exp);
|
||||
d.addArrayModifier(arrayMod);
|
||||
|
||||
}
|
||||
consumeArrayModifiers(d, sdw.getScope());
|
||||
continue;
|
||||
case IToken.tCOLON :
|
||||
consume(IToken.tCOLON);
|
||||
|
@ -2151,10 +2138,30 @@ public class Parser implements IParser
|
|||
|
||||
}
|
||||
while (true);
|
||||
if (d.getOwner() instanceof Declarator)
|
||||
if (d.getOwner() instanceof IDeclarator)
|
||||
((Declarator)d.getOwner()).setOwnedDeclarator(d);
|
||||
return d;
|
||||
}
|
||||
|
||||
protected void consumeArrayModifiers( IDeclarator d, IASTScope scope )
|
||||
throws EndOfFile, Backtrack
|
||||
{
|
||||
while (LT(1) == IToken.tLBRACKET)
|
||||
{
|
||||
consume( IToken.tLBRACKET ); // eat the '['
|
||||
|
||||
IASTExpression exp = null;
|
||||
if (LT(1) != IToken.tRBRACKET)
|
||||
{
|
||||
exp = constantExpression(scope);
|
||||
}
|
||||
consume(IToken.tRBRACKET);
|
||||
IASTArrayModifier arrayMod =
|
||||
astFactory.createArrayModifier(exp);
|
||||
d.addArrayModifier(arrayMod);
|
||||
}
|
||||
}
|
||||
|
||||
protected void operatorId(
|
||||
Declarator d,
|
||||
IToken originalToken)
|
||||
|
@ -2195,21 +2202,8 @@ public class Parser implements IParser
|
|||
else
|
||||
{
|
||||
// must be a conversion function
|
||||
toSend = typeId().getLastToken();
|
||||
|
||||
try
|
||||
{
|
||||
// this ptrOp doesn't belong to the declarator,
|
||||
// it's just a part of the name
|
||||
IToken temp = consumePointerOperators(d, true);
|
||||
if( temp != null )
|
||||
toSend = temp;
|
||||
}
|
||||
catch (Backtrack b)
|
||||
{
|
||||
}
|
||||
// In case we'll need better error recovery
|
||||
// while( LT(1) != Token.tLPAREN ) { toSend = consume(); }
|
||||
typeId(d.getDeclarationWrapper().getScope(), false );
|
||||
toSend = lastToken;
|
||||
}
|
||||
ITokenDuple duple =
|
||||
new TokenDuple(
|
||||
|
@ -2229,7 +2223,7 @@ public class Parser implements IParser
|
|||
* @param owner Declarator that this pointer operator corresponds to.
|
||||
* @throws Backtrack request a backtrack
|
||||
*/
|
||||
protected IToken consumePointerOperators(Declarator d, boolean consumeOnlyOne) throws Backtrack
|
||||
protected IToken consumePointerOperators(IDeclarator d) throws Backtrack
|
||||
{
|
||||
IToken result = null;
|
||||
for( ; ; )
|
||||
|
@ -2237,9 +2231,9 @@ public class Parser implements IParser
|
|||
if (LT(1) == IToken.tAMPER)
|
||||
{
|
||||
result = consume( IToken.tAMPER );
|
||||
if( d != null ) d.addPtrOp(ASTPointerOperator.REFERENCE);
|
||||
/*if( consumeOnlyOne ) */return result;
|
||||
/* continue; */
|
||||
d.addPointerOperator(ASTPointerOperator.REFERENCE);
|
||||
return result;
|
||||
|
||||
}
|
||||
IToken mark = mark();
|
||||
|
||||
|
@ -2260,7 +2254,7 @@ public class Parser implements IParser
|
|||
{
|
||||
result = consume(Token.tSTAR); // tokenType = "*"
|
||||
|
||||
if( d != null ) d.setPointerOperatorName(nameDuple);
|
||||
d.setPointerOperatorName(nameDuple);
|
||||
|
||||
IToken successful = null;
|
||||
for (;;)
|
||||
|
@ -2273,9 +2267,8 @@ public class Parser implements IParser
|
|||
|
||||
if( successful == null )
|
||||
{
|
||||
if( d != null ) d.addPtrOp( ASTPointerOperator.POINTER );
|
||||
d.addPointerOperator( ASTPointerOperator.POINTER );
|
||||
}
|
||||
if( consumeOnlyOne ) return result;
|
||||
continue;
|
||||
}
|
||||
backup(mark);
|
||||
|
@ -2871,7 +2864,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -2972,7 +2965,7 @@ public class Parser implements IParser
|
|||
assignmentExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3005,7 +2998,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3037,7 +3030,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
thirdExpression,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3071,7 +3064,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3103,7 +3096,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3136,7 +3129,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3169,7 +3162,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3201,7 +3194,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3241,7 +3234,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3317,7 +3310,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3360,7 +3353,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3402,7 +3395,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3455,7 +3448,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3496,7 +3489,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3521,13 +3514,11 @@ public class Parser implements IParser
|
|||
{
|
||||
IToken mark = mark();
|
||||
consume();
|
||||
ITokenDuple duple = null;
|
||||
IASTTypeId typeId = null;
|
||||
// If this isn't a type name, then we shouldn't be here
|
||||
try
|
||||
{
|
||||
if (LT(1) == IToken.t_const)
|
||||
consume();
|
||||
duple = typeId();
|
||||
typeId = typeId(scope, false);
|
||||
consume(IToken.tRPAREN);
|
||||
IASTExpression castExpression = castExpression(scope);
|
||||
try
|
||||
|
@ -3538,8 +3529,8 @@ public class Parser implements IParser
|
|||
castExpression,
|
||||
null,
|
||||
null,
|
||||
duple,
|
||||
"", null);
|
||||
typeId,
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3558,56 +3549,119 @@ public class Parser implements IParser
|
|||
/**
|
||||
* @throws Backtrack
|
||||
*/
|
||||
protected ITokenDuple typeId( ) throws Backtrack
|
||||
protected IASTTypeId typeId(IASTScope scope, boolean forNewExpression ) throws Backtrack
|
||||
{
|
||||
IToken begin = LA(1);
|
||||
IToken end = null;
|
||||
try
|
||||
{
|
||||
ITokenDuple d = name();
|
||||
IToken checkForPtrs = consumePointerOperators(null, false);
|
||||
if( checkForPtrs == null ) return d;
|
||||
return new TokenDuple( d.getFirstToken(), checkForPtrs );
|
||||
}
|
||||
catch (Backtrack b)
|
||||
{
|
||||
IToken mark = mark();
|
||||
ITokenDuple name = null;
|
||||
boolean isConst = false, isVolatile = false;
|
||||
boolean isSigned = false, isUnsigned = false;
|
||||
boolean isShort = false, isLong = false;
|
||||
boolean isTypename = false;
|
||||
|
||||
IASTSimpleTypeSpecifier.Type kind = null;
|
||||
do
|
||||
{
|
||||
try
|
||||
{
|
||||
name = name();
|
||||
kind = IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME;
|
||||
break;
|
||||
}
|
||||
catch (Backtrack b)
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
simpleMods : for (;;)
|
||||
{
|
||||
switch (LT(1))
|
||||
{
|
||||
case IToken.t_signed :
|
||||
consume();
|
||||
isSigned = true;
|
||||
break;
|
||||
|
||||
case IToken.t_unsigned :
|
||||
consume();
|
||||
isUnsigned = true;
|
||||
break;
|
||||
|
||||
case IToken.t_short :
|
||||
consume();
|
||||
isShort = true;
|
||||
break;
|
||||
|
||||
case IToken.t_long :
|
||||
consume();
|
||||
isLong = true;
|
||||
break;
|
||||
|
||||
case IToken.t_const :
|
||||
consume();
|
||||
isConst = true;
|
||||
break;
|
||||
|
||||
case IToken.t_volatile :
|
||||
end = consume();
|
||||
consume();
|
||||
isVolatile = true;
|
||||
break;
|
||||
case IToken.tAMPER :
|
||||
case IToken.tSTAR :
|
||||
|
||||
case IToken.tIDENTIFIER :
|
||||
if (end == null)
|
||||
throw backtrack;
|
||||
end = consume();
|
||||
break;
|
||||
name = name();
|
||||
kind = IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME;
|
||||
break simpleMods;
|
||||
|
||||
case IToken.t_int :
|
||||
kind = IASTSimpleTypeSpecifier.Type.INT;
|
||||
consume();
|
||||
break simpleMods;
|
||||
|
||||
case IToken.t_char :
|
||||
kind = IASTSimpleTypeSpecifier.Type.CHAR;
|
||||
consume();
|
||||
break simpleMods;
|
||||
|
||||
case IToken.t_bool :
|
||||
kind = IASTSimpleTypeSpecifier.Type.BOOL;
|
||||
consume();
|
||||
break simpleMods;
|
||||
|
||||
case IToken.t_double :
|
||||
kind = IASTSimpleTypeSpecifier.Type.DOUBLE;
|
||||
consume();
|
||||
break simpleMods;
|
||||
|
||||
case IToken.t_float :
|
||||
kind = IASTSimpleTypeSpecifier.Type.FLOAT;
|
||||
consume();
|
||||
break simpleMods;
|
||||
|
||||
case IToken.t_wchar_t :
|
||||
kind = IASTSimpleTypeSpecifier.Type.WCHAR_T;
|
||||
consume();
|
||||
break simpleMods;
|
||||
|
||||
|
||||
case IToken.t_void :
|
||||
end = consume();
|
||||
kind = IASTSimpleTypeSpecifier.Type.VOID;
|
||||
consume();
|
||||
break simpleMods;
|
||||
|
||||
|
||||
default :
|
||||
break simpleMods;
|
||||
}
|
||||
}
|
||||
if (end != null)
|
||||
{
|
||||
IToken end2 = consumePointerOperators(null, false);
|
||||
return new TokenDuple(begin, end2 == null ? end : end2);
|
||||
}
|
||||
else if (
|
||||
|
||||
if( kind != null ) break;
|
||||
|
||||
if( isShort || isLong || isUnsigned || isSigned )
|
||||
{
|
||||
kind = IASTSimpleTypeSpecifier.Type.INT;
|
||||
break;
|
||||
}
|
||||
|
||||
if (
|
||||
LT(1) == IToken.t_typename
|
||||
|| LT(1) == IToken.t_struct
|
||||
|| LT(1) == IToken.t_class
|
||||
|
@ -3615,12 +3669,42 @@ public class Parser implements IParser
|
|||
|| LT(1) == IToken.t_union)
|
||||
{
|
||||
consume();
|
||||
ITokenDuple d = name();
|
||||
IToken end2 = consumePointerOperators(null, false);
|
||||
return new TokenDuple(begin, ( (end2 == null) ? d.getLastToken() : end2 ) );
|
||||
try
|
||||
{
|
||||
name = name();
|
||||
kind = IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME;
|
||||
} catch( Backtrack b )
|
||||
{
|
||||
backup( mark );
|
||||
throw backtrack;
|
||||
}
|
||||
}
|
||||
else
|
||||
throw backtrack;
|
||||
|
||||
} while( false );
|
||||
|
||||
if( kind == null )
|
||||
throw backtrack;
|
||||
|
||||
TypeId id = new TypeId();
|
||||
IToken last = mark();
|
||||
consumePointerOperators( id );
|
||||
if( lastToken == null ) lastToken = last;
|
||||
|
||||
if( ! forNewExpression )
|
||||
{
|
||||
last = mark();
|
||||
consumeArrayModifiers( id, scope );
|
||||
if( lastToken == null ) lastToken = last;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return astFactory.createTypeId( scope, kind, isConst, isVolatile, isShort, isLong, isSigned, isUnsigned, isTypename, name, id.getPointerOperators(), id.getArrayModifiers());
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
backup( mark );
|
||||
throw backtrack;
|
||||
}
|
||||
}
|
||||
/**
|
||||
|
@ -3656,7 +3740,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3692,7 +3776,7 @@ public class Parser implements IParser
|
|||
boolean placementParseFailure = true;
|
||||
IToken beforeSecondParen = null;
|
||||
IToken backtrackMarker = null;
|
||||
ITokenDuple typeId = null;
|
||||
IASTTypeId typeId = null;
|
||||
ArrayList newPlacementExpressions = new ArrayList();
|
||||
ArrayList newTypeIdExpressions = new ArrayList();
|
||||
ArrayList newInitializerExpressions = new ArrayList();
|
||||
|
@ -3724,7 +3808,7 @@ public class Parser implements IParser
|
|||
// CASE: new (typeid-not-looking-as-placement) ...
|
||||
// the first expression in () is not a placement
|
||||
// - then it has to be typeId
|
||||
typeId = typeId();
|
||||
typeId = typeId(scope, true );
|
||||
consume(IToken.tRPAREN);
|
||||
}
|
||||
else
|
||||
|
@ -3748,7 +3832,7 @@ public class Parser implements IParser
|
|||
try
|
||||
{
|
||||
backtrackMarker = mark();
|
||||
typeId = typeId();
|
||||
typeId = typeId(scope, true);
|
||||
}
|
||||
catch (Backtrack e)
|
||||
{
|
||||
|
@ -3767,7 +3851,7 @@ public class Parser implements IParser
|
|||
// The problem is, the first expression might as well be a typeid
|
||||
try
|
||||
{
|
||||
typeId = typeId();
|
||||
typeId = typeId(scope, true);
|
||||
consume(IToken.tRPAREN);
|
||||
if (LT(1) == IToken.tLPAREN
|
||||
|| LT(1) == IToken.tLBRACKET)
|
||||
|
@ -3788,8 +3872,8 @@ public class Parser implements IParser
|
|||
{
|
||||
return astFactory.createExpression(
|
||||
scope, IASTExpression.Kind.NEW_TYPEID,
|
||||
null, null, null, typeId, "",
|
||||
astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions));
|
||||
null, null, null, typeId, null,
|
||||
"", astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions));
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3812,7 +3896,7 @@ public class Parser implements IParser
|
|||
// CASE: new typeid ...
|
||||
// new parameters do not start with '('
|
||||
// i.e it has to be a plain typeId
|
||||
typeId = typeId();
|
||||
typeId = typeId(scope, true);
|
||||
}
|
||||
while (LT(1) == IToken.tLBRACKET)
|
||||
{
|
||||
|
@ -3833,8 +3917,8 @@ public class Parser implements IParser
|
|||
{
|
||||
return astFactory.createExpression(
|
||||
scope, IASTExpression.Kind.NEW_TYPEID,
|
||||
null, null, null, typeId, "",
|
||||
astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions));
|
||||
null, null, null, typeId, null,
|
||||
"", astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions));
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3856,7 +3940,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3908,14 +3992,14 @@ public class Parser implements IParser
|
|||
case IToken.t_sizeof :
|
||||
consume(IToken.t_sizeof);
|
||||
IToken mark = LA(1);
|
||||
ITokenDuple d = null;
|
||||
IASTTypeId d = null;
|
||||
IASTExpression unaryExpression = null;
|
||||
if (LT(1) == IToken.tLPAREN)
|
||||
{
|
||||
try
|
||||
{
|
||||
consume(IToken.tLPAREN);
|
||||
d = typeId();
|
||||
d = typeId(scope, false);
|
||||
consume(IToken.tRPAREN);
|
||||
}
|
||||
catch (Backtrack bt)
|
||||
|
@ -3938,7 +4022,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
d,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -3955,7 +4039,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e1)
|
||||
{
|
||||
|
@ -4072,10 +4156,10 @@ public class Parser implements IParser
|
|||
consume(IToken.tLPAREN);
|
||||
boolean isTypeId = true;
|
||||
IASTExpression lhs = null;
|
||||
ITokenDuple typeId = null;
|
||||
IASTTypeId typeId = null;
|
||||
try
|
||||
{
|
||||
typeId = typeId();
|
||||
typeId = typeId(scope, false);
|
||||
}
|
||||
catch (Backtrack b)
|
||||
{
|
||||
|
@ -4095,7 +4179,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
typeId,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e6)
|
||||
{
|
||||
|
@ -4126,7 +4210,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e2)
|
||||
{
|
||||
|
@ -4149,7 +4233,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e3)
|
||||
{
|
||||
|
@ -4169,7 +4253,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e1)
|
||||
{
|
||||
|
@ -4189,7 +4273,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e4)
|
||||
{
|
||||
|
@ -4218,7 +4302,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e5)
|
||||
{
|
||||
|
@ -4247,7 +4331,7 @@ public class Parser implements IParser
|
|||
secondExpression,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -4266,7 +4350,7 @@ public class Parser implements IParser
|
|||
{
|
||||
consume();
|
||||
consume(IToken.tLT);
|
||||
ITokenDuple duple = typeId();
|
||||
IASTTypeId duple = typeId(scope, false);
|
||||
consume(IToken.tGT);
|
||||
consume(IToken.tLPAREN);
|
||||
IASTExpression lhs = expression(scope);
|
||||
|
@ -4280,7 +4364,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
duple,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -4305,7 +4389,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
@ -4335,7 +4419,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
t.getImage(), null);
|
||||
null, t.getImage(), null);
|
||||
}
|
||||
catch (ASTSemanticException e1)
|
||||
{
|
||||
|
@ -4353,7 +4437,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
t.getImage(), null);
|
||||
null, t.getImage(), null);
|
||||
}
|
||||
catch (ASTSemanticException e2)
|
||||
{
|
||||
|
@ -4365,7 +4449,7 @@ public class Parser implements IParser
|
|||
t = consume();
|
||||
try
|
||||
{
|
||||
return astFactory.createExpression( scope, IASTExpression.Kind.PRIMARY_STRING_LITERAL, null, null, null, null, t.getImage(), null );
|
||||
return astFactory.createExpression( scope, IASTExpression.Kind.PRIMARY_STRING_LITERAL, null, null, null, null, null, t.getImage(), null );
|
||||
}
|
||||
catch (ASTSemanticException e5)
|
||||
{
|
||||
|
@ -4385,7 +4469,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
t.getImage(), null);
|
||||
null, t.getImage(), null);
|
||||
}
|
||||
catch (ASTSemanticException e3)
|
||||
{
|
||||
|
@ -4406,7 +4490,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
t.getImage(), null);
|
||||
null, t.getImage(), null);
|
||||
}
|
||||
catch (ASTSemanticException e4)
|
||||
{
|
||||
|
@ -4425,7 +4509,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e7)
|
||||
{
|
||||
|
@ -4445,7 +4529,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e6)
|
||||
{
|
||||
|
@ -4464,8 +4548,8 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
duple,
|
||||
"", null);
|
||||
null,
|
||||
duple, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e8)
|
||||
{
|
||||
|
@ -4482,7 +4566,7 @@ public class Parser implements IParser
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
"", null);
|
||||
null, "", null);
|
||||
}
|
||||
catch (ASTSemanticException e)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public class TypeId implements IDeclarator
|
||||
{
|
||||
private ITokenDuple name;
|
||||
private List arrayModifiers = new ArrayList();
|
||||
private List pointerOperators = new ArrayList();
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public TypeId()
|
||||
{
|
||||
super();
|
||||
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IDeclarator#getPointerOperators()
|
||||
*/
|
||||
public List getPointerOperators()
|
||||
{
|
||||
return pointerOperators;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IDeclarator#addPointerOperator(org.eclipse.cdt.core.parser.ast.ASTPointerOperator)
|
||||
*/
|
||||
public void addPointerOperator(ASTPointerOperator ptrOp)
|
||||
{
|
||||
pointerOperators.add( ptrOp );
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IDeclarator#addArrayModifier(org.eclipse.cdt.core.parser.ast.IASTArrayModifier)
|
||||
*/
|
||||
public void addArrayModifier(IASTArrayModifier arrayMod)
|
||||
{
|
||||
arrayModifiers.add( arrayMod );
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IDeclarator#getArrayModifiers()
|
||||
*/
|
||||
public List getArrayModifiers()
|
||||
{
|
||||
return arrayModifiers;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IDeclarator#setPointerOperatorName(org.eclipse.cdt.core.parser.ITokenDuple)
|
||||
*/
|
||||
public void setPointerOperatorName(ITokenDuple nameDuple)
|
||||
{
|
||||
name = nameDuple;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.IDeclarator#getPointerOperatorNameDuple()
|
||||
*/
|
||||
public ITokenDuple getPointerOperatorNameDuple()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
|
@ -11,12 +11,16 @@
|
|||
package org.eclipse.cdt.internal.core.parser.ast.complete;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||
import org.eclipse.cdt.core.parser.ast.ExpressionEvaluationException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
@ -28,8 +32,9 @@ public class ASTExpression implements IASTExpression
|
|||
private final IASTExpression lhs;
|
||||
private final IASTExpression rhs;
|
||||
private final IASTExpression thirdExpression;
|
||||
private final String literal;
|
||||
private final ITokenDuple typeId;
|
||||
private final String literal, idExpression;
|
||||
private ITokenDuple idExpressionDuple;
|
||||
private final IASTTypeId typeId;
|
||||
private final IASTNewExpressionDescriptor newDescriptor;
|
||||
private final List references;
|
||||
private List resultType;
|
||||
|
@ -37,7 +42,7 @@ public class ASTExpression implements IASTExpression
|
|||
*
|
||||
*/
|
||||
public ASTExpression( Kind kind, IASTExpression lhs, IASTExpression rhs,
|
||||
IASTExpression thirdExpression, ITokenDuple typeId, String literal, IASTNewExpressionDescriptor newDescriptor, List references )
|
||||
IASTExpression thirdExpression, IASTTypeId typeId, ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor, List references )
|
||||
{
|
||||
this.kind = kind;
|
||||
this.lhs = lhs;
|
||||
|
@ -48,6 +53,8 @@ public class ASTExpression implements IASTExpression
|
|||
this.newDescriptor = newDescriptor;
|
||||
this.references = references;
|
||||
resultType = new ArrayList();
|
||||
this.idExpressionDuple = idExpression;
|
||||
this.idExpression = idExpressionDuple == null ? "" : idExpressionDuple.toString();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getExpressionKind()
|
||||
|
@ -87,16 +94,17 @@ public class ASTExpression implements IASTExpression
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getTypeId()
|
||||
*/
|
||||
public String getTypeIdString()
|
||||
public IASTTypeId getTypeId()
|
||||
{
|
||||
return typeId == null ? "" : typeId.toString();
|
||||
return typeId;
|
||||
}
|
||||
/*
|
||||
* returns the type id token
|
||||
*/
|
||||
public ITokenDuple getTypeId()
|
||||
public ITokenDuple getTypeIdTokenDuple()
|
||||
{
|
||||
return typeId;
|
||||
if( typeId == null ) return null;
|
||||
return ((ASTTypeId)typeId).getTokenDuple();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getNewExpressionDescriptor()
|
||||
|
@ -122,12 +130,33 @@ public class ASTExpression implements IASTExpression
|
|||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
try
|
||||
{
|
||||
reconcileReferences();
|
||||
}
|
||||
catch (ASTNotImplementedException e)
|
||||
{
|
||||
// will not get thrown
|
||||
}
|
||||
if( ! references.isEmpty() )
|
||||
{
|
||||
ASTReferenceStore store = new ASTReferenceStore( references );
|
||||
store.processReferences(requestor);
|
||||
}
|
||||
new ASTReferenceStore( references ).processReferences(requestor);
|
||||
|
||||
if( typeId != null )
|
||||
typeId.acceptElement(requestor);
|
||||
|
||||
if( lhs != null )
|
||||
lhs.acceptElement(requestor);
|
||||
|
||||
if( rhs!= null )
|
||||
rhs.acceptElement(requestor);
|
||||
|
||||
if( thirdExpression != null )
|
||||
thirdExpression.acceptElement(requestor);
|
||||
|
||||
if( newDescriptor != null )
|
||||
newDescriptor.acceptElement(requestor);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
|
@ -154,5 +183,48 @@ public class ASTExpression implements IASTExpression
|
|||
public void setResultType(List i) {
|
||||
resultType = i;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getIdExpression()
|
||||
*/
|
||||
public String getIdExpression()
|
||||
{
|
||||
return idExpression;
|
||||
}
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public ITokenDuple getIdExpressionTokenDuple()
|
||||
{
|
||||
return idExpressionDuple;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#reconcileReferences()
|
||||
*/
|
||||
public void reconcileReferences() throws ASTNotImplementedException
|
||||
{
|
||||
if( lhs != null )
|
||||
lhs.reconcileReferences();
|
||||
if( rhs != null )
|
||||
rhs.reconcileReferences();
|
||||
if( thirdExpression != null )
|
||||
thirdExpression.reconcileReferences();
|
||||
|
||||
reconcileSubExpression((ASTExpression)lhs);
|
||||
reconcileSubExpression((ASTExpression)rhs);
|
||||
reconcileSubExpression((ASTExpression)thirdExpression);
|
||||
}
|
||||
protected void reconcileSubExpression(ASTExpression subExpression)
|
||||
{
|
||||
if( subExpression != null && subExpression.getReferences() != null )
|
||||
{
|
||||
Iterator subExp = subExpression.getReferences().iterator();
|
||||
while( subExp.hasNext() )
|
||||
{
|
||||
IASTReference aReference = (IASTReference)subExp.next();
|
||||
if( aReference != null && references.contains( aReference ) )
|
||||
subExp.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
|
|||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
|
||||
/**
|
||||
|
@ -47,4 +49,42 @@ public class ASTNewDescriptor implements IASTNewExpressionDescriptor {
|
|||
return newInitializerExpressions.iterator();
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
accept( requestor, getNewPlacementExpressions() );
|
||||
accept( requestor, getNewTypeIdExpressions() );
|
||||
accept( requestor, getNewInitializerExpressions() );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param requestor
|
||||
* @param iterator
|
||||
*/
|
||||
protected void accept(ISourceElementRequestor requestor, Iterator iterator)
|
||||
{
|
||||
while( iterator.hasNext() )
|
||||
((IASTExpression)iterator.next()).acceptElement(requestor);
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void enterScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void exitScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -43,4 +43,17 @@ public abstract class ASTReference implements IASTReference
|
|||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
if( obj == null )
|
||||
return false;
|
||||
if( ! (obj instanceof IASTReference ) )
|
||||
return false;
|
||||
|
||||
if( ((IASTReference)obj).getName().equals( getName() ) &&
|
||||
((IASTReference)obj).getOffset() == getOffset() )
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,229 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.ast.complete;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
|
||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public class ASTTypeId implements IASTTypeId
|
||||
{
|
||||
private final boolean isTypename;
|
||||
private final boolean isUnsigned;
|
||||
private final boolean isSigned;
|
||||
private final boolean isShort;
|
||||
private final boolean isLong;
|
||||
private final boolean isVolatile;
|
||||
private final boolean isConst;
|
||||
private final String signature;
|
||||
private ITokenDuple tokenDuple;
|
||||
private final List arrayModifiers;
|
||||
private final String typeName;
|
||||
private final List pointerOps;
|
||||
private final Type kind;
|
||||
private List references = new ArrayList();
|
||||
private ISymbol symbol;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public ASTTypeId( Type kind, ITokenDuple duple, List pointerOps, List arrayMods, String signature,
|
||||
boolean isConst, boolean isVolatile, boolean isUnsigned, boolean isSigned, boolean isShort, boolean isLong, boolean isTypeName )
|
||||
{
|
||||
typeName = ( duple == null ) ? "" : duple.toString() ;
|
||||
this.tokenDuple = duple;
|
||||
this.kind = kind;
|
||||
this.pointerOps = pointerOps;
|
||||
this.arrayModifiers = arrayMods;
|
||||
this.signature = signature;
|
||||
this.isConst = isConst;
|
||||
this.isVolatile = isVolatile;
|
||||
this.isUnsigned = isUnsigned;
|
||||
this.isSigned = isSigned;
|
||||
this.isShort = isShort;
|
||||
this.isLong = isLong;
|
||||
this.isTypename = isTypeName;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getKind()
|
||||
*/
|
||||
public Type getKind()
|
||||
{
|
||||
return kind;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getType()
|
||||
*/
|
||||
public String getTypeOrClassName()
|
||||
{
|
||||
return typeName;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getPointerOperators()
|
||||
*/
|
||||
public Iterator getPointerOperators()
|
||||
{
|
||||
return pointerOps.iterator();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getArrayModifiers()
|
||||
*/
|
||||
public Iterator getArrayModifiers()
|
||||
{
|
||||
return arrayModifiers.iterator();
|
||||
}
|
||||
|
||||
public List getReferences()
|
||||
{
|
||||
return references;
|
||||
}
|
||||
|
||||
public void finalize()
|
||||
{
|
||||
references.clear();
|
||||
references = null;
|
||||
tokenDuple = null;
|
||||
}
|
||||
|
||||
public ITokenDuple getTokenDuple()
|
||||
{
|
||||
return tokenDuple;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getFullSignature()
|
||||
*/
|
||||
public String getFullSignature()
|
||||
{
|
||||
return signature;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#createTypeSymbol(org.eclipse.cdt.core.parser.ast.IASTFactory)
|
||||
*/
|
||||
public ISymbol getTypeSymbol() throws ASTNotImplementedException
|
||||
{
|
||||
return symbol;
|
||||
}
|
||||
|
||||
public void setTypeSymbol( ISymbol symbol )
|
||||
{
|
||||
this.symbol = symbol;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isConst()
|
||||
*/
|
||||
public boolean isConst()
|
||||
{
|
||||
return isConst;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isVolatile()
|
||||
*/
|
||||
public boolean isVolatile()
|
||||
{
|
||||
return isVolatile;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isLong()
|
||||
*/
|
||||
public boolean isLong()
|
||||
{
|
||||
return isLong;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isShort()
|
||||
*/
|
||||
public boolean isShort()
|
||||
{
|
||||
return isShort;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isSigned()
|
||||
*/
|
||||
public boolean isSigned()
|
||||
{
|
||||
return isSigned;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isUnsigned()
|
||||
*/
|
||||
public boolean isUnsigned()
|
||||
{
|
||||
return isUnsigned;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isTypename()
|
||||
*/
|
||||
public boolean isTypename()
|
||||
{
|
||||
return isTypename;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
if( references != null && ! references.isEmpty() )
|
||||
{
|
||||
ASTReferenceStore store = new ASTReferenceStore( references );
|
||||
store.processReferences(requestor);
|
||||
}
|
||||
Iterator arrayMods = getArrayModifiers();
|
||||
while( arrayMods.hasNext() )
|
||||
{
|
||||
((IASTArrayModifier)arrayMods.next()).acceptElement(requestor);
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void enterScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void exitScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
/**
|
||||
* @param list
|
||||
*/
|
||||
public void addReferences(List list)
|
||||
{
|
||||
references.addAll( list );
|
||||
}
|
||||
|
||||
}
|
|
@ -21,12 +21,12 @@ import org.eclipse.cdt.core.parser.ITokenDuple;
|
|||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTSemanticException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCodeScope;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||
|
@ -53,6 +53,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
|||
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.IASTTypeId;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||
|
@ -101,6 +102,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
* Overrides an existing reference if it has the same name and offset
|
||||
*/
|
||||
protected void addReference(List references, IASTReference reference){
|
||||
if( references == null ) return;
|
||||
Iterator i = references.iterator();
|
||||
while (i.hasNext()){
|
||||
IASTReference ref = (IASTReference)i.next();
|
||||
|
@ -758,40 +760,22 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
IASTExpression lhs,
|
||||
IASTExpression rhs,
|
||||
IASTExpression thirdExpression,
|
||||
ITokenDuple typeId,
|
||||
String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException
|
||||
IASTTypeId typeId,
|
||||
ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException
|
||||
{
|
||||
List references = new ArrayList();
|
||||
|
||||
getExpressionReferences(lhs, references);
|
||||
getExpressionReferences(rhs, references);
|
||||
getExpressionReferences(thirdExpression,references);
|
||||
|
||||
// add newDescriptor's references & add to references
|
||||
// if there is a newDescriptor, check related expressions
|
||||
if(newDescriptor != null){
|
||||
Iterator i = newDescriptor.getNewPlacementExpressions();
|
||||
while (i.hasNext()){
|
||||
getExpressionReferences((IASTExpression)i.next(), references);
|
||||
}
|
||||
i = newDescriptor.getNewTypeIdExpressions();
|
||||
while (i.hasNext()){
|
||||
getExpressionReferences((IASTExpression)i.next(), references);
|
||||
}
|
||||
i = newDescriptor.getNewInitializerExpressions();
|
||||
while (i.hasNext()){
|
||||
getExpressionReferences((IASTExpression)i.next(), references);
|
||||
}
|
||||
}
|
||||
|
||||
//look up id & add to references
|
||||
IContainerSymbol startingScope = scopeToSymbol( scope );
|
||||
|
||||
//look up typeId & add to references
|
||||
ISymbol symbol = null;
|
||||
if( typeId != null ){
|
||||
symbol = lookupQualifiedName( startingScope, typeId, references, false );
|
||||
}
|
||||
|
||||
if( idExpression != null )
|
||||
symbol = lookupQualifiedName( startingScope, idExpression, references, false );
|
||||
|
||||
// "a.m" or "a->m : lookup m in the scope of the declaration of a
|
||||
if((kind == IASTExpression.Kind.POSTFIX_DOT_IDEXPRESSION)
|
||||
|| (kind == IASTExpression.Kind.POSTFIX_ARROW_IDEXPRESSION)
|
||||
|
@ -803,7 +787,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
TypeInfo lhsInfo = (TypeInfo) ((ASTExpression)lhs).getResultType().iterator().next();
|
||||
ISymbol containingScope = (ISymbol) lhsInfo.getTypeSymbol().getTypeSymbol();
|
||||
if(containingScope != null){
|
||||
symbol = lookupQualifiedName((IContainerSymbol)containingScope, ((ASTExpression)rhs).getTypeId() , references, false);
|
||||
symbol = lookupQualifiedName((IContainerSymbol)containingScope, ((ASTExpression)rhs).getIdExpressionTokenDuple(), references, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -819,13 +803,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
}
|
||||
|
||||
if (kind == IASTExpression.Kind.POSTFIX_FUNCTIONCALL){
|
||||
ITokenDuple functionId = ((ASTExpression)lhs).getTypeId();
|
||||
ITokenDuple functionId = ((ASTExpression)lhs).getIdExpressionTokenDuple();
|
||||
List parameters = ((ASTExpression)rhs).getResultType();
|
||||
symbol = lookupQualifiedName(startingScope, functionId, TypeInfo.t_function, parameters, references, false);
|
||||
}
|
||||
|
||||
ASTExpression expression = new ASTExpression( kind, lhs, rhs, thirdExpression,
|
||||
typeId, literal, newDescriptor, references);
|
||||
typeId, idExpression, literal, newDescriptor, references);
|
||||
|
||||
expression.setResultType (getExpressionResultType(expression, symbol));
|
||||
|
||||
|
@ -1048,9 +1032,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
}
|
||||
|
||||
// types that resolve to t_type, symbol already looked up in type id
|
||||
if( (expression.getExpressionKind() == IASTExpression.Kind.ID_EXPRESSION)
|
||||
|| (expression.getExpressionKind() == IASTExpression.Kind.POSTFIX_TYPEID_TYPEID)
|
||||
){
|
||||
if( expression.getExpressionKind() == IASTExpression.Kind.ID_EXPRESSION )
|
||||
{
|
||||
info.setType(TypeInfo.t_type);
|
||||
info.setTypeSymbol(symbol);
|
||||
result.add(info);
|
||||
|
@ -1067,6 +1050,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
result.add(info);
|
||||
return result;
|
||||
}
|
||||
|
||||
// a star implies a pointer operation of type pointer
|
||||
if (expression.getExpressionKind() == IASTExpression.Kind.UNARY_STAR_CASTEXPRESSION){
|
||||
List lhsResult = ((ASTExpression)expression.getLHSExpression()).getResultType();
|
||||
|
@ -1141,17 +1125,23 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
}
|
||||
}
|
||||
// new
|
||||
/* if((expression.getExpressionKind() == IASTExpression.Kind.NEW_NEWTYPEID)
|
||||
|| (expression.getExpressionKind() == IASTExpression.Kind.NEW_TYPEID)
|
||||
){
|
||||
if( expression.getExpressionKind() == IASTExpression.Kind.NEW_TYPEID )
|
||||
{
|
||||
if(symbol != null){
|
||||
info.setType(symbol.getType());
|
||||
info.setTypeSymbol(symbol);
|
||||
try
|
||||
{
|
||||
info = expression.getTypeId().getTypeSymbol().getTypeInfo();
|
||||
}
|
||||
catch (ASTNotImplementedException e)
|
||||
{
|
||||
// will never happen
|
||||
}
|
||||
info.addOperatorExpression( TypeInfo.OperatorExpression.indirection);
|
||||
result.add(info);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
*/ // types that use the usual arithmetic conversions
|
||||
// types that use the usual arithmetic conversions
|
||||
if((expression.getExpressionKind() == IASTExpression.Kind.MULTIPLICATIVE_MULTIPLY)
|
||||
|| (expression.getExpressionKind() == IASTExpression.Kind.MULTIPLICATIVE_DIVIDE)
|
||||
|| (expression.getExpressionKind() == IASTExpression.Kind.MULTIPLICATIVE_MODULUS)
|
||||
|
@ -1243,6 +1233,22 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
result.add(info);
|
||||
return result;
|
||||
}
|
||||
|
||||
if( expression.getExpressionKind() == IASTExpression.Kind.POSTFIX_TYPEID_TYPEID )
|
||||
{
|
||||
IASTTypeId typeId = expression.getTypeId();
|
||||
try
|
||||
{
|
||||
info = typeId.getTypeSymbol().getTypeInfo();
|
||||
}
|
||||
catch (ASTNotImplementedException e)
|
||||
{
|
||||
// will not ever happen from within CompleteParseASTFactory
|
||||
}
|
||||
result.add(info);
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -1273,10 +1279,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
Iterator iter =typeIds.iterator();
|
||||
while( iter.hasNext() )
|
||||
{
|
||||
ITokenDuple duple = (ITokenDuple)iter.next();
|
||||
IASTTypeId duple = (IASTTypeId)iter.next();
|
||||
if( duple != null )
|
||||
{
|
||||
lookupQualifiedName( scopeToSymbol( scope ), duple, references, false );
|
||||
lookupQualifiedName( scopeToSymbol( scope ), ((ASTTypeId)duple).getTokenDuple(), references, false );
|
||||
newTypeIds.add( duple.toString() );
|
||||
}
|
||||
}
|
||||
|
@ -1429,7 +1435,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
}
|
||||
|
||||
String functionName = oneToken;
|
||||
String parentName = name.substring(0, name.lastIndexOf(DOUBLE_COLON));
|
||||
// String parentName = name.substring(0, name.lastIndexOf(DOUBLE_COLON));
|
||||
|
||||
int numOfTokens = 1;
|
||||
int offset = nameOffset;
|
||||
|
@ -1688,7 +1694,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
|
||||
while( arrayModsIterator.hasNext() )
|
||||
{
|
||||
IASTArrayModifier astArrayModifier = (IASTArrayModifier)arrayModsIterator.next();
|
||||
arrayModsIterator.next();
|
||||
symbol.addPtrOperator( new TypeInfo.PtrOp( TypeInfo.PtrOp.t_array ));
|
||||
}
|
||||
}
|
||||
|
@ -2366,4 +2372,70 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
{
|
||||
return new ASTParameterDeclaration( null, isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, endingOffset, nameOffset );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeId(org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type, org.eclipse.cdt.core.parser.ITokenDuple, java.util.List, java.util.List)
|
||||
*/
|
||||
public IASTTypeId createTypeId(IASTScope scope, Type kind, boolean isConst, boolean isVolatile, boolean isShort,
|
||||
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods) throws ASTSemanticException
|
||||
{
|
||||
ASTTypeId result =
|
||||
new ASTTypeId( kind, name, pointerOps, arrayMods, "", //TODO
|
||||
isConst, isVolatile, isUnsigned, isSigned, isShort, isLong, isTypename );
|
||||
result.setTypeSymbol( createSymbolForTypeId( scope, result ) );
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
public static TypeInfo.eType getTypeKind(IASTTypeId id)
|
||||
{
|
||||
IASTSimpleTypeSpecifier.Type type = id.getKind();
|
||||
if( type == IASTSimpleTypeSpecifier.Type.BOOL )
|
||||
return TypeInfo.t_bool;
|
||||
else if( type == IASTSimpleTypeSpecifier.Type.CHAR )
|
||||
return TypeInfo.t_char;
|
||||
else if( type == IASTSimpleTypeSpecifier.Type.DOUBLE )
|
||||
return TypeInfo.t_double;
|
||||
else if( type == IASTSimpleTypeSpecifier.Type.FLOAT )
|
||||
return TypeInfo.t_float;
|
||||
else if( type == IASTSimpleTypeSpecifier.Type.INT )
|
||||
return TypeInfo.t_int;
|
||||
else if( type == IASTSimpleTypeSpecifier.Type.VOID )
|
||||
return TypeInfo.t_void;
|
||||
else if( id.isShort() || id.isLong() || id.isUnsigned() || id.isSigned() )
|
||||
return TypeInfo.t_int;
|
||||
else
|
||||
return TypeInfo.t_type;
|
||||
}
|
||||
|
||||
protected ISymbol createSymbolForTypeId( IASTScope scope, IASTTypeId id ) throws ASTSemanticException
|
||||
{
|
||||
if( id == null ) return null;
|
||||
|
||||
ASTTypeId typeId = (ASTTypeId)id;
|
||||
ISymbol result = pst.newSymbol( "", CompleteParseASTFactory.getTypeKind(id));
|
||||
|
||||
result.getTypeInfo().setBit( id.isConst(), TypeInfo.isConst );
|
||||
result.getTypeInfo().setBit( id.isVolatile(), TypeInfo.isVolatile );
|
||||
|
||||
result.getTypeInfo().setBit( id.isShort(), TypeInfo.isShort);
|
||||
result.getTypeInfo().setBit( id.isLong(), TypeInfo.isLong);
|
||||
result.getTypeInfo().setBit( id.isUnsigned(), TypeInfo.isUnsigned);
|
||||
|
||||
List refs = new ArrayList();
|
||||
if( result.getType() == TypeInfo.t_type )
|
||||
{
|
||||
ISymbol typeSymbol = lookupQualifiedName( scopeToSymbol(scope), typeId.getTokenDuple(), refs, true );
|
||||
if( typeSymbol.getType() == TypeInfo.t_type )
|
||||
throw new ASTSemanticException();
|
||||
result.setTypeSymbol( typeSymbol );
|
||||
typeId.addReferences( refs );
|
||||
}
|
||||
|
||||
setPointerOperators( result, id.getPointerOperators(), id.getArrayModifiers() );
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
|
@ -33,7 +33,7 @@ public class ASTExceptionSpecification implements IASTExceptionSpecification
|
|||
Iterator i = typeIds.iterator();
|
||||
this.typeIds = new ArrayList();
|
||||
while( i.hasNext() )
|
||||
this.typeIds.add( ((ITokenDuple)i.next()).toString() );
|
||||
this.typeIds.add( ((IASTTypeId)i.next()).getTypeOrClassName());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -7,8 +7,10 @@
|
|||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||
import org.eclipse.cdt.core.parser.ast.ExpressionEvaluationException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
||||
|
||||
|
||||
|
||||
|
@ -22,7 +24,8 @@ public class ASTExpression implements IASTExpression {
|
|||
|
||||
private final Kind kind;
|
||||
private final IASTExpression lhs, rhs, third;
|
||||
private final String typeId, literal;
|
||||
private final IASTTypeId typeId;
|
||||
private final String literal, idExpression;
|
||||
private final IASTNewExpressionDescriptor newDescriptor;
|
||||
|
||||
/**
|
||||
|
@ -33,7 +36,7 @@ public class ASTExpression implements IASTExpression {
|
|||
* @param typeId
|
||||
* @param literal
|
||||
*/
|
||||
public ASTExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression third, String typeId, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
public ASTExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression third, IASTTypeId typeId, String idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
this.kind = kind;
|
||||
this.lhs =lhs;
|
||||
this.rhs = rhs;
|
||||
|
@ -41,6 +44,7 @@ public class ASTExpression implements IASTExpression {
|
|||
this.typeId = typeId;
|
||||
this.literal = literal;
|
||||
this.newDescriptor = newDescriptor;
|
||||
this.idExpression = idExpression;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -74,7 +78,7 @@ public class ASTExpression implements IASTExpression {
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getTypeId()
|
||||
*/
|
||||
public String getTypeIdString() {
|
||||
public IASTTypeId getTypeId() {
|
||||
return typeId;
|
||||
}
|
||||
|
||||
|
@ -176,6 +180,22 @@ public class ASTExpression implements IASTExpression {
|
|||
{
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getIdExpression()
|
||||
*/
|
||||
public String getIdExpression()
|
||||
{
|
||||
return idExpression;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#reconcileReferences()
|
||||
*/
|
||||
public void reconcileReferences() throws ASTNotImplementedException
|
||||
{
|
||||
throw new ASTNotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick;
|
|||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
|
||||
/**
|
||||
|
@ -44,4 +45,25 @@ public class ASTNewDescriptor implements IASTNewExpressionDescriptor {
|
|||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void enterScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void exitScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,169 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002,2003 Rational Software Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v0.5
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v05.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial API and implementation
|
||||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
|
||||
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public class ASTTypeId implements IASTTypeId
|
||||
{
|
||||
private final boolean isVolatile;
|
||||
private final boolean isUnsigned;
|
||||
private final boolean isTypeName;
|
||||
private final boolean isSigned;
|
||||
private final boolean isShort;
|
||||
private final boolean isLong;
|
||||
private final boolean isConst;
|
||||
private final Type kind;
|
||||
private final String name;
|
||||
private final List pointerOps;
|
||||
private final List arrayMods;
|
||||
/**
|
||||
* @param kind
|
||||
* @param string
|
||||
* @param pointerOps
|
||||
* @param arrayMods
|
||||
*/
|
||||
public ASTTypeId(Type kind, String string, List pointerOps, List arrayMods, boolean isConst, boolean isVolatile,
|
||||
boolean isUnsigned, boolean isSigned, boolean isShort, boolean isLong, boolean isTypeName)
|
||||
{
|
||||
this.kind = kind;
|
||||
this.name = string;
|
||||
this.pointerOps = pointerOps;
|
||||
this.arrayMods = arrayMods;
|
||||
this.isVolatile =isVolatile;
|
||||
this.isUnsigned =isUnsigned;
|
||||
this.isTypeName =isTypeName;
|
||||
this.isSigned =isSigned;
|
||||
this.isShort =isShort;
|
||||
this.isLong =isLong;
|
||||
this.isConst =isConst;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getKind()
|
||||
*/
|
||||
public Type getKind()
|
||||
{
|
||||
return kind;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getType()
|
||||
*/
|
||||
public String getTypeOrClassName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getPointerOperators()
|
||||
*/
|
||||
public Iterator getPointerOperators()
|
||||
{
|
||||
return pointerOps.iterator();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getArrayModifiers()
|
||||
*/
|
||||
public Iterator getArrayModifiers()
|
||||
{
|
||||
return arrayMods.iterator();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getFullSignature()
|
||||
*/
|
||||
public String getFullSignature() throws ASTNotImplementedException
|
||||
{
|
||||
throw new ASTNotImplementedException();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#createTypeSymbol(org.eclipse.cdt.core.parser.ast.IASTFactory)
|
||||
*/
|
||||
public ISymbol getTypeSymbol() throws ASTNotImplementedException
|
||||
{
|
||||
throw new ASTNotImplementedException();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isConst()
|
||||
*/
|
||||
public boolean isConst()
|
||||
{
|
||||
return isConst;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isVolatile()
|
||||
*/
|
||||
public boolean isVolatile()
|
||||
{
|
||||
return isVolatile;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isLong()
|
||||
*/
|
||||
public boolean isLong()
|
||||
{
|
||||
return isLong;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isShort()
|
||||
*/
|
||||
public boolean isShort()
|
||||
{
|
||||
return isShort;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isSigned()
|
||||
*/
|
||||
public boolean isSigned()
|
||||
{
|
||||
return isSigned;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isUnsigned()
|
||||
*/
|
||||
public boolean isUnsigned()
|
||||
{
|
||||
return isUnsigned;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#isTypename()
|
||||
*/
|
||||
public boolean isTypename()
|
||||
{
|
||||
return isTypeName;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void enterScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void exitScope(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
}
|
|
@ -46,6 +46,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
|||
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.IASTTypeId;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||
|
@ -150,8 +151,8 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExpression(org.eclipse.cdt.core.parser.ast.IASTExpression.ExpressionKind, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public IASTExpression createExpression(IASTScope scope, Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, ITokenDuple typeId, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
return new ASTExpression( kind, lhs, rhs, thirdExpression, typeId == null ? "" : typeId.toString(), literal, newDescriptor );
|
||||
public IASTExpression createExpression(IASTScope scope, Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, IASTTypeId typeId, ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
return new ASTExpression( kind, lhs, rhs, thirdExpression, typeId, idExpression == null ? "" : idExpression.toString(), literal, newDescriptor );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -296,4 +297,14 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
|||
{
|
||||
return new ASTParameterDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, endingOffset, nameOffset );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeId(org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type, org.eclipse.cdt.core.parser.ITokenDuple, java.util.List, java.util.List)
|
||||
*/
|
||||
public IASTTypeId createTypeId(IASTScope scope, Type kind, boolean isConst, boolean isVolatile, boolean isShort,
|
||||
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods)
|
||||
{
|
||||
return new ASTTypeId( kind, name == null ? "" : name.toString(), pointerOps, arrayMods, isConst,
|
||||
isVolatile, isUnsigned, isSigned, isShort, isLong, isTypename );
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue