[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Applied [HEAD] - Parser Patch #94063417
|
A feel good story that even Thomas could appreciate.
CORE
Added in preliminary support for Field/Variable w/cross references
on their types.
TESTS
Updated CompleteParseASTTests.
I Love CDT
JohnC
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.28
diff -u -r1.28 ChangeLog
--- ChangeLog 22 Jul 2003 00:44:16 -0000 1.28
+++ ChangeLog 22 Jul 2003 21:57:06 -0000
@@ -1,3 +1,6 @@
+2003-07-22 John Camelon
+ Updated CompleteParseASTTests.
+
2003-07-21 Bogdan Gheorghe
Added new indexer test for newly added declarations
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.2
diff -u -r1.2 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 22 Jul 2003 00:26:13 -0000 1.2
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 22 Jul 2003 21:57:08 -0000
@@ -48,6 +48,7 @@
import org.eclipse.cdt.core.parser.ast.IASTPointerToFunction;
import org.eclipse.cdt.core.parser.ast.IASTPointerToMethod;
import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
@@ -112,7 +113,7 @@
*/
public void acceptVariable(IASTVariable variable)
{
-
+ getCurrentScope().addDeclaration( variable );
}
/* (non-Javadoc)
@@ -612,5 +613,52 @@
assertEquals( callback.getReferences().size(), 2 );
}
+ public void testSimpleVariable() throws Exception
+ {
+ Iterator declarations = parse( "int x;").getDeclarations();
+ IASTVariable v = (IASTVariable)declarations.next();
+ assertEquals( v.getName(), "x");
+ assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getType(), IASTSimpleTypeSpecifier.Type.INT );
+ }
+ public void testSimpleClassReferenceVariable() throws Exception
+ {
+ Iterator declarations = parse( "class A { }; A x;").getDeclarations();
+ IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
+ IASTVariable v = (IASTVariable)declarations.next();
+ assertEquals( v.getName(), "x");
+ assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA );
+ }
+
+ public void testNestedClassReferenceVariable() throws Exception
+ {
+ Iterator declarations = parse( "namespace N { class A { }; } N::A x;").getDeclarations();
+ IASTNamespaceDefinition namespace = (IASTNamespaceDefinition)declarations.next();
+ Iterator iter = getDeclarations( namespace );
+ IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)iter.next()).getTypeSpecifier();
+ IASTVariable v = (IASTVariable)declarations.next();
+ assertEquals( v.getName(), "x");
+ assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA );
+ assertEquals( callback.getReferences().size(), 2 );
+ }
+
+ public void testMultipleDeclaratorsVariable() throws Exception
+ {
+ Iterator declarations = parse( "class A { }; A x, y, z;").getDeclarations();
+ IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
+ IASTVariable v = (IASTVariable)declarations.next();
+ assertEquals( v.getName(), "x");
+ assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA );
+ assertEquals( callback.getReferences().size(), 3 );
+ }
+
+ public void testSimpleField() throws Exception
+ {
+ Iterator declarations = parse( "class A { double x; };").getDeclarations();
+ IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
+ Iterator fields =getDeclarations(classA);
+ IASTField f = (IASTField)fields.next();
+ assertEquals( f.getName(), "x" );
+ assertEquals( ((IASTSimpleTypeSpecifier)f.getAbstractDeclaration().getTypeSpecifier()).getType(), IASTSimpleTypeSpecifier.Type.DOUBLE );
+ }
}
Index: parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java,v
retrieving revision 1.9
diff -u -r1.9 ParserSymbolTableTest.java
--- parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java 22 Jul 2003 00:26:13 -0000 1.9
+++ parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java 22 Jul 2003 21:57:12 -0000
@@ -26,10 +26,10 @@
import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException;
+import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.Mark;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TemplateInstance;
-import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TypeInfo;
-import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TypeInfo.PtrOp;
+import org.eclipse.cdt.internal.core.parser.pst.TypeInfo.PtrOp;
@@ -171,7 +171,7 @@
table.getCompilationUnit().addSymbol( firstX );
IDerivableContainerSymbol firstClass = table.newDerivableContainerSymbol("class");
- firstClass.setType( ParserSymbolTable.TypeInfo.t_class );
+ firstClass.setType( TypeInfo.t_class );
table.getCompilationUnit().addSymbol( firstClass );
ISymbol look = firstClass.Lookup( "x" );
@@ -199,7 +199,7 @@
table.getCompilationUnit().addSymbol( x );
IDerivableContainerSymbol decl = table.newDerivableContainerSymbol("class");
- decl.setType( ParserSymbolTable.TypeInfo.t_class );
+ decl.setType( TypeInfo.t_class );
table.getCompilationUnit().addSymbol( decl );
ISymbol look = decl.Lookup( "x" );
@@ -217,10 +217,10 @@
newTable();
IDerivableContainerSymbol parent = table.newDerivableContainerSymbol("parent");
- parent.setType( ParserSymbolTable.TypeInfo.t_class );
+ parent.setType( TypeInfo.t_class );
IDerivableContainerSymbol class1 = table.newDerivableContainerSymbol("class");
- class1.setType( ParserSymbolTable.TypeInfo.t_class );
+ class1.setType( TypeInfo.t_class );
class1.addParent( parent );
ISymbol decl = table.new Declaration("x");
@@ -393,13 +393,13 @@
compUnit.addSymbol( d );
IContainerSymbol enum = table.new Declaration("enum");
- enum.setType( ParserSymbolTable.TypeInfo.t_enumeration );
+ enum.setType( TypeInfo.t_enumeration );
ISymbol enumerator = table.new Declaration( "enumerator" );
- enumerator.setType( ParserSymbolTable.TypeInfo.t_enumerator );
+ enumerator.setType( TypeInfo.t_enumerator );
ISymbol stat = table.new Declaration("static");
- stat.getTypeInfo().setBit( true, ParserSymbolTable.TypeInfo.isStatic );
+ stat.getTypeInfo().setBit( true, TypeInfo.isStatic );
ISymbol x = table.new Declaration("x");
@@ -448,13 +448,13 @@
newTable();
IDerivableContainerSymbol cls = table.newDerivableContainerSymbol( "class" );
- cls.setType( ParserSymbolTable.TypeInfo.t_class );
+ cls.setType( TypeInfo.t_class );
IDerivableContainerSymbol struct = table.newDerivableContainerSymbol("struct");
- struct.setType( ParserSymbolTable.TypeInfo.t_struct );
+ struct.setType( TypeInfo.t_struct );
IContainerSymbol union = table.newContainerSymbol("union");
- union.setType( ParserSymbolTable.TypeInfo.t_union );
+ union.setType( TypeInfo.t_union );
IDerivableContainerSymbol hideCls = table.newDerivableContainerSymbol( "class" );
IDerivableContainerSymbol hideStruct = table.newDerivableContainerSymbol("struct");
@@ -476,11 +476,11 @@
table.getCompilationUnit().addSymbol( a );
table.getCompilationUnit().addSymbol( b );
- ISymbol look = a.ElaboratedLookup( ParserSymbolTable.TypeInfo.t_class, "class" );
+ ISymbol look = a.ElaboratedLookup( TypeInfo.t_class, "class" );
assertEquals( look, cls );
- look = a.ElaboratedLookup( ParserSymbolTable.TypeInfo.t_struct, "struct" );
+ look = a.ElaboratedLookup( TypeInfo.t_struct, "struct" );
assertEquals( look, struct );
- look = a.ElaboratedLookup( ParserSymbolTable.TypeInfo.t_union, "union" );
+ look = a.ElaboratedLookup( TypeInfo.t_union, "union" );
assertEquals( look, union );
}
@@ -541,18 +541,18 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IDerivableContainerSymbol struct = table.newDerivableContainerSymbol("stat");
- struct.setType( ParserSymbolTable.TypeInfo.t_struct );
+ struct.setType( TypeInfo.t_struct );
compUnit.addSymbol( struct );
IParameterizedSymbol function = table.newParameterizedSymbol( "stat" );
- function.setType( ParserSymbolTable.TypeInfo.t_function );
+ function.setType( TypeInfo.t_function );
compUnit.addSymbol( function );
IParameterizedSymbol f = table.newParameterizedSymbol("f");
- f.setType( ParserSymbolTable.TypeInfo.t_function );
+ f.setType( TypeInfo.t_function );
compUnit.addSymbol( f );
- ISymbol look = f.ElaboratedLookup( ParserSymbolTable.TypeInfo.t_struct, "stat" );
+ ISymbol look = f.ElaboratedLookup( TypeInfo.t_struct, "stat" );
assertEquals( look, struct );
look = f.Lookup( "stat" );
@@ -594,18 +594,18 @@
newTable();
IContainerSymbol nsA = table.newContainerSymbol("A");
- nsA.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsA.setType( TypeInfo.t_namespace );
table.getCompilationUnit().addSymbol( nsA );
ISymbol nsA_i = table.newSymbol("i");
nsA.addSymbol( nsA_i );
IContainerSymbol nsB = table.newContainerSymbol("B");
- nsB.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsB.setType( TypeInfo.t_namespace );
nsA.addSymbol( nsB );
IContainerSymbol nsC = table.newContainerSymbol("C");
- nsC.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsC.setType( TypeInfo.t_namespace );
nsB.addSymbol( nsC );
ISymbol nsC_i = table.newSymbol("i");
@@ -616,7 +616,7 @@
nsB.addUsingDirective( nsC );
IParameterizedSymbol f1 = table.newParameterizedSymbol("f");
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
nsB.addSymbol( f1 );
@@ -624,7 +624,7 @@
assertEquals( look, nsC_i ); //C::i visible and hides A::i
IContainerSymbol nsD = table.newContainerSymbol("D");
- nsD.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsD.setType( TypeInfo.t_namespace );
nsA.addSymbol( nsD );
look = nsD.Lookup("B");
@@ -636,7 +636,7 @@
nsD.addUsingDirective( nsC );
IParameterizedSymbol f2 = table.newParameterizedSymbol( "f2" );
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
+ f2.setType( TypeInfo.t_function );
nsD.addSymbol( f2 );
try
@@ -651,14 +651,14 @@
}
IParameterizedSymbol f3 = table.newParameterizedSymbol("f3");
- f3.setType( ParserSymbolTable.TypeInfo.t_function );
+ f3.setType( TypeInfo.t_function );
nsA.addSymbol( f3 );
look = f3.Lookup("i");
assertEquals( look, nsA_i ); //uses A::i
IParameterizedSymbol f4 = table.newParameterizedSymbol("f4");
- f4.setType( ParserSymbolTable.TypeInfo.t_function );
+ f4.setType( TypeInfo.t_function );
table.getCompilationUnit().addSymbol( f4 );
look = f4.Lookup("i");
@@ -691,7 +691,7 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol nsM = table.newContainerSymbol( "M" );
- nsM.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsM.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsM );
@@ -699,7 +699,7 @@
nsM.addSymbol( nsM_i );
IContainerSymbol nsN = table.newContainerSymbol( "N" );
- nsN.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsN.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsN );
@@ -759,30 +759,30 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol nsA = table.newContainerSymbol("A");
- nsA.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsA.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsA );
ISymbol a = table.newSymbol("a");
nsA.addSymbol( a );
IContainerSymbol nsB = table.newContainerSymbol("B");
- nsB.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsB.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsB );
nsB.addUsingDirective( nsA );
IContainerSymbol nsC = table.newContainerSymbol("C");
- nsC.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsC.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsC );
nsC.addUsingDirective( nsA );
IContainerSymbol nsBC = table.newContainerSymbol("BC");
- nsBC.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsBC.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsBC );
nsBC.addUsingDirective( nsB );
nsBC.addUsingDirective( nsC );
IParameterizedSymbol f = table.newParameterizedSymbol("f");
- f.setType(ParserSymbolTable.TypeInfo.t_function);
+ f.setType(TypeInfo.t_function);
compUnit.addSymbol( f );
ISymbol look = f.LookupNestedNameSpecifier("BC");
@@ -820,14 +820,14 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol nsB = table.newContainerSymbol( "B" );
- nsB.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsB.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsB );
ISymbol b = table.newSymbol("b");
nsB.addSymbol( b );
IContainerSymbol nsA = table.newContainerSymbol( "A" );
- nsA.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsA.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsA );
nsA.addUsingDirective( nsB );
@@ -883,11 +883,11 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol nsA = table.newContainerSymbol( "A" );
- nsA.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsA.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsA );
IContainerSymbol nsB = table.newContainerSymbol( "B" );
- nsB.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsB.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsB );
nsB.addUsingDirective( nsA );
@@ -932,32 +932,32 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol nsA = table.newContainerSymbol("A");
- nsA.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsA.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsA );
IContainerSymbol structX = table.newContainerSymbol("x");
- structX.setType( ParserSymbolTable.TypeInfo.t_struct );
+ structX.setType( TypeInfo.t_struct );
nsA.addSymbol( structX );
ISymbol intX = table.newSymbol("x");
- intX.setType( ParserSymbolTable.TypeInfo.t_int );
+ intX.setType( TypeInfo.t_int );
nsA.addSymbol( intX );
ISymbol intY = table.newSymbol("y");
- intY.setType( ParserSymbolTable.TypeInfo.t_int );
+ intY.setType( TypeInfo.t_int );
nsA.addSymbol( intY );
IContainerSymbol nsB = table.newContainerSymbol("B");
- nsB.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsB.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsB );
IContainerSymbol structY = table.newContainerSymbol("y");
- structY.setType( ParserSymbolTable.TypeInfo.t_struct );
+ structY.setType( TypeInfo.t_struct );
nsB.addSymbol( structY );
IContainerSymbol nsC = table.newContainerSymbol("C");
- nsC.setType( ParserSymbolTable.TypeInfo.t_namespace);
+ nsC.setType( TypeInfo.t_namespace);
compUnit.addSymbol( nsC );
ISymbol look = nsC.Lookup("A");
@@ -1006,15 +1006,15 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol nsA = table.newContainerSymbol( "A" );
- nsA.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsA.setType( TypeInfo.t_namespace );
compUnit.addSymbol( nsA );
IContainerSymbol nsB = table.newContainerSymbol( "B" );
- nsB.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ nsB.setType( TypeInfo.t_namespace );
nsA.addSymbol( nsB );
IParameterizedSymbol f1 = table.newParameterizedSymbol("f1");
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
nsB.addSymbol( f1 );
nsA.addUsingDirective( nsB );
@@ -1060,19 +1060,19 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IDerivableContainerSymbol B = table.newDerivableContainerSymbol("B");
- B.setType( ParserSymbolTable.TypeInfo.t_struct );
+ B.setType( TypeInfo.t_struct );
compUnit.addSymbol( B );
IParameterizedSymbol f = table.newParameterizedSymbol("f");
- f.setType( ParserSymbolTable.TypeInfo.t_function );
+ f.setType( TypeInfo.t_function );
B.addSymbol( f );
IContainerSymbol E = table.newContainerSymbol( "E" );
- E.setType( ParserSymbolTable.TypeInfo.t_enumeration );
+ E.setType( TypeInfo.t_enumeration );
B.addSymbol( E );
ISymbol e = table.newSymbol( "e" );
- e.setType( ParserSymbolTable.TypeInfo.t_enumerator );
+ e.setType( TypeInfo.t_enumerator );
E.addSymbol( e );
/**
@@ -1080,15 +1080,15 @@
*/
IDerivableContainerSymbol C = table.newDerivableContainerSymbol( "C" );
- C.setType( ParserSymbolTable.TypeInfo.t_class );
+ C.setType( TypeInfo.t_class );
compUnit.addSymbol( C );
IParameterizedSymbol g = table.newParameterizedSymbol( "g" );
- g.setType( ParserSymbolTable.TypeInfo.t_function );
+ g.setType( TypeInfo.t_function );
C.addSymbol( g );
IDerivableContainerSymbol D = table.newDerivableContainerSymbol( "D" );
- D.setType( ParserSymbolTable.TypeInfo.t_struct );
+ D.setType( TypeInfo.t_struct );
ISymbol look = compUnit.Lookup( "B" );
assertEquals( look, B );
D.addParent( B );
@@ -1146,13 +1146,13 @@
IContainerSymbol compUnit = table.getCompilationUnit();
ParserSymbolTable.Declaration A = table.new Declaration( "A" );
- A.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ A.setType( TypeInfo.t_namespace );
compUnit.addSymbol( A );
ParserSymbolTable.Declaration f1 = table.new Declaration( "f" );
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
f1.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
- f1.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, null, false );
+ f1.addParameter( TypeInfo.t_int, 0, null, false );
A.addSymbol( f1 );
ISymbol look = compUnit.LookupNestedNameSpecifier("A");
@@ -1164,18 +1164,18 @@
assertEquals( look, A );
IParameterizedSymbol f2 = table.newParameterizedSymbol("f");
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
+ f2.setType( TypeInfo.t_function );
f2.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
- f2.addParameter( ParserSymbolTable.TypeInfo.t_char, 0, null, false );
+ f2.addParameter( TypeInfo.t_char, 0, null, false );
A.addSymbol( f2 );
IParameterizedSymbol foo = table.newParameterizedSymbol("foo");
- foo.setType( ParserSymbolTable.TypeInfo.t_function );
+ foo.setType( TypeInfo.t_function );
compUnit.addSymbol( foo );
LinkedList paramList = new LinkedList();
- ParserSymbolTable.TypeInfo param = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_char, 0, null );
+ TypeInfo param = new TypeInfo( TypeInfo.t_char, 0, null );
paramList.add( param );
look = foo.UnqualifiedFunctionLookup( "f", paramList );
@@ -1183,8 +1183,8 @@
assertTrue( usingF.hasSameParameters( f1 ) );
IParameterizedSymbol bar = table.newParameterizedSymbol( "bar" );
- bar.setType( ParserSymbolTable.TypeInfo.t_function );
- bar.addParameter( ParserSymbolTable.TypeInfo.t_char, 0, null, false );
+ bar.setType( TypeInfo.t_function );
+ bar.addParameter( TypeInfo.t_char, 0, null, false );
compUnit.addSymbol( bar );
look = bar.LookupNestedNameSpecifier( "A" );
@@ -1208,10 +1208,10 @@
newTable();
IContainerSymbol cls = table.newContainerSymbol("class");
- cls.setType( ParserSymbolTable.TypeInfo.t_class );
+ cls.setType( TypeInfo.t_class );
IParameterizedSymbol fn = table.newParameterizedSymbol("function");
- fn.setType( ParserSymbolTable.TypeInfo.t_function );
+ fn.setType( TypeInfo.t_function );
fn.getTypeInfo().addPtrOperator( new PtrOp( PtrOp.t_undef, true, false ) );
//fn.setCVQualifier( ParserSymbolTable.TypeInfo.cvConst );
@@ -1221,7 +1221,7 @@
ISymbol look = fn.Lookup("this");
assertTrue( look != null );
- assertEquals( look.getType(), ParserSymbolTable.TypeInfo.t_type );
+ assertEquals( look.getType(), TypeInfo.t_type );
assertEquals( look.getTypeSymbol(), cls );
assertEquals( ((PtrOp)look.getPtrOperators().getFirst()).getType(), TypeInfo.PtrOp.t_pointer );
assertTrue( ((PtrOp)look.getPtrOperators().getFirst()).isConst() );
@@ -1240,16 +1240,16 @@
newTable();
IContainerSymbol cls = table.newContainerSymbol("class");
- cls.setType( ParserSymbolTable.TypeInfo.t_class );
+ cls.setType( TypeInfo.t_class );
IContainerSymbol enumeration = table.newContainerSymbol("enumeration");
- enumeration.setType( ParserSymbolTable.TypeInfo.t_enumeration );
+ enumeration.setType( TypeInfo.t_enumeration );
table.getCompilationUnit().addSymbol( cls );
cls.addSymbol( enumeration );
ISymbol enumerator = table.newSymbol( "enumerator" );
- enumerator.setType( ParserSymbolTable.TypeInfo.t_enumerator );
+ enumerator.setType( TypeInfo.t_enumerator );
enumeration.addSymbol( enumerator );
ISymbol look = cls.Lookup( "enumerator" );
@@ -1277,17 +1277,17 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol NS = table.newContainerSymbol("NS");
- NS.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ NS.setType( TypeInfo.t_namespace );
compUnit.addSymbol( NS );
IDerivableContainerSymbol T = table.newDerivableContainerSymbol("T");
- T.setType( ParserSymbolTable.TypeInfo.t_class );
+ T.setType( TypeInfo.t_class );
NS.addSymbol( T );
IParameterizedSymbol f = table.newParameterizedSymbol("f");
- f.setType( ParserSymbolTable.TypeInfo.t_function );
+ f.setType( TypeInfo.t_function );
f.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
ISymbol look = NS.Lookup( "T" );
@@ -1302,19 +1302,19 @@
assertEquals( look, T );
ISymbol param = table.newSymbol("parm");
- param.setType( ParserSymbolTable.TypeInfo.t_type );
+ param.setType( TypeInfo.t_type );
param.setTypeSymbol( look );
compUnit.addSymbol( param );
IParameterizedSymbol main = table.newParameterizedSymbol("main");
- main.setType( ParserSymbolTable.TypeInfo.t_function );
+ main.setType( TypeInfo.t_function );
main.setReturnType( table.newSymbol( "", TypeInfo.t_int ) );
compUnit.addSymbol( main );
LinkedList paramList = new LinkedList();
look = main.Lookup( "parm" );
assertEquals( look, param );
- ParserSymbolTable.TypeInfo p = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, look );
+ TypeInfo p = new TypeInfo( TypeInfo.t_type, 0, look );
paramList.add( p );
look = main.UnqualifiedFunctionLookup( "f", paramList );
@@ -1350,18 +1350,18 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IContainerSymbol NS1 = table.newContainerSymbol( "NS1" );
- NS1.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ NS1.setType( TypeInfo.t_namespace );
compUnit.addSymbol( NS1 );
ParserSymbolTable.Declaration f1 = table.new Declaration( "f" );
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
f1.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
- f1.addParameter( ParserSymbolTable.TypeInfo.t_void, 0, new PtrOp( PtrOp.t_pointer ), false );
+ f1.addParameter( TypeInfo.t_void, 0, new PtrOp( PtrOp.t_pointer ), false );
NS1.addSymbol( f1 );
IContainerSymbol NS2 = table.newContainerSymbol( "NS2" );
- NS2.setType( ParserSymbolTable.TypeInfo.t_namespace );
+ NS2.setType( TypeInfo.t_namespace );
compUnit.addSymbol( NS2 );
@@ -1370,17 +1370,17 @@
NS2.addUsingDirective( NS1 );
IDerivableContainerSymbol B = table.newDerivableContainerSymbol( "B" );
- B.setType( ParserSymbolTable.TypeInfo.t_class );
+ B.setType( TypeInfo.t_class );
NS2.addSymbol( B );
IParameterizedSymbol f2 = table.newParameterizedSymbol( "f" );
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
+ f2.setType( TypeInfo.t_function );
f2.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
- f2.addParameter( ParserSymbolTable.TypeInfo.t_void, 0, new PtrOp( PtrOp.t_pointer ), false );
+ f2.addParameter( TypeInfo.t_void, 0, new PtrOp( PtrOp.t_pointer ), false );
NS2.addSymbol( f2 );
IDerivableContainerSymbol A = table.newDerivableContainerSymbol( "A" );
- A.setType( ParserSymbolTable.TypeInfo.t_class );
+ A.setType( TypeInfo.t_class );
look = compUnit.LookupNestedNameSpecifier( "NS2" );
assertEquals( look, NS2 );
@@ -1393,14 +1393,14 @@
look = compUnit.Lookup( "A" );
assertEquals( look, A );
ISymbol a = table.newSymbol( "a" );
- a.setType( ParserSymbolTable.TypeInfo.t_type );
+ a.setType( TypeInfo.t_type );
a.setTypeSymbol( look );
compUnit.addSymbol( a );
LinkedList paramList = new LinkedList();
look = compUnit.Lookup( "a" );
assertEquals( look, a );
- ParserSymbolTable.TypeInfo param = new ParserSymbolTable.TypeInfo( look.getType(), 0, look, new PtrOp( PtrOp.t_reference ), false );
+ TypeInfo param = new TypeInfo( look.getType(), 0, look, new PtrOp( PtrOp.t_reference ), false );
paramList.add( param );
look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
@@ -1433,27 +1433,27 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IDerivableContainerSymbol C = table.newDerivableContainerSymbol( "C" );
- C.setType( ParserSymbolTable.TypeInfo.t_class );
+ C.setType( TypeInfo.t_class );
compUnit.addSymbol(C);
IParameterizedSymbol f1 = table.newParameterizedSymbol("foo");
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
f1.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
- f1.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, null, false );
+ f1.addParameter( TypeInfo.t_int, 0, null, false );
C.addSymbol( f1 );
IParameterizedSymbol f2 = table.newParameterizedSymbol("foo");
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
+ f2.setType( TypeInfo.t_function );
f2.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
- f2.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, null, false );
- f2.addParameter( ParserSymbolTable.TypeInfo.t_char, 0, null, false );
+ f2.addParameter( TypeInfo.t_int, 0, null, false );
+ f2.addParameter( TypeInfo.t_char, 0, null, false );
C.addSymbol( f2 );
IParameterizedSymbol f3 = table.newParameterizedSymbol("foo");
- f3.setType( ParserSymbolTable.TypeInfo.t_function );
+ f3.setType( TypeInfo.t_function );
f3.setReturnType( table.newSymbol( "", TypeInfo.t_void ) );
- f3.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, null, false );
- f3.addParameter( ParserSymbolTable.TypeInfo.t_char, 0, null, false );
+ f3.addParameter( TypeInfo.t_int, 0, null, false );
+ f3.addParameter( TypeInfo.t_char, 0, null, false );
f3.addParameter( C, new PtrOp( PtrOp.t_pointer ), false );
C.addSymbol( f3 );
@@ -1461,7 +1461,7 @@
assertEquals( look, C );
ISymbol c = table.newSymbol("c");
- c.setType( ParserSymbolTable.TypeInfo.t_type );
+ c.setType( TypeInfo.t_type );
c.setTypeSymbol( look );
c.addPtrOperator( new PtrOp( PtrOp.t_pointer, false, false ) );
compUnit.addSymbol( c );
@@ -1472,9 +1472,9 @@
LinkedList paramList = new LinkedList();
- ParserSymbolTable.TypeInfo p1 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_int, 0, null );
- ParserSymbolTable.TypeInfo p2 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_char, 0, null );
- ParserSymbolTable.TypeInfo p3 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, c );
+ TypeInfo p1 = new TypeInfo( TypeInfo.t_int, 0, null );
+ TypeInfo p2 = new TypeInfo( TypeInfo.t_char, 0, null );
+ TypeInfo p3 = new TypeInfo( TypeInfo.t_type, 0, c );
paramList.add( p1 );
look = C.MemberFunctionLookup( "foo", paramList );
@@ -1507,30 +1507,30 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IParameterizedSymbol f1 = table.newParameterizedSymbol("f");
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
- f1.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, null, false );
+ f1.setType( TypeInfo.t_function );
+ f1.addParameter( TypeInfo.t_int, 0, null, false );
compUnit.addSymbol( f1 );
IParameterizedSymbol f2 = table.newParameterizedSymbol("f");
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
- f2.addParameter( ParserSymbolTable.TypeInfo.t_char, 0, null, true );
+ f2.setType( TypeInfo.t_function );
+ f2.addParameter( TypeInfo.t_char, 0, null, true );
compUnit.addSymbol( f2 );
LinkedList paramList = new LinkedList();
- ParserSymbolTable.TypeInfo p1 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_int, 0, null );
+ TypeInfo p1 = new TypeInfo( TypeInfo.t_int, 0, null );
paramList.add( p1 );
ISymbol look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
assertEquals( look, f1 );
paramList.clear();
- ParserSymbolTable.TypeInfo p2 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_char, 0, null );
+ TypeInfo p2 = new TypeInfo( TypeInfo.t_char, 0, null );
paramList.add( p2 );
look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
assertEquals( look, f2 );
paramList.clear();
- ParserSymbolTable.TypeInfo p3 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_bool, 0, null );
+ TypeInfo p3 = new TypeInfo( TypeInfo.t_bool, 0, null );
paramList.add( p3 );
look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
assertEquals( look, f1 );
@@ -1562,47 +1562,47 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IDerivableContainerSymbol A = table.newDerivableContainerSymbol( "A" );
- A.setType( ParserSymbolTable.TypeInfo.t_class );
+ A.setType( TypeInfo.t_class );
compUnit.addSymbol( A );
IDerivableContainerSymbol B = table.newDerivableContainerSymbol( "B" );
- B.setType( ParserSymbolTable.TypeInfo.t_class );
+ B.setType( TypeInfo.t_class );
B.addParent( A );
compUnit.addSymbol( B );
IDerivableContainerSymbol C = table.newDerivableContainerSymbol( "C" );
- C.setType( ParserSymbolTable.TypeInfo.t_class );
+ C.setType( TypeInfo.t_class );
C.addParent( B );
compUnit.addSymbol( C );
IParameterizedSymbol f1 = table.newParameterizedSymbol( "f" );
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
f1.addParameter( A, new PtrOp( PtrOp.t_pointer ), false );
compUnit.addSymbol( f1 );
IParameterizedSymbol f2 = table.newParameterizedSymbol( "f" );
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
+ f2.setType( TypeInfo.t_function );
f2.addParameter( B, new PtrOp( PtrOp.t_pointer ), false );
compUnit.addSymbol( f2 );
ISymbol a = table.newSymbol( "a" );
- a.setType( ParserSymbolTable.TypeInfo.t_type );
+ a.setType( TypeInfo.t_type );
a.setTypeSymbol( A );
a.addPtrOperator( new PtrOp( PtrOp.t_pointer, false, false ) );
ISymbol c = table.newSymbol( "c" );
- c.setType( ParserSymbolTable.TypeInfo.t_type );
+ c.setType( TypeInfo.t_type );
c.setTypeSymbol( C );
c.addPtrOperator( new PtrOp( PtrOp.t_pointer, false, false ) );
LinkedList paramList = new LinkedList();
- ParserSymbolTable.TypeInfo p1 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, a );
+ TypeInfo p1 = new TypeInfo( TypeInfo.t_type, 0, a );
paramList.add( p1 );
ISymbol look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
assertEquals( look, f1 );
paramList.clear();
- ParserSymbolTable.TypeInfo p2 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, c );
+ TypeInfo p2 = new TypeInfo( TypeInfo.t_type, 0, c );
paramList.add( p2 );
look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
assertEquals( look, f2 );
@@ -1634,42 +1634,42 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IDerivableContainerSymbol A = table.newDerivableContainerSymbol( "A" );
- A.setType( ParserSymbolTable.TypeInfo.t_class );
+ A.setType( TypeInfo.t_class );
compUnit.addSymbol( A );
ISymbol B = table.newSymbol( "B" );
- B.setType( ParserSymbolTable.TypeInfo.t_type );
+ B.setType( TypeInfo.t_type );
B.setTypeSymbol( A );
B.addPtrOperator( new PtrOp( PtrOp.t_pointer, false, false ) );
compUnit.addSymbol( B );
IParameterizedSymbol f1 = table.newParameterizedSymbol( "f" );
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
f1.addParameter( A, new PtrOp( PtrOp.t_pointer ), false );
compUnit.addSymbol( f1 );
IParameterizedSymbol f2 = table.newParameterizedSymbol( "f" );
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
+ f2.setType( TypeInfo.t_function );
f2.addParameter( A, null, false );
compUnit.addSymbol( f2 );
ISymbol a = table.newSymbol( "a" );
- a.setType( ParserSymbolTable.TypeInfo.t_type );
+ a.setType( TypeInfo.t_type );
a.setTypeSymbol( A );
compUnit.addSymbol( a );
ISymbol b = table.newSymbol( "b" );
- b.setType( ParserSymbolTable.TypeInfo.t_type );
+ b.setType( TypeInfo.t_type );
b.setTypeSymbol( B );
compUnit.addSymbol( b );
ISymbol array = table.newSymbol( "array" );
- array.setType( ParserSymbolTable.TypeInfo.t_type );
+ array.setType( TypeInfo.t_type );
array.setTypeSymbol( A );
array.addPtrOperator( new PtrOp( PtrOp.t_array, false, false ) );
LinkedList paramList = new LinkedList();
- ParserSymbolTable.TypeInfo p = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, a );
+ TypeInfo p = new TypeInfo( TypeInfo.t_type, 0, a );
paramList.add( p );
ISymbol look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
@@ -1717,31 +1717,31 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IDerivableContainerSymbol A = table.newDerivableContainerSymbol( "A" );
- A.setType( ParserSymbolTable.TypeInfo.t_class );
+ A.setType( TypeInfo.t_class );
compUnit.addSymbol( A );
IDerivableContainerSymbol B = table.newDerivableContainerSymbol( "B" );
- B.setType( ParserSymbolTable.TypeInfo.t_class );
+ B.setType( TypeInfo.t_class );
compUnit.addSymbol( B );
//12.1-1 "Constructors do not have names"
IParameterizedSymbol constructor = table.newParameterizedSymbol("");
- constructor.setType( ParserSymbolTable.TypeInfo.t_function );
+ constructor.setType( TypeInfo.t_function );
constructor.addParameter( A, null, false );
B.addSymbol( constructor );
IParameterizedSymbol f = table.newParameterizedSymbol( "f" );
- f.setType( ParserSymbolTable.TypeInfo.t_function );
+ f.setType( TypeInfo.t_function );
f.addParameter( B, null, false );
compUnit.addSymbol( f );
ISymbol a = table.newSymbol( "a" );
- a.setType( ParserSymbolTable.TypeInfo.t_type );
+ a.setType( TypeInfo.t_type );
a.setTypeSymbol( A );
compUnit.addSymbol( a );
LinkedList paramList = new LinkedList();
- ParserSymbolTable.TypeInfo p = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, a );
+ TypeInfo p = new TypeInfo( TypeInfo.t_type, 0, a );
paramList.add( p );
ISymbol look = compUnit.UnqualifiedFunctionLookup( "f", paramList );
@@ -1775,34 +1775,34 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IParameterizedSymbol f1 = table.newParameterizedSymbol( "f" );
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
- f1.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, new PtrOp( PtrOp.t_pointer, true, false ), false );
- f1.addParameter( ParserSymbolTable.TypeInfo.t_int, ParserSymbolTable.TypeInfo.isShort, null, false );
+ f1.setType( TypeInfo.t_function );
+ f1.addParameter( TypeInfo.t_int, 0, new PtrOp( PtrOp.t_pointer, true, false ), false );
+ f1.addParameter( TypeInfo.t_int, TypeInfo.isShort, null, false );
compUnit.addSymbol( f1 );
IParameterizedSymbol f2 = table.newParameterizedSymbol( "f" );
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
- f2.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, new PtrOp( PtrOp.t_pointer ), false );
- f2.addParameter( ParserSymbolTable.TypeInfo.t_int, 0, null, false );
+ f2.setType( TypeInfo.t_function );
+ f2.addParameter( TypeInfo.t_int, 0, new PtrOp( PtrOp.t_pointer ), false );
+ f2.addParameter( TypeInfo.t_int, 0, null, false );
compUnit.addSymbol( f2 );
ISymbol i = table.newSymbol( "i" );
- i.setType( ParserSymbolTable.TypeInfo.t_int );
+ i.setType( TypeInfo.t_int );
compUnit.addSymbol( i );
ISymbol s = table.newSymbol( "s" );
- s.setType( ParserSymbolTable.TypeInfo.t_int );
- s.getTypeInfo().setBit( true, ParserSymbolTable.TypeInfo.isShort );
+ s.setType( TypeInfo.t_int );
+ s.getTypeInfo().setBit( true, TypeInfo.isShort );
compUnit.addSymbol( s );
IParameterizedSymbol main = table.newParameterizedSymbol( "main" );
- main.setType( ParserSymbolTable.TypeInfo.t_function );
+ main.setType( TypeInfo.t_function );
compUnit.addSymbol( main );
LinkedList params = new LinkedList();
- ParserSymbolTable.TypeInfo p1 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, i, new PtrOp( PtrOp.t_reference ), false );
- ParserSymbolTable.TypeInfo p2 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, s );
+ TypeInfo p1 = new TypeInfo( TypeInfo.t_type, 0, i, new PtrOp( PtrOp.t_reference ), false );
+ TypeInfo p2 = new TypeInfo( TypeInfo.t_type, 0, s );
params.add( p1 );
params.add( p2 );
@@ -1816,14 +1816,14 @@
}
params.clear();
- ParserSymbolTable.TypeInfo p3 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_int, ParserSymbolTable.TypeInfo.isLong, null );
+ TypeInfo p3 = new TypeInfo( TypeInfo.t_int, TypeInfo.isLong, null );
params.add( p1 );
params.add( p3 );
look = main.UnqualifiedFunctionLookup( "f", params );
assertEquals( look, f2 );
params.clear();
- ParserSymbolTable.TypeInfo p4 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_char, 0, null );
+ TypeInfo p4 = new TypeInfo( TypeInfo.t_char, 0, null );
params.add( p1 );
params.add( p4 );
look = main.UnqualifiedFunctionLookup( "f", params );
@@ -1868,34 +1868,34 @@
IContainerSymbol compUnit = table.getCompilationUnit();
IDerivableContainerSymbol B = table.newDerivableContainerSymbol( "B" );
- B.setType( ParserSymbolTable.TypeInfo.t_class );
+ B.setType( TypeInfo.t_class );
compUnit.addSymbol( B );
IDerivableContainerSymbol A = table.newDerivableContainerSymbol( "A" );
- A.setType( ParserSymbolTable.TypeInfo.t_class );
+ A.setType( TypeInfo.t_class );
compUnit.addSymbol( A );
IParameterizedSymbol constructA = table.newParameterizedSymbol( "" );
- constructA.setType( ParserSymbolTable.TypeInfo.t_function );
+ constructA.setType( TypeInfo.t_function );
constructA.addParameter( B, new PtrOp( PtrOp.t_reference ), false );
A.addSymbol( constructA );
IParameterizedSymbol operator = table.newParameterizedSymbol( "operator A" );
- operator.setType( ParserSymbolTable.TypeInfo.t_function );
+ operator.setType( TypeInfo.t_function );
B.addSymbol( operator );
IParameterizedSymbol f1 = table.newParameterizedSymbol( "f" );
- f1.setType( ParserSymbolTable.TypeInfo.t_function );
+ f1.setType( TypeInfo.t_function );
f1.addParameter( A, null, false );
compUnit.addSymbol( f1 );
ISymbol b = table.newSymbol( "b" );
- b.setType( ParserSymbolTable.TypeInfo.t_type );
+ b.setType( TypeInfo.t_type );
b.setTypeSymbol( B );
LinkedList params = new LinkedList();
- ParserSymbolTable.TypeInfo p1 = new ParserSymbolTable.TypeInfo( ParserSymbolTable.TypeInfo.t_type, 0, b );
+ TypeInfo p1 = new TypeInfo( TypeInfo.t_type, 0, b );
params.add( p1 );
ISymbol look = null;
@@ -1908,16 +1908,16 @@
}
IDerivableContainerSymbol C = table.newDerivableContainerSymbol("C");
- C.setType( ParserSymbolTable.TypeInfo.t_class );
+ C.setType( TypeInfo.t_class );
compUnit.addSymbol( C );
IParameterizedSymbol constructC = table.newParameterizedSymbol("");
- constructC.setType( ParserSymbolTable.TypeInfo.t_function );
+ constructC.setType( TypeInfo.t_function );
constructC.addParameter( B, new PtrOp( PtrOp.t_reference ), false );
C.addSymbol( constructC );
IParameterizedSymbol f2 = table.newParameterizedSymbol( "f" );
- f2.setType( ParserSymbolTable.TypeInfo.t_function );
+ f2.setType( TypeInfo.t_function );
f2.addParameter( C, null, false );
compUnit.addSymbol( f2 );
@@ -1929,7 +1929,7 @@
}
IParameterizedSymbol f3 = table.newParameterizedSymbol( "f" );
- f3.setType( ParserSymbolTable.TypeInfo.t_function );
+ f3.setType( TypeInfo.t_function );
f3.addParameter( B, null, false );
compUnit.addSymbol( f3 );
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.83
diff -u -r1.83 ChangeLog
--- parser/ChangeLog 22 Jul 2003 00:44:18 -0000 1.83
+++ parser/ChangeLog 22 Jul 2003 21:55:20 -0000
@@ -1,3 +1,6 @@
+2003-07-22 John Camelon
+ Added in preliminary support for Field/Variable w/cross references on their types.
+
2003-07-21 John Camelon
Addded in support for BaseSpecifier & class/namespace reference callbacks upon those.
Index: parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java,v
retrieving revision 1.4
diff -u -r1.4 IASTEnumerator.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java 9 Jul 2003 00:47:42 -0000 1.4
+++ parser/org/eclipse/cdt/core/parser/ast/IASTEnumerator.java 22 Jul 2003 21:55:20 -0000
@@ -10,11 +10,13 @@
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+
/**
* @author jcamelon
*
*/
-public interface IASTEnumerator extends IASTOffsetableNamedElement {
+public interface IASTEnumerator extends IASTOffsetableNamedElement, ISourceElementCallbackDelegate {
public IASTEnumerationSpecifier getOwnerEnumerationSpecifier();
public IASTExpression getInitialValue();
Index: parser/org/eclipse/cdt/core/parser/ast/IASTEnumeratorReference.java
===================================================================
RCS file: parser/org/eclipse/cdt/core/parser/ast/IASTEnumeratorReference.java
diff -N parser/org/eclipse/cdt/core/parser/ast/IASTEnumeratorReference.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/core/parser/ast/IASTEnumeratorReference.java 22 Jul 2003 21:55:20 -0000
@@ -0,0 +1,19 @@
+/**********************************************************************
+ * 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;
+
+/**
+ * @author jcamelon
+ *
+ */
+public interface IASTEnumeratorReference extends IASTReference
+{
+}
Index: parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java,v
retrieving revision 1.15
diff -u -r1.15 IASTFactory.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java 22 Jul 2003 00:23:56 -0000 1.15
+++ parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java 22 Jul 2003 21:55:21 -0000
@@ -116,13 +116,13 @@
ITokenDuple duple,
IASTExpression expressionList);
public IASTSimpleTypeSpecifier createSimpleTypeSpecifier(
+ IASTScope scope,
IASTSimpleTypeSpecifier.Type kind,
ITokenDuple typeName,
boolean isShort,
boolean isLong,
boolean isSigned,
- boolean isUnsigned,
- boolean isTypename);
+ boolean isUnsigned, boolean isTypename) throws ASTSemanticException;
public IASTFunction createFunction(
IASTScope scope,
String name,
Index: parser/org/eclipse/cdt/core/parser/ast/IASTReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTReference.java,v
retrieving revision 1.1
diff -u -r1.1 IASTReference.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTReference.java 18 Jul 2003 16:39:22 -0000 1.1
+++ parser/org/eclipse/cdt/core/parser/ast/IASTReference.java 22 Jul 2003 21:55:22 -0000
@@ -21,6 +21,6 @@
public int getOffset();
public String getName();
- public IASTScopedElement getReferencedElement();
+ public ISourceElementCallbackDelegate getReferencedElement();
}
Index: parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java,v
retrieving revision 1.2
diff -u -r1.2 IASTSimpleTypeSpecifier.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java 17 Jul 2003 20:15:13 -0000 1.2
+++ parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java 22 Jul 2003 21:55:22 -0000
@@ -48,5 +48,7 @@
public boolean isShort();
public boolean isSigned();
public boolean isUnsigned();
- public boolean isTypename();
+ public boolean isTypename();
+
+ public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException;
}
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.75
diff -u -r1.75 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 22 Jul 2003 14:50:13 -0000 1.75
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 22 Jul 2003 21:55:31 -0000
@@ -428,7 +428,7 @@
try
{
- List parms = templateParameterList();
+ List parms = templateParameterList(scope);
consume(IToken.tGT);
IASTTemplateDeclaration templateDecl = astFactory.createTemplateDeclaration( scope, parms, exported, firstToken.getOffset() );
templateDecl.enterScope( requestor );
@@ -466,7 +466,7 @@
* @param templateDeclaration Callback's templateDeclaration which serves as a scope to this list.
* @throws Backtrack request for a backtrack
*/
- protected List templateParameterList()
+ protected List templateParameterList(IASTScope scope)
throws Backtrack
{
// if we have gotten this far then we have a true template-declaration
@@ -518,7 +518,7 @@
IToken kind = consume(IToken.t_template);
consume(IToken.tLT);
- List subResult = templateParameterList();
+ List subResult = templateParameterList(scope);
consume(IToken.tGT);
consume(IToken.t_class);
IToken optionalId = null;
@@ -551,7 +551,7 @@
else
{
ParameterCollection c = new ParameterCollection();
- parameterDeclaration(c);
+ parameterDeclaration(c, scope);
DeclarationWrapper wrapper =
(DeclarationWrapper)c.getParameters().get(0);
Declarator declarator =
@@ -764,16 +764,21 @@
new DeclarationWrapper(scope, LA(1).getOffset(), ownerTemplate);
declSpecifierSeq(false, tryConstructor, sdw);
- if (sdw.getTypeSpecifier() == null )
- sdw.setTypeSpecifier(
- astFactory.createSimpleTypeSpecifier(
- sdw.getSimpleType(),
- sdw.getName(),
- sdw.isShort(),
- sdw.isLong(),
- sdw.isSigned(),
- sdw.isUnsigned(),
- sdw.isTypeNamed()));
+ try
+ {
+ if (sdw.getTypeSpecifier() == null )
+ sdw.setTypeSpecifier(
+ astFactory.createSimpleTypeSpecifier(
+ scope,
+ sdw.getSimpleType(),
+ sdw.getName(),
+ sdw.isShort(),
+ sdw.isLong(),
+ sdw.isSigned(),
+ sdw.isUnsigned(), sdw.isTypeNamed()));
+ } catch( ASTSemanticException se )
+ {
+ }
Declarator declarator = null;
if (LT(1) != IToken.tSEMI)
@@ -947,7 +952,7 @@
* @throws Backtrack request a backtrack
*/
protected void parameterDeclaration(
- IParameterCollection collection)
+ IParameterCollection collection, IASTScope scope)
throws Backtrack
{
IToken current = LA(1);
@@ -955,18 +960,23 @@
DeclarationWrapper sdw =
new DeclarationWrapper(null, current.getOffset(), null);
declSpecifierSeq(true, false, sdw);
- if (sdw.getTypeSpecifier() == null
- && sdw.getSimpleType()
- != IASTSimpleTypeSpecifier.Type.UNSPECIFIED)
- sdw.setTypeSpecifier(
- astFactory.createSimpleTypeSpecifier(
- sdw.getSimpleType(),
- sdw.getName(),
- sdw.isShort(),
- sdw.isLong(),
- sdw.isSigned(),
- sdw.isUnsigned(),
- sdw.isTypeNamed()));
+ try
+ {
+ if (sdw.getTypeSpecifier() == null
+ && sdw.getSimpleType()
+ != IASTSimpleTypeSpecifier.Type.UNSPECIFIED)
+ sdw.setTypeSpecifier(
+ astFactory.createSimpleTypeSpecifier(
+ scope,
+ sdw.getSimpleType(),
+ sdw.getName(),
+ sdw.isShort(),
+ sdw.isLong(),
+ sdw.isSigned(),
+ sdw.isUnsigned(), sdw.isTypeNamed()));
+ }
+ catch( ASTSemanticException se ) { }
+
if (LT(1) != IToken.tSEMI)
try
{
@@ -1618,7 +1628,7 @@
DeclarationWrapper sdw)
throws Backtrack
{
- Declarator d = declarator(sdw);
+ Declarator d = declarator(sdw, sdw.getScope());
// handle = initializerClause
if (LT(1) == IToken.tASSIGN)
{
@@ -1713,7 +1723,7 @@
* @throws Backtrack request a backtrack
*/
protected Declarator declarator(
- IDeclaratorOwner owner)
+ IDeclaratorOwner owner, IASTScope scope)
throws Backtrack
{
Declarator d = null;
@@ -1736,7 +1746,7 @@
if (LT(1) == IToken.tLPAREN)
{
consume();
- declarator(d);
+ declarator(d, scope);
consume(IToken.tRPAREN);
}
else if (LT(1) == IToken.t_operator)
@@ -1806,7 +1816,7 @@
default :
if (seenParameter)
throw backtrack;
- parameterDeclaration(d);
+ parameterDeclaration(d, scope);
seenParameter = true;
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java 22 Jul 2003 21:55:31 -0000
@@ -0,0 +1,70 @@
+/**********************************************************************
+ * 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;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class ASTAbstractDeclaration implements IASTAbstractDeclaration
+{
+ private final boolean isConst;
+ private final IASTTypeSpecifier typeSpecifier;
+ private final List pointerOperators;
+ private final List arrayModifiers;
+ /**
+ * @param isConst
+ * @param typeSpecifier
+ * @param pointerOperators
+ * @param arrayModifiers
+ */
+ public ASTAbstractDeclaration(boolean isConst, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers)
+ {
+ this.isConst = isConst;
+ this.typeSpecifier = typeSpecifier;
+ this.pointerOperators = pointerOperators;
+ this.arrayModifiers = arrayModifiers;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#isConst()
+ */
+ public boolean isConst()
+ {
+ return isConst;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getTypeSpecifier()
+ */
+ public IASTTypeSpecifier getTypeSpecifier()
+ {
+ return typeSpecifier;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getPointerOperators()
+ */
+ public Iterator getPointerOperators()
+ {
+ return pointerOperators.iterator();
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getArrayModifiers()
+ */
+ public Iterator getArrayModifiers()
+ {
+ return arrayModifiers.iterator();
+ }
+}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java,v
retrieving revision 1.1
diff -u -r1.1 ASTClassReference.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java 22 Jul 2003 00:23:56 -0000 1.1
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java 22 Jul 2003 21:55:31 -0000
@@ -10,10 +10,10 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.complete;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
-import org.eclipse.cdt.core.parser.ast.IASTScopedElement;
/**
* @author jcamelon
@@ -37,7 +37,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
*/
- public IASTScopedElement getReferencedElement()
+ public ISourceElementCallbackDelegate getReferencedElement()
{
return reference;
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java 22 Jul 2003 21:55:32 -0000
@@ -0,0 +1,59 @@
+/**********************************************************************
+ * 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.List;
+
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
+import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
+import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IASTField;
+import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
+import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class ASTField extends ASTVariable implements IASTField
+{
+ private final ASTAccessVisibility visibility;
+ /**
+ * @param newSymbol
+ * @param abstractDeclaration
+ * @param initializerClause
+ * @param bitfieldExpression
+ * @param startingOffset
+ * @param nameOffset
+ * @param references
+ * @param visibility
+ */
+ public ASTField(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int nameOffset, List references, ASTAccessVisibility visibility)
+ {
+ super( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, nameOffset, references );
+ this.visibility = visibility;
+
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTMember#getVisiblity()
+ */
+ public ASTAccessVisibility getVisiblity()
+ {
+ return visibility;
+ }
+
+ public void acceptElement(ISourceElementRequestor requestor)
+ {
+ requestor.acceptField(this);
+ referenceDelegate.processReferences(requestor);
+ }
+}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java,v
retrieving revision 1.1
diff -u -r1.1 ASTNamespaceReference.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java 22 Jul 2003 00:23:56 -0000 1.1
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java 22 Jul 2003 21:55:32 -0000
@@ -10,10 +10,10 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.complete;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
-import org.eclipse.cdt.core.parser.ast.IASTScopedElement;
/**
* @author jcamelon
@@ -39,7 +39,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
*/
- public IASTScopedElement getReferencedElement()
+ public ISourceElementCallbackDelegate getReferencedElement()
{
return reference;
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java 22 Jul 2003 21:55:32 -0000
@@ -0,0 +1,133 @@
+/**********************************************************************
+ * 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.List;
+
+import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
+import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
+import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class ASTSimpleTypeSpecifier implements IASTSimpleTypeSpecifier
+{
+ private final List refs;
+ private ISymbol symbol;
+ private final boolean isTypename;
+ private final String name;
+
+ /**
+ * @param s
+ * @param b
+ * @param string
+ */
+ public ASTSimpleTypeSpecifier(ISymbol s, boolean b, String string, List references )
+ {
+ this.symbol = s;
+ this.isTypename = b;
+ this.name = string;
+ this.refs = references;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#getType()
+ */
+ public Type getType()
+ {
+ if( symbol.getType() == TypeInfo.t_int )
+ return IASTSimpleTypeSpecifier.Type.INT;
+ if( symbol.getType() == TypeInfo.t_double )
+ return IASTSimpleTypeSpecifier.Type.DOUBLE;
+ if( symbol.getType() == TypeInfo.t_float )
+ return IASTSimpleTypeSpecifier.Type.FLOAT;
+ if( symbol.getType() == TypeInfo.t_bool )
+ return IASTSimpleTypeSpecifier.Type.BOOL;
+ if( symbol.getType() == TypeInfo.t_type )
+ return IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME;
+ if( symbol.getType() == TypeInfo.t_char )
+ return IASTSimpleTypeSpecifier.Type.CHAR;
+ if( symbol.getType() == TypeInfo.t_void )
+ return IASTSimpleTypeSpecifier.Type.VOID;
+ if( symbol.getType() == TypeInfo.t_wchar_t)
+ return IASTSimpleTypeSpecifier.Type.WCHAR_T;
+
+ return IASTSimpleTypeSpecifier.Type.UNSPECIFIED;
+
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#getTypename()
+ */
+ public String getTypename()
+ {
+ return name;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#isLong()
+ */
+ public boolean isLong()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isLong );
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#isShort()
+ */
+ public boolean isShort()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isShort );
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#isSigned()
+ */
+ public boolean isSigned()
+ {
+ return ! symbol.getTypeInfo().checkBit( TypeInfo.isUnsigned);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#isUnsigned()
+ */
+ public boolean isUnsigned()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isUnsigned );
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#isTypename()
+ */
+ public boolean isTypename()
+ {
+ return isTypename;
+ }
+ /**
+ * @return
+ */
+ public ISymbol getSymbol()
+ {
+ return symbol;
+ }
+
+ public List getReferences()
+ {
+ return refs;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#getTypeSpecifier()
+ */
+ public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException
+ {
+ return (IASTTypeSpecifier)getSymbol().getTypeSymbol().getASTExtension().getPrimaryDeclaration();
+ }
+
+}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java 22 Jul 2003 21:55:32 -0000
@@ -0,0 +1,204 @@
+/**********************************************************************
+ * 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.List;
+
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
+import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
+import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
+import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
+import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
+import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class ASTVariable extends ASTSymbol implements IASTVariable
+{
+ protected final ASTReferenceStore referenceDelegate;
+ private final ASTQualifiedNamedElement qualifiedName;
+ private NamedOffsets offsets = new NamedOffsets();
+ private final IASTExpression bitfieldExpression;
+ private final IASTInitializerClause initializerClause;
+ private final IASTAbstractDeclaration abstractDeclaration;
+ /**
+ * @param newSymbol
+ * @param abstractDeclaration
+ * @param initializerClause
+ * @param bitfieldExpression
+ * @param startingOffset
+ * @param nameOffset
+ * @param references
+ */
+ public ASTVariable(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int nameOffset, List references)
+ {
+ super( newSymbol );
+ this.abstractDeclaration = abstractDeclaration;
+ this.initializerClause = initializerClause;
+ this.bitfieldExpression = bitfieldExpression;
+ setStartingOffset( startingOffset );
+ setNameOffset( nameOffset );
+ referenceDelegate = new ASTReferenceStore( references );
+ qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), newSymbol.getName() );
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isAuto()
+ */
+ public boolean isAuto()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isAuto );
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isRegister()
+ */
+ public boolean isRegister()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isRegister);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isStatic()
+ */
+ public boolean isStatic()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isStatic);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isExtern()
+ */
+ public boolean isExtern()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isExtern );
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isMutable()
+ */
+ public boolean isMutable()
+ {
+ return symbol.getTypeInfo().checkBit( TypeInfo.isMutable);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#getAbstractDeclaration()
+ */
+ public IASTAbstractDeclaration getAbstractDeclaration()
+ {
+ return abstractDeclaration;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()
+ */
+ public String getName()
+ {
+ return getSymbol().getName();
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#getInitializerClause()
+ */
+ public IASTInitializerClause getInitializerClause()
+ {
+ return initializerClause;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isBitfield()
+ */
+ public boolean isBitfield()
+ {
+ return ( bitfieldExpression != null );
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTVariable#getBitfieldExpression()
+ */
+ public IASTExpression getBitfieldExpression()
+ {
+ return bitfieldExpression;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset()
+ */
+ public int getNameOffset()
+ {
+ return offsets.getNameOffset();
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int)
+ */
+ public void setNameOffset(int o)
+ {
+ offsets.setNameOffset(o);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName()
+ */
+ public String[] getFullyQualifiedName()
+ {
+ return qualifiedName.getFullyQualifiedName();
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTScopedElement#getOwnerScope()
+ */
+ public IASTScope getOwnerScope()
+ {
+ return (IASTScope)getSymbol().getContainingSymbol().getASTExtension().getPrimaryDeclaration();
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor)
+ {
+ requestor.acceptVariable(this);
+ referenceDelegate.processReferences(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)
+ {
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
+ */
+ public void setStartingOffset(int o)
+ {
+ offsets.setStartingOffset(o);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
+ */
+ public void setEndingOffset(int o)
+ {
+ offsets.setEndingOffset(o);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingOffset()
+ */
+ public int getStartingOffset()
+ {
+ return offsets.getStartingOffset();
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getEndingOffset()
+ */
+ public int getEndingOffset()
+ {
+ return offsets.getEndingOffset();
+ }
+}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java,v
retrieving revision 1.3
diff -u -r1.3 CompleteParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java 22 Jul 2003 00:23:56 -0000 1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java 22 Jul 2003 21:55:34 -0000
@@ -58,6 +58,7 @@
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter.ParamKind;
+import org.eclipse.cdt.internal.core.parser.ast.ASTAbstractDeclaration;
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.internal.core.parser.pst.ForewardDeclaredSymbolExtension;
@@ -69,6 +70,7 @@
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException;
import org.eclipse.cdt.internal.core.parser.pst.StandardSymbolExtension;
+import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension.ExtensionException;
/**
@@ -206,12 +208,12 @@
if( namespaceSymbol != null )
{
- if( namespaceSymbol.getType() != ParserSymbolTable.TypeInfo.t_namespace )
+ if( namespaceSymbol.getType() != TypeInfo.t_namespace )
throw new ASTSemanticException();
}
else
{
- namespaceSymbol = pst.newContainerSymbol( identifier, ParserSymbolTable.TypeInfo.t_namespace );
+ namespaceSymbol = pst.newContainerSymbol( identifier, TypeInfo.t_namespace );
try
{
pstScope.addSymbol( namespaceSymbol );
@@ -304,14 +306,14 @@
int nameOffset) throws ASTSemanticException
{
IContainerSymbol containerSymbol = scopeToSymbol(scope);
- ParserSymbolTable.TypeInfo.eType pstType = null;
+ TypeInfo.eType pstType = null;
if( kind == ASTClassKind.CLASS )
- pstType = ParserSymbolTable.TypeInfo.t_class;
+ pstType = TypeInfo.t_class;
else if( kind == ASTClassKind.STRUCT )
- pstType = ParserSymbolTable.TypeInfo.t_struct;
+ pstType = TypeInfo.t_struct;
else if( kind == ASTClassKind.UNION )
- pstType = ParserSymbolTable.TypeInfo.t_union;
+ pstType = TypeInfo.t_union;
else
throw new ASTSemanticException();
@@ -384,16 +386,18 @@
*/
private IASTReference createReference(ISymbol symbol, String string, int offset ) throws ASTSemanticException
{
- if( symbol.getType() == ParserSymbolTable.TypeInfo.t_namespace )
+ if( symbol.getType() == TypeInfo.t_namespace )
{
return new ASTNamespaceReference( offset, string, (IASTNamespaceDefinition)symbol.getASTExtension().getPrimaryDeclaration());
}
- else if( symbol.getType() == ParserSymbolTable.TypeInfo.t_class ||
- symbol.getType() == ParserSymbolTable.TypeInfo.t_struct ||
- symbol.getType() == ParserSymbolTable.TypeInfo.t_union )
+ else if( symbol.getType() == TypeInfo.t_class ||
+ symbol.getType() == TypeInfo.t_struct ||
+ symbol.getType() == TypeInfo.t_union )
{
return new ASTClassReference( offset, string, (IASTClassSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
}
+// else if( symbol.getType() == ParserSymbolTable.TypeInfo.t_enumeration )
+// return new
throw new ASTSemanticException();
}
@@ -498,16 +502,93 @@
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createSimpleTypeSpecifier(org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type, org.eclipse.cdt.core.parser.ITokenDuple, boolean, boolean, boolean, boolean, boolean)
*/
public IASTSimpleTypeSpecifier createSimpleTypeSpecifier(
+ IASTScope scope,
Type kind,
ITokenDuple typeName,
boolean isShort,
boolean isLong,
boolean isSigned,
- boolean isUnsigned,
- boolean isTypename)
+ boolean isUnsigned, boolean isTypename) throws ASTSemanticException
{
- // TODO Auto-generated method stub
- return null;
+ TypeInfo.eType type = null;
+
+ if( kind == IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME )
+ {
+ type = TypeInfo.t_type;
+ }
+ else if( kind == IASTSimpleTypeSpecifier.Type.BOOL )
+ {
+ type = TypeInfo.t_bool;
+ }
+ else if( kind == IASTSimpleTypeSpecifier.Type.CHAR )
+ {
+ type = TypeInfo.t_char;
+ }
+ else if( kind == IASTSimpleTypeSpecifier.Type.DOUBLE )
+ {
+ type = TypeInfo.t_double;
+ }
+ else if( kind == IASTSimpleTypeSpecifier.Type.FLOAT )
+ {
+ type = TypeInfo.t_double;
+ }
+ else if( kind == IASTSimpleTypeSpecifier.Type.INT )
+ {
+ type = TypeInfo.t_int;
+ }
+ else if( kind == IASTSimpleTypeSpecifier.Type.VOID )
+ {
+ type = TypeInfo.t_void;
+ }
+ else if( kind == IASTSimpleTypeSpecifier.Type.WCHAR_T)
+ {
+ type = TypeInfo.t_wchar_t;
+ }
+
+ List references = new ArrayList();
+ ISymbol s = pst.newSymbol( "", type );
+ if( kind == IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME )
+ {
+ // lookup the duple
+ Iterator i = typeName.iterator();
+ IToken first = typeName.getFirstToken();
+
+ IContainerSymbol typeSymbol = null;
+ if( first.getType() == IToken.tCOLONCOLON )
+ {
+ typeSymbol = pst.getCompilationUnit();
+ i.next(); // waste this token
+ }
+ else
+ {
+ typeSymbol = scopeToSymbol( scope );
+ }
+
+ while( i.hasNext() )
+ {
+ IToken current = (IToken)i.next();
+ if( current.getType() == IToken.tCOLONCOLON ) continue;
+
+ try
+ {
+ typeSymbol = typeSymbol.LookupNestedNameSpecifier( current.getImage());
+ references.add( createReference( typeSymbol, current.getImage(), current.getOffset() ));
+ }
+ catch (ParserSymbolTableException e)
+ {
+ throw new ASTSemanticException();
+ }
+ }
+ s.setTypeSymbol( typeSymbol );
+ }
+
+
+ s.getTypeInfo().setBit( isLong, TypeInfo.isLong );
+ s.getTypeInfo().setBit( isShort, TypeInfo.isShort);
+ s.getTypeInfo().setBit( isUnsigned, TypeInfo.isUnsigned );
+
+ return new ASTSimpleTypeSpecifier( s, false, typeName.toString(), references );
+
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createFunction(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, java.util.List, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification, boolean, boolean, boolean, int, int, org.eclipse.cdt.core.parser.ast.IASTTemplate)
@@ -537,8 +618,7 @@
List pointerOperators,
List arrayModifiers)
{
- // TODO Auto-generated method stub
- return null;
+ return new ASTAbstractDeclaration( isConst, typeSpecifier, pointerOperators, arrayModifiers );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createMethod(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, java.util.List, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification, boolean, boolean, boolean, int, int, org.eclipse.cdt.core.parser.ast.IASTTemplate, boolean, boolean, boolean, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility)
@@ -584,8 +664,59 @@
int startingOffset,
int nameOffset)
{
- // TODO Auto-generated method stub
- return null;
+ List references = new ArrayList();
+ ISymbol newSymbol = cloneSimpleTypeSymbol(scope, name, abstractDeclaration, references);
+ setSymbolBits(
+ isAuto,
+ abstractDeclaration,
+ isMutable,
+ isExtern,
+ isRegister,
+ isStatic,
+ newSymbol);
+
+ return new ASTVariable( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, nameOffset, references );
+ }
+ private void setSymbolBits(
+ boolean isAuto,
+ IASTAbstractDeclaration abstractDeclaration,
+ boolean isMutable,
+ boolean isExtern,
+ boolean isRegister,
+ boolean isStatic,
+ ISymbol newSymbol)
+ {
+ newSymbol.getTypeInfo().setBit( isMutable, TypeInfo.isMutable );
+ newSymbol.getTypeInfo().setBit( isAuto, TypeInfo.isAuto );
+ newSymbol.getTypeInfo().setBit( isExtern, TypeInfo.isExplicit );
+ newSymbol.getTypeInfo().setBit( isRegister, TypeInfo.isRegister );
+ newSymbol.getTypeInfo().setBit( isStatic, TypeInfo.isStatic );
+ newSymbol.getTypeInfo().setBit( abstractDeclaration.isConst(), TypeInfo.isConst );
+ }
+ private ISymbol cloneSimpleTypeSymbol(
+ IASTScope scope,
+ String name,
+ IASTAbstractDeclaration abstractDeclaration,
+ List references)
+ {
+ ISymbol newSymbol = null;
+ if( abstractDeclaration.getTypeSpecifier() instanceof ASTSimpleTypeSpecifier )
+ {
+ ISymbol symbolToBeCloned = ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getSymbol();
+ newSymbol = (ISymbol)symbolToBeCloned.clone();
+ newSymbol.setName( name );
+ IContainerSymbol containerSymbol = scopeToSymbol(scope);
+ try
+ {
+ containerSymbol.addSymbol( newSymbol );
+ }
+ catch (ParserSymbolTableException e)
+ {
+ // TODO Auto-generated catch block
+ }
+ references.addAll( ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getReferences() );
+ }
+ return newSymbol;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createField(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean, int, int, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility)
@@ -605,8 +736,20 @@
int nameOffset,
ASTAccessVisibility visibility)
{
- // TODO Auto-generated method stub
- return null;
+ List references = new ArrayList();
+ ISymbol newSymbol = cloneSimpleTypeSymbol(scope, name, abstractDeclaration, references);
+ setSymbolBits(
+ isAuto,
+ abstractDeclaration,
+ isMutable,
+ isExtern,
+ isRegister,
+ isStatic,
+ newSymbol);
+
+ return new ASTField( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, nameOffset, references, visibility );
+
+
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createParameterDeclaration(boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTInitializerClause)
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractDeclaration.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractDeclaration.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractDeclaration.java 17 Jul 2003 20:15:13 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,70 +0,0 @@
-/**********************************************************************
- * 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.ast.IASTAbstractDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTAbstractDeclaration implements IASTAbstractDeclaration
-{
- private final boolean isConst;
- private final IASTTypeSpecifier typeSpecifier;
- private final List pointerOperators;
- private final List arrayModifiers;
- /**
- * @param isConst
- * @param typeSpecifier
- * @param pointerOperators
- * @param arrayModifiers
- */
- public ASTAbstractDeclaration(boolean isConst, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers)
- {
- this.isConst = isConst;
- this.typeSpecifier = typeSpecifier;
- this.pointerOperators = pointerOperators;
- this.arrayModifiers = arrayModifiers;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#isConst()
- */
- public boolean isConst()
- {
- return isConst;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getTypeSpecifier()
- */
- public IASTTypeSpecifier getTypeSpecifier()
- {
- return typeSpecifier;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getPointerOperators()
- */
- public Iterator getPointerOperators()
- {
- return pointerOperators.iterator();
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getArrayModifiers()
- */
- public Iterator getArrayModifiers()
- {
- return arrayModifiers.iterator();
- }
-}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java,v
retrieving revision 1.5
diff -u -r1.5 ASTEnumerator.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java 21 Jul 2003 17:29:54 -0000 1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java 22 Jul 2003 21:55:34 -0000
@@ -10,6 +10,7 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
@@ -106,5 +107,23 @@
public IASTExpression getInitialValue()
{
return initialValue;
+ }
+ /* (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)
+ {
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java,v
retrieving revision 1.3
diff -u -r1.3 ASTSimpleTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java 17 Jul 2003 20:15:13 -0000 1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java 22 Jul 2003 21:55:35 -0000
@@ -14,7 +14,9 @@
import java.util.Map;
import org.eclipse.cdt.core.parser.ITokenDuple;
+import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
/**
* @author jcamelon
@@ -149,5 +151,13 @@
public boolean isTypename()
{
return isTypename;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#getTypeSpecifier()
+ */
+ public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException
+ {
+ throw new ASTNotImplementedException();
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java,v
retrieving revision 1.15
diff -u -r1.15 QuickParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java 22 Jul 2003 00:23:56 -0000 1.15
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java 22 Jul 2003 21:55:37 -0000
@@ -55,6 +55,7 @@
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
+import org.eclipse.cdt.internal.core.parser.ast.*;
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier;
@@ -202,7 +203,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createSimpleTypeSpecifier(org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.SimpleType, org.eclipse.cdt.core.parser.ITokenDuple)
*/
- public IASTSimpleTypeSpecifier createSimpleTypeSpecifier(Type kind, ITokenDuple typeName, boolean isShort, boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename )
+ public IASTSimpleTypeSpecifier createSimpleTypeSpecifier(IASTScope scope, Type kind, ITokenDuple typeName, boolean isShort, boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename )
{
return new ASTSimpleTypeSpecifier( kind, typeName, isShort, isLong, isSigned, isUnsigned, isTypename );
}
Index: parser/org/eclipse/cdt/internal/core/parser/pst/ForewardDeclaredSymbolExtension.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ForewardDeclaredSymbolExtension.java,v
retrieving revision 1.1
diff -u -r1.1 ForewardDeclaredSymbolExtension.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/ForewardDeclaredSymbolExtension.java 21 Jul 2003 17:29:54 -0000 1.1
+++ parser/org/eclipse/cdt/internal/core/parser/pst/ForewardDeclaredSymbolExtension.java 22 Jul 2003 21:55:37 -0000
@@ -14,6 +14,7 @@
import java.util.NoSuchElementException;
import org.eclipse.cdt.internal.core.parser.ast.complete.ASTSymbol;
+import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension.ExtensionException;
/**
* @author jcamelon
Index: parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java,v
retrieving revision 1.2
diff -u -r1.2 IContainerSymbol.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java 13 Jun 2003 15:01:22 -0000 1.2
+++ parser/org/eclipse/cdt/internal/core/parser/pst/IContainerSymbol.java 22 Jul 2003 21:55:37 -0000
@@ -21,7 +21,6 @@
import java.util.Map;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TemplateInstance;
-import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TypeInfo;
/**
* @author aniefer
Index: parser/org/eclipse/cdt/internal/core/parser/pst/IParameterizedSymbol.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/IParameterizedSymbol.java,v
retrieving revision 1.2
diff -u -r1.2 IParameterizedSymbol.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/IParameterizedSymbol.java 13 Jun 2003 15:01:22 -0000 1.2
+++ parser/org/eclipse/cdt/internal/core/parser/pst/IParameterizedSymbol.java 22 Jul 2003 21:55:38 -0000
@@ -19,7 +19,6 @@
import java.util.HashMap;
import java.util.LinkedList;
-import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TypeInfo;
/**
* @author aniefer
Index: parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java,v
retrieving revision 1.4
diff -u -r1.4 ISymbol.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java 21 Jul 2003 17:29:54 -0000 1.4
+++ parser/org/eclipse/cdt/internal/core/parser/pst/ISymbol.java 22 Jul 2003 21:55:38 -0000
@@ -14,12 +14,11 @@
import java.util.LinkedList;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TemplateInstance;
-import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TypeInfo;
/**
* @author jcamelon
*
*/
-public interface ISymbol {
+public interface ISymbol extends Cloneable {
public ParserSymbolTable getSymbolTable();
@@ -78,4 +77,9 @@
}
*/
public int getDepth();
+
+ /**
+ * @param name
+ */
+ public void setName(String name);
}
Index: parser/org/eclipse/cdt/internal/core/parser/pst/NamespaceSymbolExtension.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/NamespaceSymbolExtension.java,v
retrieving revision 1.1
diff -u -r1.1 NamespaceSymbolExtension.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/NamespaceSymbolExtension.java 21 Jul 2003 17:29:54 -0000 1.1
+++ parser/org/eclipse/cdt/internal/core/parser/pst/NamespaceSymbolExtension.java 22 Jul 2003 21:55:38 -0000
@@ -16,6 +16,7 @@
import java.util.NoSuchElementException;
import org.eclipse.cdt.internal.core.parser.ast.complete.ASTSymbol;
+import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension.ExtensionException;
/**
* @author jcamelon
Index: parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java,v
retrieving revision 1.7
diff -u -r1.7 ParserSymbolTable.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java 22 Jul 2003 00:23:56 -0000 1.7
+++ parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java 22 Jul 2003 21:55:46 -0000
@@ -3158,435 +3158,4 @@
}
}
- static public class TypeInfo {
- public TypeInfo(){
- super();
- }
-
- public TypeInfo( eType type, int info, ISymbol symbol ){
- super();
- _typeInfo = info;
- _type = type;
- _typeDeclaration = symbol;
- }
-
- public TypeInfo( eType type, int info, ISymbol symbol, PtrOp op, boolean hasDefault ){
- super();
- _typeInfo = info;
- _type = type;
- _typeDeclaration = symbol;
- if( op != null ){
- _ptrOperators = new LinkedList();
- _ptrOperators.add( op );
- } else {
- _ptrOperators = null;
- }
- _hasDefaultValue = hasDefault;
- }
-
- public TypeInfo( eType type, int info, ISymbol symbol, PtrOp op, Object def ){
- super();
- _typeInfo = info;
- _type = type;
- _typeDeclaration = symbol;
- if( op != null ){
- _ptrOperators = new LinkedList();
- _ptrOperators.add( op );
- } else {
- _ptrOperators = null;
- }
- _hasDefaultValue = true;
- setDefault( def );
- }
-
- public TypeInfo( TypeInfo info ){
- super();
-
- _typeInfo = info._typeInfo;
- _type = info._type;
- _typeDeclaration = info._typeDeclaration;
- _ptrOperators = ( info._ptrOperators == null ) ? null : (LinkedList)info._ptrOperators.clone();
- _hasDefaultValue = info._hasDefaultValue;
- }
-
- public static final int typeMask = 0x001f;
- public static final int isAuto = 0x0020;
- public static final int isRegister = 0x0040;
- public static final int isStatic = 0x0080;
- public static final int isExtern = 0x0100;
- public static final int isMutable = 0x0200;
- public static final int isInline = 0x0400;
- public static final int isVirtual = 0x0800;
- public static final int isExplicit = 0x1000;
- public static final int isTypedef = 0x2000;
- public static final int isFriend = 0x4000;
- public static final int isConst = 0x8000;
- public static final int isVolatile = 0x10000;
- public static final int isUnsigned = 0x20000;
- public static final int isShort = 0x40000;
- public static final int isLong = 0x80000;
-
- // Types (maximum type is typeMask
- // Note that these should be considered ordered and if you change
- // the order, you should consider the ParserSymbolTable uses
- public static final eType t_any = new eType( -1 ); //don't care
- public static final eType t_undef = new eType( 0 ); //not specified
- public static final eType t_type = new eType( 1 ); //Type Specifier
- public static final eType t_namespace = new eType( 2 );
- public static final eType t_class = new eType( 3 );
- public static final eType t_struct = new eType( 4 );
- public static final eType t_union = new eType( 5 );
- public static final eType t_enumeration = new eType( 6 );
- public static final eType t_function = new eType( 7 );
- public static final eType t_bool = new eType( 8 );
- public static final eType t_char = new eType( 9 );
- public static final eType t_wchar_t = new eType( 10 );
- public static final eType t_int = new eType( 11 );
- public static final eType t_float = new eType( 12 );
- public static final eType t_double = new eType( 13 );
- public static final eType t_void = new eType( 14 );
- public static final eType t_enumerator = new eType( 15 );
- public static final eType t_block = new eType( 16 );
- public static final eType t_template = new eType( 17 );
- public static final eType t_asm = new eType( 18 );
- public static final eType t_linkage = new eType( 19 );
- //public static final eType t_templateParameter = new eType( 18 );
-
- public static class eType implements Comparable{
- private eType( int v ){
- _val = v;
- }
-
- public int compareTo( Object o ){
- eType t = (eType) o;
- return _val - t._val;
- }
-
- public int toInt(){
- return _val;
- }
-
- private int _val;
- }
-
- public static class PtrOp {
- public PtrOp( eType type ){
- this.type = type;
- }
- public PtrOp( eType type, boolean isConst, boolean isVolatile ){
- this.type = type;
- this.isConst = isConst;
- this.isVolatile = isVolatile;
- }
- public PtrOp( ISymbol memberOf, boolean isConst, boolean isVolatile ){
- this.type = t_memberPointer;
- this.isConst = isConst;
- this.isVolatile = isVolatile;
- this.memberOf = memberOf;
- }
-
- public PtrOp(){
- super();
- }
-
- public static final eType t_undef = new eType( 0 );
- public static final eType t_pointer = new eType( 1 );
- public static final eType t_reference = new eType( 2 );
- public static final eType t_array = new eType( 3 );
- public static final eType t_memberPointer = new eType( 4 );
-
- public eType getType() { return type; }
- public void setType( eType type ) { this.type = type; }
-
- public boolean isConst() { return isConst; }
- public boolean isVolatile() { return isVolatile; }
- public void setConst( boolean isConst ) { this.isConst = isConst; }
- public void setVolatile(boolean isVolatile) { this.isVolatile = isVolatile; }
-
- public ISymbol getMemberOf() { return memberOf; }
- public void setMemberOf( ISymbol member ) { this.memberOf = member; }
-
- public int compareCVTo( PtrOp ptr ){
- int cv1 = ( isConst() ? 1 : 0 ) + ( isVolatile() ? 1 : 0 );
- int cv2 = ( ptr.isConst() ? 1 : 0 ) + ( ptr.isVolatile() ? 1 : 0 );
-
- return cv1 - cv2;
- }
- public boolean equals( Object o ){
- if( o == null || !(o instanceof PtrOp) ){
- return false;
- }
- PtrOp op = (PtrOp)o;
-
- return ( isConst() == op.isConst() &&
- isVolatile() == op.isVolatile() &&
- getType() == op.getType() );
- }
-
- private eType type = t_undef;
- private boolean isConst = false;
- private boolean isVolatile = false;
- private ISymbol memberOf = null;
- }
-
- private static final String _image[] = { "",
- "",
- "namespace",
- "template",
- "class",
- "struct",
- "union",
- "enum",
- "",
- "bool",
- "char",
- "wchar_t",
- "int",
- "float",
- "double",
- "void",
- ""
- };
- //Partial ordering :
- // none < const
- // none < volatile
- // none < const volatile
- // const < const volatile
- // volatile < const volatile
- public static final int cvConst = 2;
- public static final int cvVolatile = 3;
- public static final int cvConstVolatile = 5;
-
- // Convenience methods
- public void setBit(boolean b, int mask){
- if( b ){
- _typeInfo = _typeInfo | mask;
- } else {
- _typeInfo = _typeInfo & ~mask;
- }
- }
-
- public boolean checkBit(int mask){
- return (_typeInfo & mask) != 0;
- }
-
- public void setType( eType t){
- _type = t;
- }
-
- public eType getType(){
- return _type;
- }
-
- public boolean isType( eType type ){
- return isType( type, t_undef );
- }
-
- public int getTypeInfo(){
- return _typeInfo;
- }
-
- public void setTypeInfo( int typeInfo ){
- _typeInfo = typeInfo;
- }
-
- /**
- *
- * @param type
- * @param upperType
- * @return boolean
- *
- * type checking, check that this declaration's type is between type and
- * upperType (inclusive). upperType of 0 means no range and our type must
- * be type.
- */
- public boolean isType( eType type, eType upperType ){
- //type of -1 means we don't care
- if( type == t_any )
- return true;
-
- //upperType of 0 means no range
- if( upperType == t_undef ){
- return ( getType() == type );
- } else {
- return ( getType().compareTo( type ) >= 0 && getType().compareTo( upperType ) <= 0 );
- }
- }
-
- public ISymbol getTypeSymbol(){
- return _typeDeclaration;
- }
-
- public void setTypeSymbol( ISymbol type ){
- _typeDeclaration = type;
- }
-
- public boolean hasPtrOperators(){
- return ( _ptrOperators != null && _ptrOperators.size() > 0 );
- }
-
- public LinkedList getPtrOperators(){
- return _ptrOperators;
- }
-
- public boolean hasSamePtrs( TypeInfo type ){
- int size = hasPtrOperators() ? getPtrOperators().size() : 0;
- int size2 = type.hasPtrOperators() ? type.getPtrOperators().size() : 0;
- if( size == size2 ){
- if( size > 0 ){
- Iterator iter1 = getPtrOperators().iterator();
- Iterator iter2 = type.getPtrOperators().iterator();
- PtrOp ptr1 = null, ptr2 = null;
- for( int i = size; i > 0; i-- ){
- ptr1 = (PtrOp)iter1.next();
- ptr2 = (PtrOp)iter2.next();
- if( ptr1.getType() != ptr2.getType() ){
- return false;
- }
- }
- }
- return true;
- }
- return false;
- }
-
- public void applyPtrsAsUnaryOperators( LinkedList ptrs ){
- if( ptrs == null || ptrs.isEmpty() )
- return;
-
- int size = ptrs.size();
- Iterator iter = ptrs.iterator();
- PtrOp op = null;
- for( int i = size; i > 0; i-- ){
- op = (PtrOp)iter.next();
- if( op.getType() == PtrOp.t_pointer ){
- //indirection operator, can only be applied to a pointer
- if( hasPtrOperators() ){
- PtrOp first = (PtrOp)getPtrOperators().getFirst();
- if( first.getType() == PtrOp.t_pointer )
- {
- getPtrOperators().removeFirst();
- if( op.isConst() || op.isVolatile() ){
-
- if( hasPtrOperators() ){
- ((PtrOp)getPtrOperators().getFirst()).setConst( op.isConst() );
- ((PtrOp)getPtrOperators().getFirst()).setVolatile( op.isVolatile() );
- } else {
- PtrOp newOp = new PtrOp( PtrOp.t_undef, op.isConst(), op.isVolatile() );
- addPtrOperator( newOp );
- }
- }
- }
- } else {
- //???
- }
- } else if( op.getType() == PtrOp.t_reference ){
- //Address-of unary operator, results in pointer to T
- //TODO or pointer to member
- PtrOp newOp = new PtrOp( PtrOp.t_pointer, op.isConst(), op.isVolatile() );
- addPtrOperator( newOp );
- }
- }
- }
-
- public void addPtrOperator( PtrOp ptr ){
- if( _ptrOperators == null ){
- _ptrOperators = new LinkedList();
- }
- if( ptr != null )
- _ptrOperators.add( ptr );
- }
-
- public void addPtrOperator( List ptrs ){
- if( _ptrOperators == null ){
- _ptrOperators = new LinkedList();
- }
- if( ptrs != null )
- _ptrOperators.addAll( ptrs );
- }
-
- public boolean getHasDefault(){
- return _hasDefaultValue;
- }
-
- public void setHasDefault( boolean def ){
- _hasDefaultValue = def;
- }
- public void setDefault( Object t ){
- _defaultValue = t;
- }
- public Object getDefault(){
- return _defaultValue;
- }
-
- /**
- * canHold
- * @param type
- * @return boolean
- * return true is the our type can hold all the values of the passed in
- * type.
- * TODO, for now return true if our type is "larger" (based on ordering of
- * the type values)
- */
- public boolean canHold( TypeInfo type ){
- return getType().compareTo( type.getType() ) >= 0;
- }
-
- public boolean equals( Object t ){
- if( t == null || !(t instanceof TypeInfo) ){
- return false;
- }
-
- TypeInfo type = (TypeInfo)t;
-
- boolean result = ( _typeInfo == type._typeInfo );
- result &= ( _type == type._type );
-
- if( _typeDeclaration instanceof TemplateInstance ){
- result &= _typeDeclaration.equals( type._typeDeclaration );
- } else {
- result &= ( _typeDeclaration == type._typeDeclaration );
- }
-
-
- int size1 = (_ptrOperators == null) ? 0 : _ptrOperators.size();
- int size2 = (type._ptrOperators == null) ? 0 : type._ptrOperators.size();
- if( size1 == size2 ){
- if( size1 != 0 ){
- Iterator iter1 = _ptrOperators.iterator();
- Iterator iter2 = type._ptrOperators.iterator();
-
- PtrOp op1 = null, op2 = null;
- for( int i = size1; i > 0; i-- ){
- op1 = (PtrOp)iter1.next();
- op2 = (PtrOp)iter2.next();
-
- if( !op1.equals(op2) ){
- return false;
- }
- }
- }
- } else {
- return false;
- }
-
- return result;
- }
-
- public String toString(){
- if( isType( t_type ) ){
- return _typeDeclaration.getName();
- } else {
- return _image[ getType().toInt() ];
- }
- }
-
- private int _typeInfo = 0;
- private eType _type = t_undef;
- private ISymbol _typeDeclaration;
-
- private boolean _hasDefaultValue = false;
- private Object _defaultValue = null;
- private LinkedList _ptrOperators;
- }
}
Index: parser/org/eclipse/cdt/internal/core/parser/pst/StandardSymbolExtension.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/StandardSymbolExtension.java,v
retrieving revision 1.1
diff -u -r1.1 StandardSymbolExtension.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/StandardSymbolExtension.java 21 Jul 2003 17:29:54 -0000 1.1
+++ parser/org/eclipse/cdt/internal/core/parser/pst/StandardSymbolExtension.java 22 Jul 2003 21:55:46 -0000
@@ -14,6 +14,7 @@
import java.util.NoSuchElementException;
import org.eclipse.cdt.internal.core.parser.ast.complete.ASTSymbol;
+import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension.ExtensionException;
/**
Index: parser/org/eclipse/cdt/internal/core/parser/pst/TypeInfo.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/pst/TypeInfo.java
diff -N parser/org/eclipse/cdt/internal/core/parser/pst/TypeInfo.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/pst/TypeInfo.java 22 Jul 2003 21:55:47 -0000
@@ -0,0 +1,450 @@
+/**********************************************************************
+ * 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.pst;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TemplateInstance;
+
+
+public class TypeInfo {
+ public TypeInfo(){
+ super();
+ }
+
+ public TypeInfo( TypeInfo.eType type, int info, ISymbol symbol ){
+ super();
+ _typeInfo = info;
+ _type = type;
+ _typeDeclaration = symbol;
+ }
+
+ public TypeInfo( TypeInfo.eType type, int info, ISymbol symbol, TypeInfo.PtrOp op, boolean hasDefault ){
+ super();
+ _typeInfo = info;
+ _type = type;
+ _typeDeclaration = symbol;
+ if( op != null ){
+ _ptrOperators = new LinkedList();
+ _ptrOperators.add( op );
+ } else {
+ _ptrOperators = null;
+ }
+ _hasDefaultValue = hasDefault;
+ }
+
+ public TypeInfo( TypeInfo.eType type, int info, ISymbol symbol, TypeInfo.PtrOp op, Object def ){
+ super();
+ _typeInfo = info;
+ _type = type;
+ _typeDeclaration = symbol;
+ if( op != null ){
+ _ptrOperators = new LinkedList();
+ _ptrOperators.add( op );
+ } else {
+ _ptrOperators = null;
+ }
+ _hasDefaultValue = true;
+ setDefault( def );
+ }
+
+ public TypeInfo( TypeInfo info ){
+ super();
+
+ _typeInfo = info._typeInfo;
+ _type = info._type;
+ _typeDeclaration = info._typeDeclaration;
+ _ptrOperators = ( info._ptrOperators == null ) ? null : (LinkedList)info._ptrOperators.clone();
+ _hasDefaultValue = info._hasDefaultValue;
+ }
+
+ public static final int typeMask = 0x001f;
+ public static final int isAuto = 0x0020;
+ public static final int isRegister = 0x0040;
+ public static final int isStatic = 0x0080;
+ public static final int isExtern = 0x0100;
+ public static final int isMutable = 0x0200;
+ public static final int isInline = 0x0400;
+ public static final int isVirtual = 0x0800;
+ public static final int isExplicit = 0x1000;
+ public static final int isTypedef = 0x2000;
+ public static final int isFriend = 0x4000;
+ public static final int isConst = 0x8000;
+ public static final int isVolatile = 0x10000;
+ public static final int isUnsigned = 0x20000;
+ public static final int isShort = 0x40000;
+ public static final int isLong = 0x80000;
+
+ // Types (maximum type is typeMask
+ // Note that these should be considered ordered and if you change
+ // the order, you should consider the ParserSymbolTable uses
+ public static final TypeInfo.eType t_any = new TypeInfo.eType( -1 ); //don't care
+ public static final TypeInfo.eType t_undef = new TypeInfo.eType( 0 ); //not specified
+ public static final TypeInfo.eType t_type = new TypeInfo.eType( 1 ); //Type Specifier
+ public static final TypeInfo.eType t_namespace = new TypeInfo.eType( 2 );
+ public static final TypeInfo.eType t_class = new TypeInfo.eType( 3 );
+ public static final TypeInfo.eType t_struct = new TypeInfo.eType( 4 );
+ public static final TypeInfo.eType t_union = new TypeInfo.eType( 5 );
+ public static final TypeInfo.eType t_enumeration = new TypeInfo.eType( 6 );
+ public static final TypeInfo.eType t_function = new TypeInfo.eType( 7 );
+ public static final TypeInfo.eType t_bool = new TypeInfo.eType( 8 );
+ public static final TypeInfo.eType t_char = new TypeInfo.eType( 9 );
+ public static final TypeInfo.eType t_wchar_t = new TypeInfo.eType( 10 );
+ public static final TypeInfo.eType t_int = new TypeInfo.eType( 11 );
+ public static final TypeInfo.eType t_float = new TypeInfo.eType( 12 );
+ public static final TypeInfo.eType t_double = new TypeInfo.eType( 13 );
+ public static final TypeInfo.eType t_void = new TypeInfo.eType( 14 );
+ public static final TypeInfo.eType t_enumerator = new TypeInfo.eType( 15 );
+ public static final TypeInfo.eType t_block = new TypeInfo.eType( 16 );
+ public static final TypeInfo.eType t_template = new TypeInfo.eType( 17 );
+ public static final TypeInfo.eType t_asm = new TypeInfo.eType( 18 );
+ public static final TypeInfo.eType t_linkage = new TypeInfo.eType( 19 );
+ //public static final eType t_templateParameter = new eType( 18 );
+
+ public static class eType implements Comparable{
+ private eType( int v ){
+ _val = v;
+ }
+
+ public int compareTo( Object o ){
+ TypeInfo.eType t = (TypeInfo.eType) o;
+ return _val - t._val;
+ }
+
+ public int toInt(){
+ return _val;
+ }
+
+ private int _val;
+ }
+
+ public static class PtrOp {
+ public PtrOp( TypeInfo.eType type ){
+ this.type = type;
+ }
+ public PtrOp( TypeInfo.eType type, boolean isConst, boolean isVolatile ){
+ this.type = type;
+ this.isConst = isConst;
+ this.isVolatile = isVolatile;
+ }
+ public PtrOp( ISymbol memberOf, boolean isConst, boolean isVolatile ){
+ this.type = PtrOp.t_memberPointer;
+ this.isConst = isConst;
+ this.isVolatile = isVolatile;
+ this.memberOf = memberOf;
+ }
+
+ public PtrOp(){
+ super();
+ }
+
+ public static final TypeInfo.eType t_undef = new TypeInfo.eType( 0 );
+ public static final TypeInfo.eType t_pointer = new TypeInfo.eType( 1 );
+ public static final TypeInfo.eType t_reference = new TypeInfo.eType( 2 );
+ public static final TypeInfo.eType t_array = new TypeInfo.eType( 3 );
+ public static final TypeInfo.eType t_memberPointer = new TypeInfo.eType( 4 );
+
+ public TypeInfo.eType getType() { return type; }
+ public void setType( TypeInfo.eType type ) { this.type = type; }
+
+ public boolean isConst() { return isConst; }
+ public boolean isVolatile() { return isVolatile; }
+ public void setConst( boolean isConst ) { this.isConst = isConst; }
+ public void setVolatile(boolean isVolatile) { this.isVolatile = isVolatile; }
+
+ public ISymbol getMemberOf() { return memberOf; }
+ public void setMemberOf( ISymbol member ) { this.memberOf = member; }
+
+ public int compareCVTo( TypeInfo.PtrOp ptr ){
+ int cv1 = ( isConst() ? 1 : 0 ) + ( isVolatile() ? 1 : 0 );
+ int cv2 = ( ptr.isConst() ? 1 : 0 ) + ( ptr.isVolatile() ? 1 : 0 );
+
+ return cv1 - cv2;
+ }
+ public boolean equals( Object o ){
+ if( o == null || !(o instanceof TypeInfo.PtrOp) ){
+ return false;
+ }
+ TypeInfo.PtrOp op = (TypeInfo.PtrOp)o;
+
+ return ( isConst() == op.isConst() &&
+ isVolatile() == op.isVolatile() &&
+ getType() == op.getType() );
+ }
+
+ private TypeInfo.eType type = PtrOp.t_undef;
+ private boolean isConst = false;
+ private boolean isVolatile = false;
+ private ISymbol memberOf = null;
+ }
+
+ private static final String _image[] = { "",
+ "",
+ "namespace",
+ "template",
+ "class",
+ "struct",
+ "union",
+ "enum",
+ "",
+ "bool",
+ "char",
+ "wchar_t",
+ "int",
+ "float",
+ "double",
+ "void",
+ ""
+ };
+ //Partial ordering :
+ // none < const
+ // none < volatile
+ // none < const volatile
+ // const < const volatile
+ // volatile < const volatile
+ public static final int cvConst = 2;
+ public static final int cvVolatile = 3;
+ public static final int cvConstVolatile = 5;
+
+ // Convenience methods
+ public void setBit(boolean b, int mask){
+ if( b ){
+ _typeInfo = _typeInfo | mask;
+ } else {
+ _typeInfo = _typeInfo & ~mask;
+ }
+ }
+
+ public boolean checkBit(int mask){
+ return (_typeInfo & mask) != 0;
+ }
+
+ public void setType( TypeInfo.eType t){
+ _type = t;
+ }
+
+ public TypeInfo.eType getType(){
+ return _type;
+ }
+
+ public boolean isType( TypeInfo.eType type ){
+ return isType( type, TypeInfo.t_undef );
+ }
+
+ public int getTypeInfo(){
+ return _typeInfo;
+ }
+
+ public void setTypeInfo( int typeInfo ){
+ _typeInfo = typeInfo;
+ }
+
+ /**
+ *
+ * @param type
+ * @param upperType
+ * @return boolean
+ *
+ * type checking, check that this declaration's type is between type and
+ * upperType (inclusive). upperType of 0 means no range and our type must
+ * be type.
+ */
+ public boolean isType( TypeInfo.eType type, TypeInfo.eType upperType ){
+ //type of -1 means we don't care
+ if( type == TypeInfo.t_any )
+ return true;
+
+ //upperType of 0 means no range
+ if( upperType == TypeInfo.t_undef ){
+ return ( getType() == type );
+ } else {
+ return ( getType().compareTo( type ) >= 0 && getType().compareTo( upperType ) <= 0 );
+ }
+ }
+
+ public ISymbol getTypeSymbol(){
+ return _typeDeclaration;
+ }
+
+ public void setTypeSymbol( ISymbol type ){
+ _typeDeclaration = type;
+ }
+
+ public boolean hasPtrOperators(){
+ return ( _ptrOperators != null && _ptrOperators.size() > 0 );
+ }
+
+ public LinkedList getPtrOperators(){
+ return _ptrOperators;
+ }
+
+ public boolean hasSamePtrs( TypeInfo type ){
+ int size = hasPtrOperators() ? getPtrOperators().size() : 0;
+ int size2 = type.hasPtrOperators() ? type.getPtrOperators().size() : 0;
+ if( size == size2 ){
+ if( size > 0 ){
+ Iterator iter1 = getPtrOperators().iterator();
+ Iterator iter2 = type.getPtrOperators().iterator();
+ TypeInfo.PtrOp ptr1 = null, ptr2 = null;
+ for( int i = size; i > 0; i-- ){
+ ptr1 = (TypeInfo.PtrOp)iter1.next();
+ ptr2 = (TypeInfo.PtrOp)iter2.next();
+ if( ptr1.getType() != ptr2.getType() ){
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public void applyPtrsAsUnaryOperators( LinkedList ptrs ){
+ if( ptrs == null || ptrs.isEmpty() )
+ return;
+
+ int size = ptrs.size();
+ Iterator iter = ptrs.iterator();
+ TypeInfo.PtrOp op = null;
+ for( int i = size; i > 0; i-- ){
+ op = (TypeInfo.PtrOp)iter.next();
+ if( op.getType() == PtrOp.t_pointer ){
+ //indirection operator, can only be applied to a pointer
+ if( hasPtrOperators() ){
+ TypeInfo.PtrOp first = (TypeInfo.PtrOp)getPtrOperators().getFirst();
+ if( first.getType() == TypeInfo.PtrOp.t_pointer )
+ {
+ getPtrOperators().removeFirst();
+ if( op.isConst() || op.isVolatile() ){
+
+ if( hasPtrOperators() ){
+ ((TypeInfo.PtrOp)getPtrOperators().getFirst()).setConst( op.isConst() );
+ ((TypeInfo.PtrOp)getPtrOperators().getFirst()).setVolatile( op.isVolatile() );
+ } else {
+ TypeInfo.PtrOp newOp = new TypeInfo.PtrOp( TypeInfo.PtrOp.t_undef, op.isConst(), op.isVolatile() );
+ addPtrOperator( newOp );
+ }
+ }
+ }
+ } else {
+ //???
+ }
+ } else if( op.getType() == PtrOp.t_reference ){
+ //Address-of unary operator, results in pointer to T
+ //TODO or pointer to member
+ TypeInfo.PtrOp newOp = new TypeInfo.PtrOp( PtrOp.t_pointer , op.isConst(), op.isVolatile() );
+ addPtrOperator( newOp );
+ }
+ }
+ }
+
+ public void addPtrOperator( TypeInfo.PtrOp ptr ){
+ if( _ptrOperators == null ){
+ _ptrOperators = new LinkedList();
+ }
+ if( ptr != null )
+ _ptrOperators.add( ptr );
+ }
+
+ public void addPtrOperator( List ptrs ){
+ if( _ptrOperators == null ){
+ _ptrOperators = new LinkedList();
+ }
+ if( ptrs != null )
+ _ptrOperators.addAll( ptrs );
+ }
+
+ public boolean getHasDefault(){
+ return _hasDefaultValue;
+ }
+
+ public void setHasDefault( boolean def ){
+ _hasDefaultValue = def;
+ }
+ public void setDefault( Object t ){
+ _defaultValue = t;
+ }
+ public Object getDefault(){
+ return _defaultValue;
+ }
+
+ /**
+ * canHold
+ * @param type
+ * @return boolean
+ * return true is the our type can hold all the values of the passed in
+ * type.
+ * TODO, for now return true if our type is "larger" (based on ordering of
+ * the type values)
+ */
+ public boolean canHold( TypeInfo type ){
+ return getType().compareTo( type.getType() ) >= 0;
+ }
+
+ public boolean equals( Object t ){
+ if( t == null || !(t instanceof TypeInfo) ){
+ return false;
+ }
+
+ TypeInfo type = (TypeInfo)t;
+
+ boolean result = ( _typeInfo == type._typeInfo );
+ result &= ( _type == type._type );
+
+ if( _typeDeclaration instanceof TemplateInstance ){
+ result &= _typeDeclaration.equals( type._typeDeclaration );
+ } else {
+ result &= ( _typeDeclaration == type._typeDeclaration );
+ }
+
+
+ int size1 = (_ptrOperators == null) ? 0 : _ptrOperators.size();
+ int size2 = (type._ptrOperators == null) ? 0 : type._ptrOperators.size();
+ if( size1 == size2 ){
+ if( size1 != 0 ){
+ Iterator iter1 = _ptrOperators.iterator();
+ Iterator iter2 = type._ptrOperators.iterator();
+
+ TypeInfo.PtrOp op1 = null, op2 = null;
+ for( int i = size1; i > 0; i-- ){
+ op1 = (TypeInfo.PtrOp)iter1.next();
+ op2 = (TypeInfo.PtrOp)iter2.next();
+
+ if( !op1.equals(op2) ){
+ return false;
+ }
+ }
+ }
+ } else {
+ return false;
+ }
+
+ return result;
+ }
+
+ public String toString(){
+ if( isType( TypeInfo.t_type ) ){
+ return _typeDeclaration.getName();
+ } else {
+ return TypeInfo._image[ getType().toInt() ];
+ }
+ }
+
+ private int _typeInfo = 0;
+ private TypeInfo.eType _type = TypeInfo.t_undef;
+ private ISymbol _typeDeclaration;
+
+ private boolean _hasDefaultValue = false;
+ private Object _defaultValue = null;
+ private LinkedList _ptrOperators;
+}
\ No newline at end of file