Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Parser/Outline View fix - Error Handling Strategies

CORE
	Minimized the number of objects being returned from Parser
callbacks.  
	Fixed CModelBuilder to handle errors better. 
	Reorganized the DOM Hierarchy to ensure that nodes were added to the
tree on End() callbacks.  
	Fixed defect 36247().

TESTS
	Added DOMTests::testBug36247().

JohnC

P.S. Bugzilla is down, it makes me such sweet sorrow.

Index: dom/org/eclipse/cdt/internal/core/dom/ASMDefinition.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ASMDefinition.java,v
retrieving revision 1.1
diff -u -r1.1 ASMDefinition.java
--- dom/org/eclipse/cdt/internal/core/dom/ASMDefinition.java	29 Mar 2003 05:35:47 -0000	1.1
+++ dom/org/eclipse/cdt/internal/core/dom/ASMDefinition.java	11 Apr 2003 22:17:23 -0000
@@ -20,8 +20,9 @@
 
 	final private String assemblyCode;
 	
-	public ASMDefinition( String code )
+	public ASMDefinition( IScope scope, String code )
 	{
+		super( scope );
 		assemblyCode = code;
 	}
 	/**
Index: dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java,v
retrieving revision 1.20
diff -u -r1.20 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	11 Apr 2003 14:42:23 -0000	1.20
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	11 Apr 2003 22:17:24 -0000
@@ -63,9 +63,8 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#classSpecifierName()
 	 */
-	public Object classSpecifierName(Object classSpecifier) {
+	public void classSpecifierName(Object classSpecifier) {
 		((ClassSpecifier)classSpecifier).setName(currName);
-		return classSpecifier;
 	}
 
 	/**
@@ -95,15 +94,14 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declaratorId(org.eclipse.cdt.internal.core.newparser.Token)
 	 */
-	public Object declaratorId(Object declarator) {
+	public void declaratorId(Object declarator) {
 		((Declarator)declarator).setName(currName);
-		return declarator;
 	}
 
 	/**
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declSpecifier(org.eclipse.cdt.internal.core.newparser.Token)
 	 */
-	public Object simpleDeclSpecifier(Object Container, Token specifier) {
+	public void simpleDeclSpecifier(Object Container, Token specifier) {
 		DeclSpecifier.Container decl = (DeclSpecifier.Container)Container;
 		DeclSpecifier declSpec = decl.getDeclSpecifier(); 
 		if( declSpec == null )
@@ -113,7 +111,6 @@
 		}
 
 		declSpec.setType( specifier );
-		return decl;		
 	}
 
 
@@ -173,8 +170,7 @@
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationBegin(org.eclipse.cdt.internal.core.newparser.Token)
 	 */
 	public Object simpleDeclarationBegin(Object container, Token firstToken) {
-		SimpleDeclaration decl = new SimpleDeclaration();
-		((IScope)container).addDeclaration(decl);
+		SimpleDeclaration decl = new SimpleDeclaration((IScope)container);
 		if( container instanceof IAccessable )
 			decl.setAccessSpecifier(new AccessSpecifier( ((IAccessable)container).getVisibility() ));
 		((IOffsetable)decl).setStartingOffset( firstToken.getOffset() );
@@ -185,8 +181,14 @@
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationEnd(org.eclipse.cdt.internal.core.newparser.Token)
 	 */
 	public void simpleDeclarationEnd(Object declaration, Token lastToken) {
-		IOffsetable offsetable = (IOffsetable)declaration;
-		offsetable.setTotalLength( lastToken.getOffset() + lastToken.getLength() - offsetable.getStartingOffset());
+		SimpleDeclaration decl = (SimpleDeclaration)declaration;
+		IOffsetable offsetable = (IOffsetable)decl;
+		// TODO Kludge solve me!
+		if( lastToken != null )
+			offsetable.setTotalLength( lastToken.getOffset() + lastToken.getLength() - offsetable.getStartingOffset());
+		else
+			offsetable.setTotalLength( 0 );
+		decl.getOwnerScope().addDeclaration(decl);
 	}
 
 	/**
@@ -231,14 +233,13 @@
 		
 	}
 
-	public Object baseSpecifierVirtual( Object baseSpecifier, boolean virtual )
+	public void baseSpecifierVirtual( Object baseSpecifier, boolean virtual )
 	{
 		BaseSpecifier bs = (BaseSpecifier)baseSpecifier; 
 		bs.setVirtual( virtual );
-		return bs;
 	}

-	public Object baseSpecifierVisibility( Object baseSpecifier, Token visibility )
+	public void baseSpecifierVisibility( Object baseSpecifier, Token visibility )
 	{
 		int access = AccessSpecifier.v_public;  
 		switch( visibility.type )
@@ -257,25 +258,24 @@
 		}
 	
 		((BaseSpecifier)baseSpecifier).setAccess(access);  
-		return baseSpecifier;
 	}
 
 	
-	public Object baseSpecifierName( Object baseSpecifier )
+	public void baseSpecifierName( Object baseSpecifier )
 	{
 		((BaseSpecifier)baseSpecifier).setName(currName);		
-		return baseSpecifier;
 	}
 	
 	public Object parameterDeclarationBegin( Object container )
 	{
 		IScope clause = (IScope)container; 
-		ParameterDeclaration pd = new ParameterDeclaration();
-		clause.addDeclaration( pd ); 
+		ParameterDeclaration pd = new ParameterDeclaration(clause);
 		return pd;
 	}
 	
 	public void  parameterDeclarationEnd( Object declaration ){
+		ParameterDeclaration d = (ParameterDeclaration)declaration;
+		d.getOwnerScope().addDeclaration(d);
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declaratorAbort(java.lang.Object, java.lang.Object)
@@ -314,8 +314,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object)
 	 */
-	public Object classSpecifierSafe(Object classSpecifier) {
-		return classSpecifier;
+	public void classSpecifierSafe(Object classSpecifier) {
 	}
 
 	/**
@@ -352,19 +351,17 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
 	 */
-	public Object elaboratedTypeSpecifierName(Object elab) {
+	public void elaboratedTypeSpecifierName(Object elab) {
 		((ElaboratedTypeSpecifier)elab).setName( currName );
-		return elab;
 	}
 
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
 	 */
-	public Object simpleDeclSpecifierName(Object declaration) {
+	public void simpleDeclSpecifierName(Object declaration) {
 		DeclSpecifier.Container decl = (DeclSpecifier.Container)declaration;
 		DeclSpecifier declSpec = decl.getDeclSpecifier(); 
 		declSpec.setName( currName ); 
-		return declSpec;
 	}
 
 	/* (non-Javadoc)
@@ -376,7 +373,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object classMemberVisibility(Object classSpecifier, Token visibility) {
+	public void classMemberVisibility(Object classSpecifier, Token visibility) {
 		ClassSpecifier spec = (ClassSpecifier)classSpecifier;
 		switch( visibility.getType() )
 		{
@@ -390,7 +387,6 @@
 				spec.setVisibility( AccessSpecifier.v_private );
 				break;
 		}
-		return spec;
 	}
 
 	/* (non-Javadoc)
@@ -414,15 +410,14 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object)
 	 */
-	public Object pointerOperatorName(Object ptrOperator) {
+	public void pointerOperatorName(Object ptrOperator) {
 		// TODO Auto-generated method stub
-		return ptrOperator;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object pointerOperatorType(Object ptrOperator, Token type) {
+	public void pointerOperatorType(Object ptrOperator, Token type) {
 		PointerOperator ptrOp = (PointerOperator)ptrOperator;
 		switch( type.getType() )
 		{
@@ -435,13 +430,12 @@
 			default:
 				break;
 		}
-		return ptrOp;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
+	public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
 		PointerOperator ptrOp = (PointerOperator)ptrOperator;
 		switch( modifier.getType() )
 		{
@@ -454,13 +448,12 @@
 			default:
 				break;
 		}
-		return ptrOp;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object declaratorCVModifier(Object declarator, Token modifier) {
+	public void declaratorCVModifier(Object declarator, Token modifier) {
 		Declarator decl = (Declarator)declarator;
 		switch( modifier.getType() )
 		{
@@ -473,7 +466,7 @@
 			default:
 				break;
 		}
-		return decl;
+
 	}
 
 	/* (non-Javadoc)
@@ -498,20 +491,18 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#exceptionSpecificationTypename(java.lang.Object)
 	 */
-	public Object declaratorThrowExceptionName(Object declarator ) 
+	public void declaratorThrowExceptionName(Object declarator ) 
 	{
 		Declarator decl = (Declarator)declarator; 
 		decl.getExceptionSpecifier().addTypeName( currName );
-		return decl; 
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object)
 	 */
-	public Object declaratorThrowsException(Object declarator) {
+	public void declaratorThrowsException(Object declarator) {
 		Declarator decl = (Declarator)declarator; 
 		decl.getExceptionSpecifier().setThrowsException(true);
-		return decl;
 	}
 
 	/* (non-Javadoc)
@@ -529,10 +520,9 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
 	 */
-	public Object namespaceDefinitionId(Object namespace) {
+	public void namespaceDefinitionId(Object namespace) {
 		NamespaceDefinition ns = (NamespaceDefinition)namespace;
 		ns.setName( currName );
-		return ns;
 	}
 
 	/* (non-Javadoc)
@@ -579,10 +569,9 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
 	 */
-	public Object usingDirectiveNamespaceId(Object dir) {
+	public void usingDirectiveNamespaceId(Object dir) {
 		UsingDirective directive = (UsingDirective)dir;
 		directive.setNamespaceName( currName );
-		return directive;
 	}
 
 	/* (non-Javadoc)
@@ -605,11 +594,10 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
 	 */
-	public Object usingDeclarationMapping(Object decl, boolean isTypename) {
+	public void usingDeclarationMapping(Object decl, boolean isTypename) {
 		UsingDeclaration declaration = (UsingDeclaration)decl;
 		declaration.setMappedName( currName );
 		declaration.setTypename( isTypename );
-		return declaration;
 	}
 
 	/* (non-Javadoc)
@@ -647,10 +635,9 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
 	 */
-	public Object enumSpecifierId(Object enumSpec) {
+	public void enumSpecifierId(Object enumSpec) {
 		EnumerationSpecifier es = (EnumerationSpecifier)enumSpec;
 		es.setName( currName );
-		return es;
 	}
 
 	/* (non-Javadoc)
@@ -682,11 +669,10 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
 	 */
-	public Object enumeratorId(Object enumDefn) {
+	public void enumeratorId(Object enumDefn) {
 		EnumeratorDefinition definition = (EnumeratorDefinition)enumDefn;
 		definition.setName( currName );
 		((IOffsetable)enumDefn).setStartingOffset( currName.getStartOffset() );
-		return definition;
 	}
 
 	/* (non-Javadoc)
@@ -702,7 +688,7 @@
 	 */
 	public void asmDefinition(Object container, String assemblyCode) {
 		IScope scope = (IScope)container;
-		ASMDefinition definition = new ASMDefinition( assemblyCode );
+		ASMDefinition definition = new ASMDefinition( scope, assemblyCode );
 		scope.addDeclaration( definition );
 	}
 
@@ -748,10 +734,9 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainId(java.lang.Object)
 	 */
-	public Object constructorChainElementId(Object element) {
+	public void constructorChainElementId(Object element) {
 		ConstructorChainElement ele = (ConstructorChainElement)element;
 		ele.setName(currName);
-		return ele;
 	}
 
 	/* (non-Javadoc)
@@ -774,15 +759,16 @@
 	 */
 	public Object explicitInstantiationBegin(Object container) {
 		IScope scope = (IScope)container;
-		ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( ExplicitTemplateDeclaration.k_instantiation ); 
-		scope.addDeclaration(etd);
+		ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( scope, ExplicitTemplateDeclaration.k_instantiation ); 
 		return etd;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitInstantiationEnd(java.lang.Object)
 	 */
-	public void explicitInstantiationEnd(Object instantiation) {	
+	public void explicitInstantiationEnd(Object instantiation) {
+		ExplicitTemplateDeclaration declaration = (ExplicitTemplateDeclaration)instantiation;
+		declaration.getOwnerScope().addDeclaration(declaration);
 	}
 
 	/* (non-Javadoc)
@@ -790,8 +776,7 @@
 	 */
 	public Object explicitSpecializationBegin(Object container) {
 		IScope scope = (IScope)container;
-		ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( ExplicitTemplateDeclaration.k_specialization); 
-		scope.addDeclaration(etd);
+		ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( scope, ExplicitTemplateDeclaration.k_specialization); 
 		return etd;
 	}
 
@@ -799,15 +784,16 @@
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitSpecializationEnd(java.lang.Object)
 	 */
 	public void explicitSpecializationEnd(Object instantiation) {
+		ExplicitTemplateDeclaration etd = (ExplicitTemplateDeclaration)instantiation;
+		etd.getOwnerScope().addDeclaration(etd);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorPureVirtual(java.lang.Object)
 	 */
-	public Object declaratorPureVirtual(Object declarator) {
+	public void declaratorPureVirtual(Object declarator) {
 		Declarator d = (Declarator)declarator;
 		d.setPureVirtual(true);
-		return d;
 	}
 
 	/* (non-Javadoc)
@@ -856,31 +842,30 @@
 			default:
 				k = 0;  
 		}
-		TemplateParameter p = new TemplateParameter( k );
-		list.addDeclaration(p);
+		TemplateParameter p = new TemplateParameter( list, k );
 		return p;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterName(java.lang.Object)
 	 */
-	public Object templateTypeParameterName(Object typeParm) {
+	public void templateTypeParameterName(Object typeParm) {
 		((TemplateParameter)typeParm).setName( currName );
-		return typeParm;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeInitialTypeId(java.lang.Object)
 	 */
-	public Object templateTypeParameterInitialTypeId(Object typeParm) {
+	public void templateTypeParameterInitialTypeId(Object typeParm) {
 		((TemplateParameter)typeParm).setTypeId( currName );
-		return typeParm;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterEnd(java.lang.Object)
 	 */
 	public void templateTypeParameterEnd(Object typeParm) {
+		TemplateParameter parameter = (TemplateParameter)typeParm;
+		parameter.getOwnerScope().addDeclaration( parameter );
 	}
 
 	/* (non-Javadoc)
Index: dom/org/eclipse/cdt/internal/core/dom/Declaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/Declaration.java,v
retrieving revision 1.2
diff -u -r1.2 Declaration.java
--- dom/org/eclipse/cdt/internal/core/dom/Declaration.java	4 Mar 2003 18:25:40 -0000	1.2
+++ dom/org/eclipse/cdt/internal/core/dom/Declaration.java	11 Apr 2003 22:17:24 -0000
@@ -3,5 +3,19 @@
 /**
  */
 public class Declaration {
+	
+	public Declaration( IScope scope )
+	{
+		ownerScope = scope;
+	}
+	
+	private final IScope ownerScope;
+
+	/**
+	 * @return
+	 */
+	public IScope getOwnerScope() {
+		return ownerScope;
+	}
 
 }
Index: dom/org/eclipse/cdt/internal/core/dom/ExplicitTemplateDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ExplicitTemplateDeclaration.java,v
retrieving revision 1.1
diff -u -r1.1 ExplicitTemplateDeclaration.java
--- dom/org/eclipse/cdt/internal/core/dom/ExplicitTemplateDeclaration.java	31 Mar 2003 16:12:41 -0000	1.1
+++ dom/org/eclipse/cdt/internal/core/dom/ExplicitTemplateDeclaration.java	11 Apr 2003 22:17:24 -0000
@@ -27,8 +27,9 @@
 	public final static int k_specialization = 1;
 	public final static int k_instantiation = 2; 
 
-	public ExplicitTemplateDeclaration( int kind ) 
+	public ExplicitTemplateDeclaration( IScope scope, int kind ) 
 	{
+		super( scope );
 		this.kind = kind;
 	}
 
Index: dom/org/eclipse/cdt/internal/core/dom/IScope.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/IScope.java,v
retrieving revision 1.1
diff -u -r1.1 IScope.java
--- dom/org/eclipse/cdt/internal/core/dom/IScope.java	17 Mar 2003 15:22:05 -0000	1.1
+++ dom/org/eclipse/cdt/internal/core/dom/IScope.java	11 Apr 2003 22:17:24 -0000
@@ -4,8 +4,11 @@
 
 
 /**
- * A scope contains a set of declarations that are defined in that 
-scope.  */ public interface IScope {
+ * A scope contains a set of declarations that are defined 
+ * in that scope.  
+ **/
+ 
+public interface IScope {
 	
 	public void addDeclaration(Declaration declaration);
 	public List getDeclarations();
Index: dom/org/eclipse/cdt/internal/core/dom/LinkageSpecification.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/LinkageSpecification.java,v
retrieving revision 1.2
diff -u -r1.2 LinkageSpecification.java
--- dom/org/eclipse/cdt/internal/core/dom/LinkageSpecification.java	29 Mar 2003 05:35:47 -0000	1.2
+++ dom/org/eclipse/cdt/internal/core/dom/LinkageSpecification.java	11 Apr 2003 22:17:24 -0000
@@ -23,12 +23,11 @@
 public class LinkageSpecification extends Declaration implements IScope {
 
 	private List declarations = new LinkedList();
-	private IScope ownerScope;
 	private String languageLinkage; 
 	
 	LinkageSpecification( IScope owner, String linkage )
 	{
-		ownerScope = owner; 
+		super( owner );
 		languageLinkage = linkage;
 	}
 
@@ -46,12 +45,6 @@
 		return Collections.unmodifiableList( declarations );
 	}
 
-	/**
-	 * @return IScope
-	 */
-	public IScope getOwnerScope() {
-		return ownerScope;
-	}
 
 	/**
 	 * @return String
Index: dom/org/eclipse/cdt/internal/core/dom/NamespaceDefinition.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/NamespaceDefinition.java,v
retrieving revision 1.5
diff -u -r1.5 NamespaceDefinition.java
--- dom/org/eclipse/cdt/internal/core/dom/NamespaceDefinition.java	9 Apr 2003 21:11:59 -0000	1.5
+++ dom/org/eclipse/cdt/internal/core/dom/NamespaceDefinition.java	11 Apr 2003 22:17:24 -0000
@@ -25,14 +25,13 @@
 public class NamespaceDefinition extends Declaration implements IScope, IOffsetable {
 
 	private List declarations = new LinkedList();
-	private IScope ownerScope;
 	private Name name = null;
 	private int startingOffset = 0, totalLength = 0;
 	private Token startToken = null;
 
 	public NamespaceDefinition( IScope owner )
 	{
-		ownerScope = owner;
+		super( owner );
 	}
 
 	/* (non-Javadoc)
@@ -56,13 +55,6 @@
 	 */
 	public Name getName() {
 		return name;
-	}
-
-	/**
-	 * @return IScope
-	 */
-	public IScope getOwnerScope() {
-		return ownerScope;
 	}
 
 	/**
Index: dom/org/eclipse/cdt/internal/core/dom/ParameterDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ParameterDeclaration.java,v
retrieving revision 1.6
diff -u -r1.6 ParameterDeclaration.java
--- dom/org/eclipse/cdt/internal/core/dom/ParameterDeclaration.java	9 Apr 2003 21:11:59 -0000	1.6
+++ dom/org/eclipse/cdt/internal/core/dom/ParameterDeclaration.java	11 Apr 2003 22:17:24 -0000
@@ -16,8 +16,13 @@
  */
 public class ParameterDeclaration extends Declaration implements DeclSpecifier.Container, TypeSpecifier.IOwner {
 
-	DeclSpecifier declSpec = null; 
+	private DeclSpecifier declSpec = null; 
 	private TypeSpecifier typeSpecifier;
+	
+	public ParameterDeclaration( IScope scope )
+	{
+		super( scope );
+	}
 	
 	/**
 	 * Returns the typeSpecifier.
Index: dom/org/eclipse/cdt/internal/core/dom/SimpleDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/SimpleDeclaration.java,v
retrieving revision 1.7
diff -u -r1.7 SimpleDeclaration.java
--- dom/org/eclipse/cdt/internal/core/dom/SimpleDeclaration.java	9 Apr 2003 21:11:59 -0000	1.7
+++ dom/org/eclipse/cdt/internal/core/dom/SimpleDeclaration.java	11 Apr 2003 22:17:24 -0000
@@ -12,6 +12,12 @@
 	private DeclSpecifier declSpec = null;
 	private boolean isFunctionDefinition = false;
 	 
+	 
+	public SimpleDeclaration(IScope owner )
+	{
+		super( owner );
+	}
+	
 	public DeclSpecifier getDeclSpecifier()
 	{
 		if( declSpec == null )
Index: dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java,v
retrieving revision 1.4
diff -u -r1.4 TemplateDeclaration.java
--- dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java	11 Apr 2003 14:42:24 -0000	1.4
+++ dom/org/eclipse/cdt/internal/core/dom/TemplateDeclaration.java	11 Apr 2003 22:17:24 -0000
@@ -27,13 +27,12 @@
 	private final boolean exported;
 	private AccessSpecifier visibility = null; 
 	private Token firstToken, lastToken; 
-	private IScope ownerScope;  
 	private List declarations = new ArrayList(); 
 	private TemplateParameterList templateParms = null;                
 
 	public TemplateDeclaration( IScope ownerScope, Token exported )
 	{
-		this.ownerScope = ownerScope;
+		super( ownerScope );
 		this.firstToken = exported; 
 		this.exported = exported.getType() == Token.t_export ? true : false;
 	}
@@ -57,13 +56,6 @@
 	 */
 	public boolean isExported() {
 		return exported;
-	}
-
-	/**
-	 * @return IScope
-	 */
-	public IScope getOwnerScope() {
-		return ownerScope;
 	}
 
 	/**
Index: dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java,v
retrieving revision 1.3
diff -u -r1.3 TemplateParameter.java
--- dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java	9 Apr 2003 21:11:59 -0000	1.3
+++ dom/org/eclipse/cdt/internal/core/dom/TemplateParameter.java	11 Apr 2003 22:17:25 -0000
@@ -26,8 +26,9 @@
 	public final static int k_template = 4;
 	
 	
-	public TemplateParameter( int kind )
+	public TemplateParameter( IScope scope, int kind )
 	{
+		super( scope );
 		this.kind = kind; 
 	}
 	
Index: dom/org/eclipse/cdt/internal/core/dom/UsingDeclaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/UsingDeclaration.java,v
retrieving revision 1.2
diff -u -r1.2 UsingDeclaration.java
--- dom/org/eclipse/cdt/internal/core/dom/UsingDeclaration.java	9 Apr 2003 21:11:59 -0000	1.2
+++ dom/org/eclipse/cdt/internal/core/dom/UsingDeclaration.java	11 Apr 2003 22:17:25 -0000
@@ -20,12 +20,11 @@
 public class UsingDeclaration extends Declaration {
 
 	private Name mappedName;
-	private IScope ownerScope;
 	boolean isTypename = false;
 	
 	public UsingDeclaration( IScope owner )
 	{
-		ownerScope = owner;
+		super( owner ); 
 	}
 	/**
 	 * @return String
@@ -40,13 +39,6 @@
 	 */
 	public void setMappedName(Name mapping) {
 		this.mappedName = mapping;
-	}
-
-	/**
-	 * @return IScope
-	 */
-	public IScope getOwnerScope() {
-		return ownerScope;
 	}
 
 	/**
Index: dom/org/eclipse/cdt/internal/core/dom/UsingDirective.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/UsingDirective.java,v
retrieving revision 1.2
diff -u -r1.2 UsingDirective.java
--- dom/org/eclipse/cdt/internal/core/dom/UsingDirective.java	9 Apr 2003 21:11:59 -0000	1.2
+++ dom/org/eclipse/cdt/internal/core/dom/UsingDirective.java	11 Apr 2003 22:17:25 -0000
@@ -20,11 +20,10 @@
 public class UsingDirective extends Declaration {
 
 	private Name namespaceName; 
-	private IScope ownerScope;
 	
 	public UsingDirective( IScope owner )
 	{
-		ownerScope = owner;
+		super( owner );
 	}
 
 	/**
@@ -41,12 +40,4 @@
 	public void setNamespaceName(Name namespaceName) {
 		this.namespaceName = namespaceName;
 	}
-
-	/**
-	 * @return IScope
-	 */
-	public IScope getOwnerScope() {
-		return ownerScope;
-	}
-
 }
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.27
diff -u -r1.27 ChangeLog
--- parser/ChangeLog	11 Apr 2003 21:14:34 -0000	1.27
+++ parser/ChangeLog	11 Apr 2003 22:17:25 -0000
@@ -1,4 +1,10 @@
 2003-04-11 John Camelon
+	Minimized the number of objects being returned from Parser callbacks.  
+	Fixed CModelBuilder to handle errors better. 
+	Reorganized the DOM Hierarchy to ensure that nodes were added to the tree on End() callbacks.  
+	Fixed defect 36247().
+
+2003-04-11 John Camelon
 	Fixed Bug 36243 DomBuilder Offsetable List 
 
 2003-04-10 John Camelon
Index: parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java,v
retrieving revision 1.6
diff -u -r1.6 CModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java	11 Apr 2003 21:14:34 -0000	1.6
+++ parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java	11 Apr 2003 22:17:26 -0000
@@ -57,7 +57,7 @@
 		DOMBuilder domBuilder = new DOMBuilder();
 		String code = translationUnit.getBuffer().getContents();
 		Parser parser = new Parser(code, domBuilder, true);
-		if( ! parser.parse() ) throw new ParserException( "Parse failure" );
+		parser.parse();
 		long startTime = System.currentTimeMillis(); 
 		generateModelElements(domBuilder.getTranslationUnit());
 		System.out.println("CModel build: "+ ( System.currentTimeMillis() - startTime ) + "ms" );
Index: parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java,v
retrieving revision 1.17
diff -u -r1.17 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	10 Apr 2003 17:25:06 -0000	1.17
+++ parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java	11 Apr 2003 22:17:26 -0000
@@ -159,8 +159,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object simpleDeclSpecifier(Object Container, Token specifier) {
-		return null;
+	public void simpleDeclSpecifier(Object Container, Token specifier) {
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#nameBegin(org.eclipse.cdt.internal.core.parser.Token)
@@ -181,8 +180,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorId(java.lang.Object)
 	 */
-	public Object declaratorId(Object declarator) {
-		return null;
+	public void declaratorId(Object declarator) {
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorAbort(java.lang.Object, java.lang.Object)
@@ -225,8 +223,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierName(java.lang.Object)
 	 */
-	public Object classSpecifierName(Object classSpecifier) {
-		return null;
+	public void classSpecifierName(Object classSpecifier) {
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object)
@@ -242,22 +239,19 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierName(java.lang.Object)
 	 */
-	public Object baseSpecifierName(Object baseSpecifier) {
-		return null;
+	public void baseSpecifierName(Object baseSpecifier) {
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object baseSpecifierVisibility(
+	public void baseSpecifierVisibility(
 		Object baseSpecifier,
 		Token visibility) {
-			return null;
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVirtual(java.lang.Object, boolean)
 	 */
-	public Object baseSpecifierVirtual(Object baseSpecifier, boolean virtual) {
-		return null;
+	public void baseSpecifierVirtual(Object baseSpecifier, boolean virtual) {
 	}
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierEnd(java.lang.Object)
@@ -285,8 +279,7 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object)
 	 */
-	public Object classSpecifierSafe(Object classSpecifier) {
-		return null;
+	public void classSpecifierSafe(Object classSpecifier) {
 	}
 
 	/**
@@ -305,15 +298,13 @@
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
 	 */
-	public Object elaboratedTypeSpecifierName(Object container) {
-		return null;
+	public void elaboratedTypeSpecifierName(Object container) {
 	}
 
 	/**
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
 	 */
-	public Object simpleDeclSpecifierName(Object declaration) {
-		return null;
+	public void simpleDeclSpecifierName(Object declaration) {
 	}
 
 	/* (non-Javadoc)
@@ -327,10 +318,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object classMemberVisibility(Object classSpecifier, Token visibility) {
-		return null;
-		
-		
+	public void classMemberVisibility(Object classSpecifier, Token visibility) {
 	}
 
 	/* (non-Javadoc)
@@ -352,37 +340,26 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object)
 	 */
-	public Object pointerOperatorName(Object ptrOperator) {
-		return null;
-		
-		
+	public void pointerOperatorName(Object ptrOperator) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object pointerOperatorType(Object ptrOperator, Token type) {
-		return null;
-		
-		
+	public void pointerOperatorType(Object ptrOperator, Token type) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
-		return null;
-		
-		
+	public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
+
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object declaratorCVModifier(Object declarator, Token modifier) {
-		return null;
-		
-		
+	public void declaratorCVModifier(Object declarator, Token modifier) {
 	}
 
 	/* (non-Javadoc)
@@ -403,19 +380,13 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#exceptionSpecificationTypename(java.lang.Object)
 	 */
-	public Object declaratorThrowExceptionName(Object declarator) {
-		return null;
-		
-		
+	public void declaratorThrowExceptionName(Object declarator) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object)
 	 */
-	public Object declaratorThrowsException(Object declarator) {
-		return null;
-		
-		
+	public void declaratorThrowsException(Object declarator) {
 	}
 
 	/* (non-Javadoc)
@@ -429,10 +400,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
 	 */
-	public Object namespaceDefinitionId(Object namespace) {
-		return null;
-		
-		
+	public void namespaceDefinitionId(Object namespace) {
 	}
 
 	/* (non-Javadoc)
@@ -474,10 +442,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
 	 */
-	public Object usingDirectiveNamespaceId(Object container) {
-		return null;
-
-		
+	public void usingDirectiveNamespaceId(Object container) {
 	}
 
 	/* (non-Javadoc)
@@ -499,10 +464,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
 	 */
-	public Object usingDeclarationMapping(Object container, boolean isTypename) {
-		return null;
-		
-		
+	public void usingDeclarationMapping(Object container, boolean isTypename) {	
 	}
 
 	/* (non-Javadoc)
@@ -539,10 +501,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
 	 */
-	public Object enumSpecifierId(Object enumSpec) {
-		return null;
-		
-		
+	public void enumSpecifierId(Object enumSpec) {
 	}
 
 	/* (non-Javadoc)
@@ -572,10 +531,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
 	 */
-	public Object enumeratorId(Object enumDefn) {
-		return null;
-		
-		
+	public void enumeratorId(Object enumDefn) {
 	}
 
 	/* (non-Javadoc)
@@ -627,8 +583,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainId(java.lang.Object)
 	 */
-	public Object constructorChainElementId(Object ctor) {
-		return null;
+	public void constructorChainElementId(Object ctor) {
 	}
 
 	/* (non-Javadoc)
@@ -673,8 +628,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorPureVirtual(java.lang.Object)
 	 */
-	public Object declaratorPureVirtual(Object declarator) {
-		return null;
+	public void declaratorPureVirtual(Object declarator) {
 	}
 
 	/* (non-Javadoc)
@@ -706,15 +660,13 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterName(java.lang.Object)
 	 */
-	public Object templateTypeParameterName(Object typeParm) {
-		return null;
+	public void templateTypeParameterName(Object typeParm) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeInitialTypeId(java.lang.Object)
 	 */
-	public Object templateTypeParameterInitialTypeId(Object typeParm) {
-		return null;
+	public void templateTypeParameterInitialTypeId(Object typeParm) {
 	}
 
 	/* (non-Javadoc)
Index: parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java,v
retrieving revision 1.16
diff -u -r1.16 IParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	10 Apr 2003 17:25:06 -0000	1.16
+++ parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java	11 Apr 2003 22:17:26 -0000
@@ -20,8 +20,8 @@
 	public void macro(String macroName, int macroNameOffset, int macroBeginOffset, int macroEndOffset);
 	
 	public Object simpleDeclarationBegin(Object Container, Token firstToken);
-	public Object simpleDeclSpecifier(Object Container, Token specifier);
-	public Object simpleDeclSpecifierName( Object declaration );
+	public void simpleDeclSpecifier(Object Container, Token specifier);
+	public void simpleDeclSpecifierName( Object declaration );
 	public void simpleDeclarationEnd(Object declaration, Token lastToken);
 
 	public Object parameterDeclarationBegin( Object Container ); 
@@ -31,21 +31,21 @@
 	public void nameEnd(Token lastToken);
 	
 	public Object declaratorBegin(Object container);
-	public Object declaratorId(Object declarator);
+	public void declaratorId(Object declarator);
 	public void declaratorAbort( Object container, Object declarator );
-	public Object declaratorPureVirtual( Object declarator );
-	public Object declaratorCVModifier( Object declarator, Token modifier );
-	public Object declaratorThrowsException( Object declarator ); 
-	public Object declaratorThrowExceptionName( Object declarator );
+	public void declaratorPureVirtual( Object declarator );
+	public void declaratorCVModifier( Object declarator, Token modifier );
+	public void declaratorThrowsException( Object declarator ); 
+	public void declaratorThrowExceptionName( Object declarator );
 	public void declaratorEnd(Object declarator);
 		
 	public Object arrayDeclaratorBegin( Object declarator );
 	public void arrayDeclaratorEnd( Object arrayQualifier );
 	
 	public Object pointerOperatorBegin( Object container );
-	public Object pointerOperatorType( Object ptrOperator, Token type );
-	public Object pointerOperatorName( Object ptrOperator );
-	public Object pointerOperatorCVModifier( Object ptrOperator, Token modifier );
+	public void pointerOperatorType( Object ptrOperator, Token type );
+	public void pointerOperatorName( Object ptrOperator );
+	public void pointerOperatorCVModifier( Object ptrOperator, Token modifier );
 	public void pointerOperatorAbort( Object ptrOperator );
 	public void pointerOperatorEnd( Object ptrOperator );
 		
@@ -56,16 +56,16 @@
 	public void functionBodyEnd(Object functionBody);
 	
 	public Object classSpecifierBegin(Object container, Token classKey);
-	public Object classSpecifierName(Object classSpecifier);
+	public void classSpecifierName(Object classSpecifier);
 	public void classSpecifierAbort( Object classSpecifier ); 
-	public Object classSpecifierSafe( Object classSpecifier );
-	public Object classMemberVisibility( Object classSpecifier, Token visibility );
+	public void classSpecifierSafe( Object classSpecifier );
+	public void classMemberVisibility( Object classSpecifier, Token visibility );
 	public void classSpecifierEnd(Object classSpecifier, Token closingBrace );
 	
 	public Object	baseSpecifierBegin( Object containingClassSpec );
-	public Object	baseSpecifierName( Object baseSpecifier );
-	public Object 	baseSpecifierVisibility( Object baseSpecifier, Token visibility );
-	public Object 	baseSpecifierVirtual( Object baseSpecifier, boolean virtual );
+	public void	baseSpecifierName( Object baseSpecifier );
+	public void 	baseSpecifierVisibility( Object baseSpecifier, Token visibility );
+	public void 	baseSpecifierVirtual( Object baseSpecifier, boolean virtual );
 	public void  	baseSpecifierEnd( Object baseSpecifier );
 	
 	public Object 	expressionBegin( Object container ); 
@@ -75,11 +75,11 @@
 	public void 	expressionEnd(Object expression );
 	
 	public Object	elaboratedTypeSpecifierBegin( Object container, Token classKey ); 
-	public Object  	elaboratedTypeSpecifierName( Object elab ); 
+	public void  	elaboratedTypeSpecifierName( Object elab ); 
 	public void 	elaboratedTypeSpecifierEnd( Object elab );
 	
 	public Object	namespaceDefinitionBegin( Object container, Token namespace ); 
-	public Object	namespaceDefinitionId( Object namespace );
+	public void		namespaceDefinitionId( Object namespace );
 	public void 	namespaceDefinitionAbort( Object namespace );
 	public void		namespaceDefinitionEnd( Object namespace, Token closingBrace );
 
@@ -87,22 +87,22 @@
 	public void     linkageSpecificationEnd( Object linkageSpec );
 	
 	public Object	usingDirectiveBegin( Object container );
-	public Object	usingDirectiveNamespaceId( Object directive );
+	public void		usingDirectiveNamespaceId( Object directive );
 	public void 	usingDirectiveAbort( Object directive ); 
 	public void		usingDirectiveEnd( Object directive );
 	
 	public Object	usingDeclarationBegin( Object container );
-	public Object	usingDeclarationMapping( Object declaration, boolean isTypeName );
+	public void		usingDeclarationMapping( Object declaration, boolean isTypeName );
 	public void		usingDeclarationAbort( Object declaration );
 	public void		usingDeclarationEnd( Object declaration );
 
 	public Object	enumSpecifierBegin( Object container, Token enumKey );
-	public Object	enumSpecifierId( Object enumSpec );
+	public void		enumSpecifierId( Object enumSpec );
 	public void		enumSpecifierAbort( Object enumSpec );
 	public void 	enumSpecifierEnd( Object enumSpec, Token closingBrace );
 	
 	public Object	enumeratorBegin( Object enumSpec );
-	public Object	enumeratorId( Object enumDefn );
+	public void		enumeratorId( Object enumDefn );
 	public void		enumeratorEnd( Object enumDefn, Token lastToken );
 	
 	public void		asmDefinition( Object container, String assemblyCode );
@@ -112,7 +112,7 @@
 	public void 	constructorChainEnd( Object ctor );
 	
 	public Object	constructorChainElementBegin( Object ctor );
-	public Object	constructorChainElementId( Object element );
+	public void		constructorChainElementId( Object element );
 	public void		constructorChainElementEnd( Object element );
 	
 	public Object	constructorChainElementExpressionListElementBegin( Object element ); 
@@ -132,9 +132,9 @@
 	public void		templateParameterListEnd( Object parameterList );
 	
 	public Object	templateTypeParameterBegin( Object templDecl, Token kind );
-	public Object	templateTypeParameterName( Object typeParm );
+	public void		templateTypeParameterName( Object typeParm );
 	public void		templateTypeParameterAbort( Object typeParm );
-	public Object 	templateTypeParameterInitialTypeId( Object typeParm );
+	public void 	templateTypeParameterInitialTypeId( Object typeParm );
 	public void 	templateTypeParameterEnd( Object typeParm );
 	
 }
Index: parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java,v
retrieving revision 1.16
diff -u -r1.16 NullParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	10 Apr 2003 17:25:06 -0000	1.16
+++ parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java	11 Apr 2003 22:17:26 -0000
@@ -43,15 +43,14 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object simpleDeclSpecifier(Object Container, Token specifier) {
-		return null;
+	public void simpleDeclSpecifier(Object Container, Token specifier) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
 	 */
-	public Object simpleDeclSpecifierName(Object declaration) {
-		return null;
+	public void simpleDeclSpecifierName(Object declaration) {
+	
 	}
 
 	/* (non-Javadoc)
@@ -95,8 +94,8 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorId(java.lang.Object)
 	 */
-	public Object declaratorId(Object declarator) {
-		return null;
+	public void declaratorId(Object declarator) {
+		
 	}
 
 	/* (non-Javadoc)
@@ -108,15 +107,13 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object declaratorCVModifier(Object declarator, Token modifier) {
-		return null;
+	public void declaratorCVModifier(Object declarator, Token modifier) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowExceptionName(java.lang.Object)
 	 */
-	public Object declaratorThrowExceptionName(Object exceptionSpec) {
-		return null;
+	public void declaratorThrowExceptionName(Object exceptionSpec) {
 	}
 
 	/* (non-Javadoc)
@@ -148,22 +145,19 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object pointerOperatorType(Object ptrOperator, Token type) {
-		return null;
+	public void pointerOperatorType(Object ptrOperator, Token type) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object)
 	 */
-	public Object pointerOperatorName(Object ptrOperator) {
-		return null;
+	public void pointerOperatorName(Object ptrOperator) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
-		return null;
+	public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
 	}
 
 	/* (non-Javadoc)
@@ -208,8 +202,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierName(java.lang.Object)
 	 */
-	public Object classSpecifierName(Object classSpecifier) {
-		return null;
+	public void classSpecifierName(Object classSpecifier) {
 	}
 
 	/* (non-Javadoc)
@@ -221,15 +214,14 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object)
 	 */
-	public Object classSpecifierSafe(Object classSpecifier) {
-		return null;
+	public void classSpecifierSafe(Object classSpecifier) {
+
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object classMemberVisibility(Object classSpecifier, Token visibility) {
-		return null;
+	public void classMemberVisibility(Object classSpecifier, Token visibility) {
 	}
 
 	/* (non-Javadoc)
@@ -248,22 +240,19 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierName(java.lang.Object)
 	 */
-	public Object baseSpecifierName(Object baseSpecifier) {
-		return null;
+	public void baseSpecifierName(Object baseSpecifier) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
 	 */
-	public Object baseSpecifierVisibility(Object baseSpecifier, Token visibility) {
-		return null;
+	public void baseSpecifierVisibility(Object baseSpecifier, Token visibility) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVirtual(java.lang.Object, boolean)
 	 */
-	public Object baseSpecifierVirtual(Object baseSpecifier, boolean virtual) {
-		return null;
+	public void baseSpecifierVirtual(Object baseSpecifier, boolean virtual) {
 	}
 
 	/* (non-Javadoc)
@@ -313,8 +302,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
 	 */
-	public Object elaboratedTypeSpecifierName(Object elab) {
-		return null;
+	public void elaboratedTypeSpecifierName(Object elab) {
 	}
 
 	/* (non-Javadoc)
@@ -326,8 +314,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object)
 	 */
-	public Object declaratorThrowsException(Object declarator) {
-		return null;
+	public void declaratorThrowsException(Object declarator) {
 	}
 
 	/* (non-Javadoc)
@@ -340,8 +327,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
 	 */
-	public Object namespaceDefinitionId(Object namespace) {
-		return null;
+	public void namespaceDefinitionId(Object namespace) {
 	}
 
 	/* (non-Javadoc)
@@ -380,8 +366,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
 	 */
-	public Object usingDirectiveNamespaceId(Object container) {
-		return null;
+	public void usingDirectiveNamespaceId(Object container) {
 		
 		
 	}
@@ -405,8 +390,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
 	 */
-	public Object usingDeclarationMapping(Object container, boolean isTypename) {
-		return null;
+	public void usingDeclarationMapping(Object container, boolean isTypename) {
 		
 		
 	}
@@ -439,8 +423,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
 	 */
-	public Object enumSpecifierId(Object enumSpec) {
-		return null;
+	public void enumSpecifierId(Object enumSpec) {
 	}
 
 	/* (non-Javadoc)
@@ -465,8 +448,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
 	 */
-	public Object enumeratorId(Object enumDefn) {
-		return null;
+	public void enumeratorId(Object enumDefn) {
 	}
 
 	/* (non-Javadoc)
@@ -516,8 +498,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#constructorChainId(java.lang.Object)
 	 */
-	public Object constructorChainElementId(Object ctor) {
-		return null;
+	public void constructorChainElementId(Object ctor) {
 	}
 
 	/* (non-Javadoc)
@@ -562,8 +543,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorPureVirtual(java.lang.Object)
 	 */
-	public Object declaratorPureVirtual(Object declarator) {
-		return null;
+	public void declaratorPureVirtual(Object declarator) {
 	}
 
 	/* (non-Javadoc)
@@ -595,15 +575,13 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeParameterName(java.lang.Object)
 	 */
-	public Object templateTypeParameterName(Object typeParm) {
-		return null;
+	public void templateTypeParameterName(Object typeParm) {
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateTypeInitialTypeId(java.lang.Object)
 	 */
-	public Object templateTypeParameterInitialTypeId(Object typeParm) {
-		return null;
+	public void templateTypeParameterInitialTypeId(Object typeParm) {
 	}
 
 	/* (non-Javadoc)
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.27
diff -u -r1.27 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	11 Apr 2003 14:42:24 -0000	1.27
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	11 Apr 2003 22:17:27 -0000
@@ -149,7 +149,7 @@
 			if( LT(1) == Token.tIDENTIFIER || LT(1) == Token.tCOLONCOLON )
 			{
 				name();
-				try{ directive = callback.usingDirectiveNamespaceId( directive );} catch( Exception e ) {}
+				try{ callback.usingDirectiveNamespaceId( directive );} catch( Exception e ) {}
 			}
 			else
 			{
@@ -185,7 +185,7 @@
 			{
 				//	optional :: and nested classes handled in name
 				name();
-				try{ usingDeclaration = callback.usingDeclarationMapping( usingDeclaration, typeName ); } catch( Exception e ) {}
+				try{ callback.usingDeclarationMapping( usingDeclaration, typeName ); } catch( Exception e ) {}
 			}
 			else
 			{
@@ -355,12 +355,12 @@
 					if( LT(1) == Token.tIDENTIFIER ) // optional identifier
 					{
 						identifier(); 
-						try { currentTemplateParm = callback.templateTypeParameterName( currentTemplateParm );} catch( Exception e ) {}
+						try { callback.templateTypeParameterName( currentTemplateParm );} catch( Exception e ) {}
 						if( LT(1) == Token.tASSIGN ) // optional = type-id
 						{
 							consume( Token.tASSIGN );
 							identifier(); // type-id
-							try{ currentTemplateParm = callback.templateTypeParameterInitialTypeId( currentTemplateParm ); }catch( Exception e ) {}
+							try{ callback.templateTypeParameterInitialTypeId( currentTemplateParm ); }catch( Exception e ) {}
 						}
 					}
 					try{ callback.templateTypeParameterEnd( currentTemplateParm );	} catch( Exception e ) {}
@@ -383,12 +383,12 @@
 				if( LT(1) == Token.tIDENTIFIER ) // optional identifier
 				{
 					identifier();
-					try{ newTemplateParm = callback.templateTypeParameterName( newTemplateParm );} catch( Exception e ) {} 
+					try{ callback.templateTypeParameterName( newTemplateParm );} catch( Exception e ) {} 
 					if( LT(1) == Token.tASSIGN ) // optional = type-id
 					{
 						consume( Token.tASSIGN );
 						name(); 
-						try{ newTemplateParm = callback.templateTypeParameterInitialTypeId( newTemplateParm );} catch( Exception e ) {}
+						try{ callback.templateTypeParameterInitialTypeId( newTemplateParm );} catch( Exception e ) {}
 					}
 				}
 				try{ callback.templateTypeParameterEnd( newTemplateParm );} catch( Exception e ) {}
@@ -475,7 +475,7 @@
 		if( LT(1) == Token.tIDENTIFIER )
 		{
 			name();
-			try{ namespace = callback.namespaceDefinitionId( namespace );} catch( Exception e ) {}
+			try{ callback.namespaceDefinitionId( namespace );} catch( Exception e ) {}
 		}
 	
 		if( LT(1) == Token.tLBRACE )
@@ -571,7 +571,7 @@
 				try{ callback.functionBodyEnd(function );} catch( Exception e ) {}
 				break;
 			default:
-				break;
+				throw backtrack;
 		}
 		
 		try{ callback.simpleDeclarationEnd(simpleDecl, lastToken);} catch( Exception e ) {}
@@ -590,7 +590,7 @@
 				Object constructorChainElement = null; 
 				try{ constructorChainElement = callback.constructorChainElementBegin( constructorChain );} catch( Exception e ) {}
 				name(); 
-				try{ constructorChainElement = callback.constructorChainElementId(constructorChainElement);} catch( Exception e) {} 
+				try{ callback.constructorChainElementId(constructorChainElement);} catch( Exception e) {} 
 			
 				consume( Token.tLPAREN );
 				
@@ -679,7 +679,7 @@
 				case Token.t_friend:
 				case Token.t_const:
 				case Token.t_volatile:
-					try{ decl = callback.simpleDeclSpecifier(decl, consume());} catch( Exception e ) {}
+					try{ callback.simpleDeclSpecifier(decl, consume());} catch( Exception e ) {}
 					break;
 				case Token.t_signed:
 				case Token.t_unsigned:					
@@ -693,7 +693,7 @@
 				case Token.t_double:
 				case Token.t_void:
 					encounteredRawType = true;
-					try{ decl = callback.simpleDeclSpecifier(decl, consume());} catch( Exception e ) {}
+					try{ callback.simpleDeclSpecifier(decl, consume());} catch( Exception e ) {}
 					break;
 				case Token.t_typename:
 					consume( Token.t_typename );
@@ -707,11 +707,12 @@
 					// handle nested later:
 					if ((parm && !encounteredRawType) || (!encounteredRawType && LT(2) != Token.tCOLONCOLON && LT(2) != Token.tLPAREN))
 					{
-						if( ! encounteredTypename )
+						if( ! encounteredTypename || ( LT(2) == Token.tIDENTIFIER && 
+							( LT(3) == Token.tLPAREN || LT(3) == Token.tASSIGN ) || LT(2) == Token.tSTAR ) )
 						{
-							try{ decl = callback.simpleDeclSpecifier(decl,LA(1));} catch( Exception e ) {}
+							try{ callback.simpleDeclSpecifier(decl,LA(1));} catch( Exception e ) {}
 							name(); 
-							try{ decl = callback.simpleDeclSpecifierName( decl );} catch( Exception e ) {}
+							try{ callback.simpleDeclSpecifierName( decl );} catch( Exception e ) {}
 							encounteredTypename = true; 
 							break;
 						}
@@ -731,8 +732,10 @@
 						Object elab = null; 
 						try{ elab = callback.elaboratedTypeSpecifierBegin( decl, consume() );} catch( Exception e ) {} 
 						name(); 
-						try{ elab = callback.elaboratedTypeSpecifierName( elab ); } catch( Exception e ) {}
-						try{ callback.elaboratedTypeSpecifierEnd( elab );} catch( Exception e ) {}
+						try{ 
+							callback.elaboratedTypeSpecifierName( elab ); 
+							callback.elaboratedTypeSpecifierEnd( elab );
+						} catch( Exception e ) {}
 						encounteredTypename = true;
 						break;
 					}
@@ -748,8 +751,10 @@
 						Object elab = null; 
 						try{ elab = callback.elaboratedTypeSpecifierBegin( decl, consume() ); } catch( Exception e ) {} 
 						name(); 
-						try{ elab = callback.elaboratedTypeSpecifierName( elab );} catch( Exception e ) {} 
-						try{ callback.elaboratedTypeSpecifierEnd( elab );} catch( Exception e ) {}
+						try{ 
+							callback.elaboratedTypeSpecifierName( elab );
+							callback.elaboratedTypeSpecifierEnd( elab );
+						} catch( Exception e ) {}
 					}
 					break;
 				default:
@@ -912,7 +917,7 @@
 		switch (LT(1)) {
 			case Token.t_const:
 			case Token.t_volatile:
-				try{ ptrOp = callback.pointerOperatorCVModifier( ptrOp, consume() ); } catch( Exception e ) {}
+				try{ callback.pointerOperatorCVModifier( ptrOp, consume() ); } catch( Exception e ) {}
 				return ptrOp;
 			default:
 				throw backtrack;
@@ -1072,14 +1077,14 @@
 					callback.nameEnd( toSend );
 				} catch( Exception e ) {}
 
-				try{ declarator = callback.declaratorId(declarator);} catch( Exception e ) {}				
+				try{ callback.declaratorId(declarator);} catch( Exception e ) {}				
 			}
 			else
 			{
 				try
 				{
 					name();
-					try{ declarator = callback.declaratorId(declarator);} catch( Exception e ) {}
+					try{ callback.declaratorId(declarator);} catch( Exception e ) {}
 				}
 				catch( Backtrack bt )
 				{
@@ -1135,7 +1140,7 @@
 								callback.nameEnd( end );
 							} catch( Exception e ) {}
 
-							try{ declarator = callback.declaratorId(declarator);} catch( Exception e ) {}
+							try{ callback.declaratorId(declarator);} catch( Exception e ) {}
 						}				
 					}
 					else
@@ -1189,13 +1194,13 @@
 							// const-volatile marker on the method
 							if( LT(1) == Token.t_const || LT(1) == Token.t_volatile )
 							{
-								try{ declarator = callback.declaratorCVModifier( declarator, consume() );} catch( Exception e ) {}
+								try{ callback.declaratorCVModifier( declarator, consume() );} catch( Exception e ) {}
 							}
 							
 							//check for throws clause here 
 							if( LT(1) == Token.t_throw )
 							{
-								try{ declarator = callback.declaratorThrowsException( declarator );} catch( Exception e ) {}
+								try{ callback.declaratorThrowsException( declarator );} catch( Exception e ) {}
 								consume(); // throw
 								consume( Token.tLPAREN );// (
 								boolean done = false; 
@@ -1210,7 +1215,7 @@
 										case Token.tIDENTIFIER: 
 											//TODO this is not exactly right - should be type-id rather than just a name
 											name(); 
-											try{ declarator = callback.declaratorThrowExceptionName( declarator );} catch( Exception e ) {}
+											try{ callback.declaratorThrowExceptionName( declarator );} catch( Exception e ) {}
 											break;
 										case Token.tCOMMA: 
 											consume(); 
@@ -1228,7 +1233,7 @@
 							{
 								consume( Token.tASSIGN);
 								consume( Token.tINTEGER);
-								try{ declarator = callback.declaratorPureVirtual( declarator ); } catch( Exception e ) { }
+								try{ callback.declaratorPureVirtual( declarator ); } catch( Exception e ) { }
 							}
 
 						}
@@ -1279,7 +1284,7 @@
 		try{ ptrOp = callback.pointerOperatorBegin( owner );} catch( Exception e ) {} 
 		
 		if (t == Token.tAMPER) {
-			try{ ptrOp = callback.pointerOperatorType( ptrOp, consume(Token.tAMPER) ); } catch( Exception e ) {}
+			try{ callback.pointerOperatorType( ptrOp, consume(Token.tAMPER) ); } catch( Exception e ) {}
 			try{ callback.pointerOperatorEnd( ptrOp );} catch( Exception e ) {}
 			return;
 		}
@@ -1295,9 +1300,9 @@
 
 		if (t == Token.tSTAR) {
 			if( hasName )
-				try{ ptrOp = callback.pointerOperatorName( ptrOp );} catch( Exception e ) {}
+				try{ callback.pointerOperatorName( ptrOp );} catch( Exception e ) {}
 				
-			try{ ptrOp = callback.pointerOperatorType( ptrOp, consume());} catch( Exception e ) {}
+			try{ callback.pointerOperatorType( ptrOp, consume());} catch( Exception e ) {}
 
 			for (;;) {
 				try {
@@ -1337,7 +1342,7 @@
 		if( LT(1) == Token.tIDENTIFIER )
 		{ 
 			identifier();
-			try{ enumSpecifier = callback.enumSpecifierId( enumSpecifier );} catch( Exception e ) {}
+			try{ callback.enumSpecifierId( enumSpecifier );} catch( Exception e ) {}
 		} 
 		
 		if( LT(1) == Token.tLBRACE )
@@ -1352,7 +1357,7 @@
 					defn = null; 
 					try{ defn = callback.enumeratorBegin( enumSpecifier );} catch( Exception e ) {}
 					identifier();
-					try{ defn = callback.enumeratorId( defn ); } catch( Exception e ) {}
+					try{ callback.enumeratorId( defn ); } catch( Exception e ) {}
 				}
 				else
 				{
@@ -1417,7 +1422,7 @@
 		// class name
 		if (LT(1) == Token.tIDENTIFIER) {
 			className();
-			try{ classSpec = callback.classSpecifierName(classSpec);} catch( Exception e ){}			
+			try{ callback.classSpecifierName(classSpec);} catch( Exception e ){}			
 		}
 		
 		if( LT(1) != Token.tCOLON && LT(1) != Token.tLBRACE )
@@ -1429,7 +1434,7 @@
 			throw backtrack; 
 		}
 		else
-			try{ classSpec = callback.classSpecifierSafe( classSpec ); } catch( Exception e ){}
+			try{ callback.classSpecifierSafe( classSpec ); } catch( Exception e ){}
 		
 		// base clause
 		if (LT(1) == Token.tCOLON) {
@@ -1448,7 +1453,7 @@
 					case Token.t_public:
 					case Token.t_protected:
 					case Token.t_private:
-						try{ classSpec = callback.classMemberVisibility( classSpec, consume() );} catch( Exception e ){}
+						try{ callback.classMemberVisibility( classSpec, consume() );} catch( Exception e ){}
 						consume(Token.tCOLON);
 						break;
 					case Token.tRBRACE:
@@ -1478,17 +1483,17 @@
 			switch (LT(1)) {
 				case Token.t_virtual:
 					consume(Token.t_virtual);
-					try{ baseSpecifier = callback.baseSpecifierVirtual( baseSpecifier, true ); } catch( Exception e ){}
+					try{ callback.baseSpecifierVirtual( baseSpecifier, true ); } catch( Exception e ){}
 					break;
 				case Token.t_public:
 				case Token.t_protected:
 				case Token.t_private:
-					try { baseSpecifier = callback.baseSpecifierVisibility( baseSpecifier, consume() );} catch( Exception e ){}
+					try { callback.baseSpecifierVisibility( baseSpecifier, consume() );} catch( Exception e ){}
 					break;
 				case Token.tCOLONCOLON:
 				case Token.tIDENTIFIER:
 					name();
-					try { baseSpecifier = callback.baseSpecifierName( baseSpecifier ); } catch( Exception e ){}
+					try { callback.baseSpecifierName( baseSpecifier ); } catch( Exception e ){}
 					break;
 				case Token.tCOMMA:
 					try { 
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/ChangeLog,v
retrieving revision 1.25
diff -u -r1.25 ChangeLog
--- ChangeLog	11 Apr 2003 21:20:16 -0000	1.25
+++ ChangeLog	11 Apr 2003 22:18:54 -0000
@@ -1,3 +1,6 @@
+2003-04-11 John Camelon
+	Added DOMTests::testBug36247().  
+
 2003-04-11 Andrew Niefer
 	Moved ScannerFailedTest::testBug36316 to ScannerTestCase::testBug36316
 	Added ScannerFailedTest::testBug36047
Index: parser/org/eclipse/cdt/core/parser/tests/DOMTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/DOMTests.java,v
retrieving revision 1.18
diff -u -r1.18 DOMTests.java
--- parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	11 Apr 2003 14:42:28 -0000	1.18
+++ parser/org/eclipse/cdt/core/parser/tests/DOMTests.java	11 Apr 2003 22:18:54 -0000
@@ -1231,6 +1231,62 @@
 		TranslationUnit tu = parse( "A::A():B( (char *)0 ){}", true ); 
 		assertEquals( tu.getDeclarations().size(), 1 );  
 	}
+	
+	public void testBug36247() throws Exception
+	{
+		Writer code = new StringWriter(); 
+		code.write( "class A {\n" ); 
+  		code.write( "INLINE_DEF int f ();\n" ); 
+		code.write( "INLINE_DEF A   g ();" ); 
+		code.write( "INLINE_DEF A * h ();" ); 
+		code.write( "};" );
+		TranslationUnit tu = parse(code.toString());
+		assertEquals( tu.getDeclarations().size(),1 );
+		SimpleDeclaration classDeclaration = (SimpleDeclaration)tu.getDeclarations().get(0);
+		assertEquals( classDeclaration.getDeclarators().size(), 0 );
+		assertEquals( classDeclaration.getDeclSpecifier().getType(), DeclSpecifier.t_type );
+		ClassSpecifier classSpec = (ClassSpecifier)classDeclaration.getTypeSpecifier();
+		PointerOperator po =null;
+		int number = 3;
+		assertEquals( classSpec.getDeclarations().size(), number );
+		for( int i = 0; i < number; ++i )
+		{
+			SimpleDeclaration subDeclaration = (SimpleDeclaration)classSpec.getDeclarations().get(i);
+			assertEquals( subDeclaration.getDeclarators().size(), 1 );
+			Declarator functionDeclarator = (Declarator)subDeclaration.getDeclarators().get(0);
+			assertNotNull( functionDeclarator.getParms());
+			assertEquals( 0, functionDeclarator.getParms().getDeclarations().size() );
+			List pointerOperators = functionDeclarator.getPointerOperators();  
+			switch( i )
+			{
+				case 0: 
+					assertEquals( subDeclaration.getDeclSpecifier().getType(), DeclSpecifier.t_int );
+					assertEquals( functionDeclarator.getName().toString(), "f" );
+					assertEquals( pointerOperators.size(), 0 );
+					break;
+				case 1:
+					assertEquals( subDeclaration.getDeclSpecifier().getType(), DeclSpecifier.t_type );
+					assertEquals( subDeclaration.getDeclSpecifier().getTypeName(), "A");
+					assertEquals( functionDeclarator.getName().toString(), "g" );
+					assertEquals( pointerOperators.size(), 0 );	
+					break;
+				case 2:
+					assertEquals( subDeclaration.getDeclSpecifier().getType(), DeclSpecifier.t_type );
+					assertEquals( subDeclaration.getDeclSpecifier().getTypeName(), "A");
+					assertEquals( functionDeclarator.getName().toString(), "h" );
+					assertEquals( pointerOperators.size(), 1 );
+					po = (PointerOperator)pointerOperators.get(0);
+					assertFalse( po.isConst() ); 
+					assertFalse( po.isVolatile() );
+					assertEquals( po.getType(), PointerOperator.t_pointer );
+					break;
+				default:
+					break;
+			}
+			
+		}
+		
+	}
 	 
 }
 

Back to the top