1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-26 18:35:32 +02:00

Patch for John Camelon:

- Added callback support for namespace definitions.  
- Updated Parser exception handling strategy. 
- Added callback support for linkage specifications.
- Added callback support for using declarations and directives. Added callback support for enumerations. 
- Made DOM Name usage consistent.
- Updated DOMTests
This commit is contained in:
Doug Schaefer 2003-03-26 16:27:44 +00:00
parent ec58acd398
commit 21e625463a
21 changed files with 1643 additions and 214 deletions

View file

@ -15,8 +15,6 @@ package org.eclipse.cdt.internal.core.dom;
/** /**
* @author jcamelon * @author jcamelon
* *
* To change this generated comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class ArrayQualifier implements IExpressionOwner { public class ArrayQualifier implements IExpressionOwner {

View file

@ -1,5 +1,7 @@
package org.eclipse.cdt.internal.core.dom; package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.util.Name;
/** /**
* @author dschaefe * @author dschaefe
* *
@ -38,7 +40,7 @@ public class BaseSpecifier {
public void setAccess(int access) { this.access = access; } public void setAccess(int access) { this.access = access; }
public int getAccess() { return access; } public int getAccess() { return access; }
private String name; private Name name;
public void setName(String name) { this.name = name; } public void setName(Name name) { this.name = name; }
public String getName() { return name; } public Name getName() { return name; }
} }

View file

@ -1,9 +1,6 @@
package org.eclipse.cdt.internal.core.dom; package org.eclipse.cdt.internal.core.dom;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.IParserCallback; import org.eclipse.cdt.internal.core.parser.IParserCallback;
import org.eclipse.cdt.internal.core.parser.Token; import org.eclipse.cdt.internal.core.parser.Token;
import org.eclipse.cdt.internal.core.parser.util.DeclSpecifier; import org.eclipse.cdt.internal.core.parser.util.DeclSpecifier;
@ -14,7 +11,6 @@ import org.eclipse.cdt.internal.core.parser.util.Name;
*/ */
public class DOMBuilder implements IParserCallback public class DOMBuilder implements IParserCallback
{ {
private TranslationUnit translationUnit; private TranslationUnit translationUnit;
public TranslationUnit getTranslationUnit() { public TranslationUnit getTranslationUnit() {
@ -120,7 +116,7 @@ public class DOMBuilder implements IParserCallback
/** /**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionOperator(org.eclipse.cdt.internal.core.newparser.Token) * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionOperator(org.eclipse.cdt.internal.core.newparser.Token)
*/ */
public void expressionOperator(Object expression, Token operator) throws Exception { public void expressionOperator(Object expression, Token operator){
Expression e = (Expression)expression; Expression e = (Expression)expression;
e.add( operator ); e.add( operator );
} }
@ -128,7 +124,7 @@ public class DOMBuilder implements IParserCallback
/** /**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionTerminal(org.eclipse.cdt.internal.core.newparser.Token) * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionTerminal(org.eclipse.cdt.internal.core.newparser.Token)
*/ */
public void expressionTerminal(Object expression, Token terminal) throws Exception { public void expressionTerminal(Object expression, Token terminal){
Expression e = (Expression)expression; Expression e = (Expression)expression;
e.add( terminal ); e.add( terminal );
} }
@ -251,7 +247,7 @@ public class DOMBuilder implements IParserCallback
public void baseSpecifierName( Object baseSpecifier ) public void baseSpecifierName( Object baseSpecifier )
{ {
((BaseSpecifier)baseSpecifier).setName(currName.toString()); ((BaseSpecifier)baseSpecifier).setName(currName);
} }
public Object parameterDeclarationBegin( Object container ) public Object parameterDeclarationBegin( Object container )
@ -294,6 +290,8 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object)
*/ */
public void classSpecifierAbort(Object classSpecifier) { public void classSpecifierAbort(Object classSpecifier) {
ClassSpecifier cs = (ClassSpecifier)classSpecifier;
cs.getDeclaration().setTypeSpecifier(null);
} }
/** /**
@ -306,6 +304,7 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object)
*/ */
public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) { public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) {
SimpleDeclaration declaration = (SimpleDeclaration)container;
int kind = ClassSpecifier.t_struct; int kind = ClassSpecifier.t_struct;
switch (classKey.getType()) { switch (classKey.getType()) {
@ -320,7 +319,8 @@ public class DOMBuilder implements IParserCallback
break; break;
} }
ElaboratedTypeSpecifier elab = new ElaboratedTypeSpecifier( kind, (SimpleDeclaration)container ); ElaboratedTypeSpecifier elab = new ElaboratedTypeSpecifier( kind, declaration );
declaration.setTypeSpecifier( elab );
return elab; return elab;
} }
@ -482,4 +482,172 @@ public class DOMBuilder implements IParserCallback
Declarator decl = (Declarator)declarator; Declarator decl = (Declarator)declarator;
decl.throwsExceptions(); decl.throwsExceptions();
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
IScope ownerScope = (IScope)container;
NamespaceDefinition namespace = new NamespaceDefinition(ownerScope);
return namespace;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
*/
public void namespaceDefinitionId(Object namespace) {
NamespaceDefinition ns = (NamespaceDefinition)namespace;
ns.setName( currName );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationAbort(java.lang.Object)
*/
public void namespaceDefinitionAbort(Object namespace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
NamespaceDefinition ns = (NamespaceDefinition)namespace;
ns.getOwnerScope().addDeclaration(ns);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationBegin(java.lang.Object, java.lang.String)
*/
public Object linkageSpecificationBegin(Object container, String literal) {
IScope scope = (IScope)container;
LinkageSpecification linkage = new LinkageSpecification( scope, literal );
return linkage;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationEnd(java.lang.Object)
*/
public void linkageSpecificationEnd(Object linkageSpec) {
LinkageSpecification linkage = (LinkageSpecification)linkageSpec;
linkage.getOwnerScope().addDeclaration(linkage );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveBegin(java.lang.Object)
*/
public Object usingDirectiveBegin(Object container) {
IScope scope = (IScope)container;
UsingDirective directive = new UsingDirective( scope );
return directive;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
*/
public void usingDirectiveNamespaceId(Object dir) {
UsingDirective directive = (UsingDirective)dir;
directive.setNamespaceName( currName );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveEnd(java.lang.Object)
*/
public void usingDirectiveEnd(Object dir) {
UsingDirective directive = (UsingDirective)dir;
directive.getOwnerScope().addDeclaration( directive );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationBegin(java.lang.Object)
*/
public Object usingDeclarationBegin(Object container) {
IScope scope = (IScope)container;
UsingDeclaration declaration = new UsingDeclaration( scope );
return declaration;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
*/
public void usingDeclarationMapping(Object decl, boolean isTypename) {
UsingDeclaration declaration = (UsingDeclaration)decl;
declaration.setMappedName( currName );
declaration.setTypename( isTypename );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationEnd(java.lang.Object)
*/
public void usingDeclarationEnd(Object decl) {
UsingDeclaration declaration = (UsingDeclaration)decl;
declaration.getOwnerScope().addDeclaration( declaration );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveAbort(java.lang.Object)
*/
public void usingDirectiveAbort(Object directive) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationAbort(java.lang.Object)
*/
public void usingDeclarationAbort(Object declaration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierBegin(java.lang.Object)
*/
public Object enumSpecifierBegin(Object container) {
SimpleDeclaration decl = (SimpleDeclaration)container;
EnumerationSpecifier es = new EnumerationSpecifier( decl );
decl.setTypeSpecifier(es);
return es;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
*/
public void enumSpecifierId(Object enumSpec) {
EnumerationSpecifier es = (EnumerationSpecifier)enumSpec;
es.setName( currName );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierAbort(java.lang.Object)
*/
public void enumSpecifierAbort(Object enumSpec) {
EnumerationSpecifier es = (EnumerationSpecifier)enumSpec;
es.getDeclaration().setTypeSpecifier(null);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
EnumerationSpecifier es = (EnumerationSpecifier)enumSpec;
EnumeratorDefinition definition = new EnumeratorDefinition();
es.addEnumeratorDefinition(definition);
return definition;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
EnumeratorDefinition definition = (EnumeratorDefinition)enumDefn;
definition.setName( currName );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
}
} }

View file

@ -0,0 +1,61 @@
/**********************************************************************
* Created on Mar 25, 2003
*
* 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:
* Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**
* @author jcamelon
*
*/
public class EnumerationSpecifier extends TypeSpecifier {
public EnumerationSpecifier(SimpleDeclaration declaration) {
super(declaration);
}
private Name name = null;
private List enumeratorDefinitions = new LinkedList();
public void addEnumeratorDefinition( EnumeratorDefinition def )
{
enumeratorDefinitions.add( def );
}
/**
* @return List
*/
public List getEnumeratorDefinitions() {
return enumeratorDefinitions;
}
/**
* @return Name
*/
public Name getName() {
return name;
}
/**
* Sets the name.
* @param name The name to set
*/
public void setName(Name name) {
this.name = name;
}
}

View file

@ -0,0 +1,55 @@
/**********************************************************************
* Created on Mar 25, 2003
*
* 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:
* Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**
* @author jcamelon
*
*/
public class EnumeratorDefinition implements IExpressionOwner {
private Expression initialValue = null;
private Name name = null;
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.dom.IExpressionOwner#getExpression()
*/
public Expression getExpression() {
return initialValue;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.dom.IExpressionOwner#setExpression(org.eclipse.cdt.internal.core.dom.Expression)
*/
public void setExpression(Expression exp) {
initialValue = exp;
}
/**
* @return Name
*/
public Name getName() {
return name;
}
/**
* Sets the name.
* @param name The name to set
*/
public void setName(Name name) {
this.name = name;
}
}

View file

@ -19,8 +19,6 @@ import org.eclipse.cdt.internal.core.parser.Token;
/** /**
* @author jcamelon * @author jcamelon
* *
* To change this generated comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class Expression { public class Expression {

View file

@ -0,0 +1,62 @@
/**********************************************************************
* Created on Mar 25, 2003
*
* 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:
* Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import java.util.LinkedList;
import java.util.List;
/**
* @author jcamelon
*
*/
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;
languageLinkage = linkage;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.dom.IScope#addDeclaration(org.eclipse.cdt.internal.core.dom.Declaration)
*/
public void addDeclaration(Declaration declaration) {
declarations.add( declaration );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.dom.IScope#getDeclarations()
*/
public List getDeclarations() {
return declarations;
}
/**
* @return IScope
*/
public IScope getOwnerScope() {
return ownerScope;
}
/**
* @return String
*/
public String getLanguageLinkage() {
return languageLinkage;
}
}

View file

@ -0,0 +1,73 @@
/**********************************************************************
* Created on Mar 25, 2003
*
* 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:
* Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**
* @author jcamelon
*
*/
public class NamespaceDefinition extends Declaration implements IScope {
private List declarations = new LinkedList();
private IScope ownerScope;
private Name name = null;
public NamespaceDefinition( IScope owner )
{
ownerScope = owner;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.dom.IScope#addDeclaration(org.eclipse.cdt.internal.core.dom.Declaration)
*/
public void addDeclaration(Declaration declaration) {
declarations.add( declaration );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.dom.IScope#getDeclarations()
*/
public List getDeclarations() {
return declarations;
}
/**
* @return String
*/
public Name getName() {
return name;
}
/**
* @return IScope
*/
public IScope getOwnerScope() {
return ownerScope;
}
/**
* Sets the name.
* @param name The name to set
*/
public void setName(Name name) {
this.name = name;
}
}

View file

@ -15,8 +15,6 @@ package org.eclipse.cdt.internal.core.dom;
/** /**
* @author jcamelon * @author jcamelon
* *
* To change this generated comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class PointerOperator { public class PointerOperator {

View file

@ -0,0 +1,68 @@
/**********************************************************************
* Created on Mar 25, 2003
*
* 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:
* Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**
* @author jcamelon
*
*/
public class UsingDeclaration extends Declaration {
private Name mappedName;
private IScope ownerScope;
boolean isTypename = false;
public UsingDeclaration( IScope owner )
{
ownerScope = owner;
}
/**
* @return String
*/
public Name getMappedName() {
return mappedName;
}
/**
* Sets the mapping.
* @param mapping The mapping to set
*/
public void setMappedName(Name mapping) {
this.mappedName = mapping;
}
/**
* @return IScope
*/
public IScope getOwnerScope() {
return ownerScope;
}
/**
* @return boolean
*/
public boolean isTypename() {
return isTypename;
}
/**
* Sets the isTypename.
* @param isTypename The isTypename to set
*/
public void setTypename(boolean isTypename) {
this.isTypename = isTypename;
}
}

View file

@ -0,0 +1,53 @@
/**********************************************************************
* Created on Mar 25, 2003
*
* 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:
* Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**
* @author jcamelon
*
*/
public class UsingDirective extends Declaration {
private Name namespaceName;
private IScope ownerScope;
public UsingDirective( IScope owner )
{
ownerScope = owner;
}
/**
* @return String
*/
public Name getNamespaceName() {
return namespaceName;
}
/**
* Sets the namespaceName.
* @param namespaceName The namespaceName to set
*/
public void setNamespaceName(Name namespaceName) {
this.namespaceName = namespaceName;
}
/**
* @return IScope
*/
public IScope getOwnerScope() {
return ownerScope;
}
}

View file

@ -1,3 +1,9 @@
2003-03-24 John Camelon
Added callback support for namespace definitions.
Updated Parser exception hierarchy.
Added callback support for linkage specifications.
Added callback support for using declarations and directives.
2003-03-23 John Camelon 2003-03-23 John Camelon
Added callback support for class member visibility. Added callback support for class member visibility.
Added callback support for pointer and reference operators on declarators. Added callback support for pointer and reference operators on declarators.

View file

@ -244,13 +244,13 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/** /**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionOperator(org.eclipse.cdt.internal.core.newparser.Token) * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionOperator(org.eclipse.cdt.internal.core.newparser.Token)
*/ */
public void expressionOperator(Object expression, Token operator) throws Exception { public void expressionOperator(Object expression, Token operator) {
} }
/** /**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionTerminal(org.eclipse.cdt.internal.core.newparser.Token) * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#expressionTerminal(org.eclipse.cdt.internal.core.newparser.Token)
*/ */
public void expressionTerminal(Object expression, Token terminal) throws Exception { public void expressionTerminal(Object expression, Token terminal) {
} }
/** /**
@ -467,4 +467,172 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
*/
public void namespaceDefinitionId(Object namespace) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationAbort(java.lang.Object)
*/
public void namespaceDefinitionAbort(Object namespace) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationBegin(java.lang.Object, java.lang.String)
*/
public Object linkageSpecificationBegin(Object container, String literal) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationEnd(java.lang.Object)
*/
public void linkageSpecificationEnd(Object linkageSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveBegin(java.lang.Object)
*/
public Object usingDirectiveBegin(Object container) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
*/
public void usingDirectiveNamespaceId(Object container) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveEnd(java.lang.Object)
*/
public void usingDirectiveEnd(Object directive) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationBegin(java.lang.Object)
*/
public Object usingDeclarationBegin(Object container) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
*/
public void usingDeclarationMapping(Object container, boolean isTypename) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationEnd(java.lang.Object)
*/
public void usingDeclarationEnd(Object directive) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveAbort(java.lang.Object)
*/
public void usingDirectiveAbort(Object directive) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationAbort(java.lang.Object)
*/
public void usingDeclarationAbort(Object declaration) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierBegin(java.lang.Object)
*/
public Object enumSpecifierBegin(Object container) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
*/
public void enumSpecifierId(Object enumSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierAbort(java.lang.Object)
*/
public void enumSpecifierAbort(Object enumSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
// TODO Auto-generated method stub
}
} }

View file

@ -79,7 +79,7 @@ public class SimpleDeclarationWrapper extends DeclSpecifier implements DeclSpeci
// instantiate the right element // instantiate the right element
List clause =currentDeclarator.getParameterDeclarationClause(); List clause =currentDeclarator.getParameterDeclarationClause();
if( clause == null ) if( clause == null && !isTypedef())
{ {
// TODO - this was to get rid of the NULL pointer we've been seeing // TODO - this was to get rid of the NULL pointer we've been seeing
if (currentDeclarator.getName() == null) if (currentDeclarator.getName() == null)
@ -102,6 +102,11 @@ public class SimpleDeclarationWrapper extends DeclSpecifier implements DeclSpeci
} }
} }
} }
else if( isTypedef() )
{
// do nothing just yet
//TODO : update this -- typedefs do not have a parameterdeclarationclause
}
else else
{ {
Parameter [] parameters = (Parameter []) clause.toArray( new Parameter[ clause.size() ]); Parameter [] parameters = (Parameter []) clause.toArray( new Parameter[ clause.size() ]);

View file

@ -30,7 +30,7 @@ public class ExpressionEvaluator implements IParserCallback {
/** /**
* @see org.eclipse.cdt.core.newparser.IParserCallback#expressionOperator(Token) * @see org.eclipse.cdt.core.newparser.IParserCallback#expressionOperator(Token)
*/ */
public void expressionOperator(Object expression, Token operator) throws Exception { public void expressionOperator(Object expression, Token operator) {
int second = popInt(); int second = popInt();
int first; int first;
@ -88,20 +88,20 @@ public class ExpressionEvaluator implements IParserCallback {
stack.push( new Integer( ( second == 0 ) ? 1 : 0 ) ); stack.push( new Integer( ( second == 0 ) ? 1 : 0 ) );
break; break;
default: default:
throw new ExpressionException("Unhandled operator: " + operator ); // throw new ExpressionException("Unhandled operator: " + operator );
} }
} }
/** /**
* @see org.eclipse.cdt.core.newparser.IParserCallback#expressionTerminal(Token) * @see org.eclipse.cdt.core.newparser.IParserCallback#expressionTerminal(Token)
*/ */
public void expressionTerminal(Object expression, Token terminal) throws Exception { public void expressionTerminal(Object expression, Token terminal) {
switch (terminal.getType()) { switch (terminal.getType()) {
case Token.tINTEGER: case Token.tINTEGER:
stack.push(new Integer(terminal.getImage())); stack.push(new Integer(terminal.getImage()));
break; break;
default: default:
throw new ExpressionException("Unhandled terminal: " + terminal.getImage()); // throw new ExpressionException("Unhandled terminal: " + terminal.getImage());
} }
} }
@ -311,7 +311,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionAbort(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionAbort(java.lang.Object)
*/ */
public void expressionAbort(Object expression) { public void expressionAbort(Object expression) {
// TODO Auto-generated method stub
} }
@ -319,7 +319,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void classMemberVisibility(Object classSpecifier, Token visibility) { public void classMemberVisibility(Object classSpecifier, Token visibility) {
// TODO Auto-generated method stub
} }
@ -327,7 +327,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public Object pointerOperatorBegin(Object container) { public Object pointerOperatorBegin(Object container) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -335,7 +335,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorEnd(java.lang.Object)
*/ */
public void pointerOperatorEnd(Object ptrOperator) { public void pointerOperatorEnd(Object ptrOperator) {
// TODO Auto-generated method stub
} }
@ -343,7 +343,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object)
*/ */
public void pointerOperatorName(Object ptrOperator) { public void pointerOperatorName(Object ptrOperator) {
// TODO Auto-generated method stub
} }
@ -351,7 +351,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void pointerOperatorType(Object ptrOperator, Token type) { public void pointerOperatorType(Object ptrOperator, Token type) {
// TODO Auto-generated method stub
} }
@ -359,7 +359,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) { public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
// TODO Auto-generated method stub
} }
@ -367,7 +367,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void declaratorCVModifier(Object declarator, Token modifier) { public void declaratorCVModifier(Object declarator, Token modifier) {
// TODO Auto-generated method stub
} }
@ -375,7 +375,7 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayBegin(java.lang.Object)
*/ */
public Object arrayDeclaratorBegin(Object declarator) { public Object arrayDeclaratorBegin(Object declarator) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -383,14 +383,14 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayEnd(java.lang.Object)
*/ */
public void arrayDeclaratorEnd(Object arrayQualifier ) { public void arrayDeclaratorEnd(Object arrayQualifier ) {
// TODO Auto-generated method stub; ;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#exceptionSpecificationTypename(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#exceptionSpecificationTypename(java.lang.Object)
*/ */
public void declaratorThrowExceptionName(Object declarator) { public void declaratorThrowExceptionName(Object declarator) {
// TODO Auto-generated method stub
} }
@ -398,7 +398,170 @@ public class ExpressionEvaluator implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object)
*/ */
public void declaratorThrowsException(Object declarator) { public void declaratorThrowsException(Object declarator) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
*/
public void namespaceDefinitionId(Object namespace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationAbort(java.lang.Object)
*/
public void namespaceDefinitionAbort(Object namespace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationBegin(java.lang.Object, java.lang.String)
*/
public Object linkageSpecificationBegin(Object container, String literal) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationEnd(java.lang.Object)
*/
public void linkageSpecificationEnd(Object linkageSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveBegin(java.lang.Object)
*/
public Object usingDirectiveBegin(Object container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
*/
public void usingDirectiveNamespaceId(Object container) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveEnd(java.lang.Object)
*/
public void usingDirectiveEnd(Object directive) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationBegin(java.lang.Object)
*/
public Object usingDeclarationBegin(Object container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
*/
public void usingDeclarationMapping(Object container, boolean isTypename) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationEnd(java.lang.Object)
*/
public void usingDeclarationEnd(Object directive) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveAbort(java.lang.Object)
*/
public void usingDirectiveAbort(Object directive) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationAbort(java.lang.Object)
*/
public void usingDeclarationAbort(Object declaration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierBegin(java.lang.Object)
*/
public Object enumSpecifierBegin(Object container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
*/
public void enumSpecifierId(Object enumSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierAbort(java.lang.Object)
*/
public void enumSpecifierAbort(Object enumSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
} }

View file

@ -67,12 +67,40 @@ public interface IParserCallback {
public void baseSpecifierEnd( Object baseSpecifier ); public void baseSpecifierEnd( Object baseSpecifier );
public Object expressionBegin( Object container ); public Object expressionBegin( Object container );
public void expressionOperator(Object expression, Token operator) throws Exception; public void expressionOperator(Object expression, Token operator);
public void expressionTerminal(Object expression, Token terminal) throws Exception; public void expressionTerminal(Object expression, Token terminal);
public void expressionAbort( Object expression ); public void expressionAbort( Object expression );
public void expressionEnd(Object expression ); public void expressionEnd(Object expression );
public Object elaboratedTypeSpecifierBegin( Object container, Token classKey ); public Object elaboratedTypeSpecifierBegin( Object container, Token classKey );
public void elaboratedTypeSpecifierName( Object elab ); public void elaboratedTypeSpecifierName( Object elab );
public void elaboratedTypeSpecifierEnd( Object elab ); public void elaboratedTypeSpecifierEnd( Object elab );
public Object namespaceDefinitionBegin( Object container );
public void namespaceDefinitionId( Object namespace );
public void namespaceDefinitionAbort( Object namespace );
public void namespaceDefinitionEnd( Object namespace );
public Object linkageSpecificationBegin( Object container, String literal );
public void linkageSpecificationEnd( Object linkageSpec );
public Object usingDirectiveBegin( Object container );
public void usingDirectiveNamespaceId( Object directive );
public void usingDirectiveAbort( Object directive );
public void usingDirectiveEnd( Object directive );
public Object usingDeclarationBegin( Object container );
public void usingDeclarationMapping( Object declaration, boolean isTypeName );
public void usingDeclarationAbort( Object declaration );
public void usingDeclarationEnd( Object declaration );
public Object enumSpecifierBegin( Object container );
public void enumSpecifierId( Object enumSpec );
public void enumSpecifierAbort( Object enumSpec );
public void enumSpecifierEnd( Object enumSpec );
public Object enumDefinitionBegin( Object enumSpec );
public void enumDefinitionId( Object enumDefn );
public void enumDefinitionEnd( Object enumDefn );
} }

View file

@ -6,7 +6,6 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#translationUnitBegin() * @see org.eclipse.cdt.internal.core.parser.IParserCallback#translationUnitBegin()
*/ */
public Object translationUnitBegin() { public Object translationUnitBegin() {
// TODO Auto-generated method stub
return null; return null;
} }
@ -14,39 +13,30 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#translationUnitEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#translationUnitEnd(java.lang.Object)
*/ */
public void translationUnitEnd(Object unit) { public void translationUnitEnd(Object unit) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionBegin(java.lang.String, int) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionBegin(java.lang.String, int)
*/ */
public void inclusionBegin(String includeFile, int offset) { public void inclusionBegin(String includeFile, int offset) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionEnd() * @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionEnd()
*/ */
public void inclusionEnd() { public void inclusionEnd() {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#macro(java.lang.String, int) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#macro(java.lang.String, int)
*/ */
public void macro(String macroName, int offset) { public void macro(String macroName, int offset) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationBegin(java.lang.Object)
*/ */
public Object simpleDeclarationBegin(Object Container) { public Object simpleDeclarationBegin(Object Container) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -54,31 +44,24 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void simpleDeclSpecifier(Object Container, Token specifier) { public void simpleDeclSpecifier(Object Container, Token specifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclSpecifierName(java.lang.Object)
*/ */
public void simpleDeclSpecifierName(Object declaration) { public void simpleDeclSpecifierName(Object declaration) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
*/ */
public void simpleDeclarationEnd(Object declaration) { public void simpleDeclarationEnd(Object declaration) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationBegin(java.lang.Object)
*/ */
public Object parameterDeclarationBegin(Object Container) { public Object parameterDeclarationBegin(Object Container) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -86,31 +69,24 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationEnd(java.lang.Object)
*/ */
public void parameterDeclarationEnd(Object declaration) { public void parameterDeclarationEnd(Object declaration) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#nameBegin(org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#nameBegin(org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void nameBegin(Token firstToken) { public void nameBegin(Token firstToken) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#nameEnd(org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#nameEnd(org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void nameEnd(Token lastToken) { public void nameEnd(Token lastToken) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorBegin(java.lang.Object)
*/ */
public Object declaratorBegin(Object container) { public Object declaratorBegin(Object container) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -118,47 +94,36 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorId(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorId(java.lang.Object)
*/ */
public void declaratorId(Object declarator) { public void declaratorId(Object declarator) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorAbort(java.lang.Object, java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorAbort(java.lang.Object, java.lang.Object)
*/ */
public void declaratorAbort(Object container, Object declarator) { public void declaratorAbort(Object container, Object declarator) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void declaratorCVModifier(Object declarator, Token modifier) { public void declaratorCVModifier(Object declarator, Token modifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowExceptionName(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowExceptionName(java.lang.Object)
*/ */
public void declaratorThrowExceptionName(Object exceptionSpec) { public void declaratorThrowExceptionName(Object exceptionSpec) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorEnd(java.lang.Object)
*/ */
public void declaratorEnd(Object declarator) { public void declaratorEnd(Object declarator) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayDeclaratorBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayDeclaratorBegin(java.lang.Object)
*/ */
public Object arrayDeclaratorBegin(Object declarator) { public Object arrayDeclaratorBegin(Object declarator) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -166,14 +131,12 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayDeclaratorEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#arrayDeclaratorEnd(java.lang.Object)
*/ */
public void arrayDeclaratorEnd(Object arrayQualifier) { public void arrayDeclaratorEnd(Object arrayQualifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorBegin(java.lang.Object)
*/ */
public Object pointerOperatorBegin(Object container) { public Object pointerOperatorBegin(Object container) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -181,39 +144,30 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorType(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void pointerOperatorType(Object ptrOperator, Token type) { public void pointerOperatorType(Object ptrOperator, Token type) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorName(java.lang.Object)
*/ */
public void pointerOperatorName(Object ptrOperator) { public void pointerOperatorName(Object ptrOperator) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorCVModifier(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) { public void pointerOperatorCVModifier(Object ptrOperator, Token modifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#pointerOperatorEnd(java.lang.Object)
*/ */
public void pointerOperatorEnd(Object ptrOperator) { public void pointerOperatorEnd(Object ptrOperator) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#argumentsBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#argumentsBegin(java.lang.Object)
*/ */
public Object argumentsBegin(Object declarator) { public Object argumentsBegin(Object declarator) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -221,15 +175,12 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#argumentsEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#argumentsEnd(java.lang.Object)
*/ */
public void argumentsEnd(Object parameterDeclarationClause) { public void argumentsEnd(Object parameterDeclarationClause) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyBegin(java.lang.Object)
*/ */
public Object functionBodyBegin(Object declaration) { public Object functionBodyBegin(Object declaration) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -237,15 +188,12 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyEnd(java.lang.Object)
*/ */
public void functionBodyEnd(Object functionBody) { public void functionBodyEnd(Object functionBody) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public Object classSpecifierBegin(Object container, Token classKey) { public Object classSpecifierBegin(Object container, Token classKey) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -253,47 +201,36 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierName(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierName(java.lang.Object)
*/ */
public void classSpecifierName(Object classSpecifier) { public void classSpecifierName(Object classSpecifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object)
*/ */
public void classSpecifierAbort(Object classSpecifier) { public void classSpecifierAbort(Object classSpecifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object)
*/ */
public void classSpecifierSafe(Object classSpecifier) { public void classSpecifierSafe(Object classSpecifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classMemberVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void classMemberVisibility(Object classSpecifier, Token visibility) { public void classMemberVisibility(Object classSpecifier, Token visibility) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object)
*/ */
public void classSpecifierEnd(Object classSpecifier) { public void classSpecifierEnd(Object classSpecifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierBegin(java.lang.Object)
*/ */
public Object baseSpecifierBegin(Object containingClassSpec) { public Object baseSpecifierBegin(Object containingClassSpec) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -301,79 +238,61 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierName(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierName(java.lang.Object)
*/ */
public void baseSpecifierName(Object baseSpecifier) { public void baseSpecifierName(Object baseSpecifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVisibility(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void baseSpecifierVisibility(Object baseSpecifier, Token visibility) { public void baseSpecifierVisibility(Object baseSpecifier, Token visibility) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVirtual(java.lang.Object, boolean) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierVirtual(java.lang.Object, boolean)
*/ */
public void baseSpecifierVirtual(Object baseSpecifier, boolean virtual) { public void baseSpecifierVirtual(Object baseSpecifier, boolean virtual) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierEnd(java.lang.Object)
*/ */
public void baseSpecifierEnd(Object baseSpecifier) { public void baseSpecifierEnd(Object baseSpecifier) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionBegin(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionBegin(java.lang.Object)
*/ */
public Object expressionBegin(Object container) { public Object expressionBegin(Object container) {
// TODO Auto-generated method stub
return null; return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionOperator(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionOperator(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void expressionOperator(Object expression, Token operator) throws Exception { public void expressionOperator(Object expression, Token operator) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionTerminal(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionTerminal(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public void expressionTerminal(Object expression, Token terminal) throws Exception { public void expressionTerminal(Object expression, Token terminal) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionAbort(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionAbort(java.lang.Object)
*/ */
public void expressionAbort(Object expression) { public void expressionAbort(Object expression) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#expressionEnd(java.lang.Object)
*/ */
public void expressionEnd(Object expression) { public void expressionEnd(Object expression) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
*/ */
public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) { public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) {
// TODO Auto-generated method stub
return null; return null;
} }
@ -381,24 +300,170 @@ public class NullParserCallback implements IParserCallback {
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object)
*/ */
public void elaboratedTypeSpecifierName(Object elab) { public void elaboratedTypeSpecifierName(Object elab) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierEnd(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierEnd(java.lang.Object)
*/ */
public void elaboratedTypeSpecifierEnd(Object elab) { public void elaboratedTypeSpecifierEnd(Object elab) {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object) * @see org.eclipse.cdt.internal.core.parser.IParserCallback#declaratorThrowsException(java.lang.Object)
*/ */
public void declaratorThrowsException(Object declarator) { public void declaratorThrowsException(Object declarator) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationId(java.lang.Object)
*/
public void namespaceDefinitionId(Object namespace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationAbort(java.lang.Object)
*/
public void namespaceDefinitionAbort(Object namespace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationBegin(java.lang.Object, java.lang.String)
*/
public Object linkageSpecificationBegin(Object container, String literal) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#linkageSpecificationEnd(java.lang.Object)
*/
public void linkageSpecificationEnd(Object linkageSpec) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveBegin(java.lang.Object)
*/
public Object usingDirectiveBegin(Object container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveNamespaceId(java.lang.Object)
*/
public void usingDirectiveNamespaceId(Object container) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveEnd(java.lang.Object)
*/
public void usingDirectiveEnd(Object directive) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationBegin(java.lang.Object)
*/
public Object usingDeclarationBegin(Object container) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationMapping(java.lang.Object)
*/
public void usingDeclarationMapping(Object container, boolean isTypename) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationEnd(java.lang.Object)
*/
public void usingDeclarationEnd(Object directive) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDirectiveAbort(java.lang.Object)
*/
public void usingDirectiveAbort(Object directive) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#usingDeclarationAbort(java.lang.Object)
*/
public void usingDeclarationAbort(Object declaration) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierBegin(java.lang.Object)
*/
public Object enumSpecifierBegin(Object container) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierId(java.lang.Object)
*/
public void enumSpecifierId(Object enumSpec) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierAbort(java.lang.Object)
*/
public void enumSpecifierAbort(Object enumSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
}
} }

View file

@ -59,7 +59,7 @@ c, quick);
private static int parseCount = 0; private static int parseCount = 0;
public boolean parse() throws Exception { public boolean parse() throws Backtrack {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
translationUnit(); translationUnit();
System.out.println("Parse " + (++parseCount) + ": " System.out.println("Parse " + (++parseCount) + ": "
@ -74,7 +74,7 @@ c, quick);
* : (declaration)* * : (declaration)*
* *
*/ */
protected void translationUnit() throws Exception { protected void translationUnit() throws Backtrack {
Object translationUnit = callback.translationUnitBegin(); Object translationUnit = callback.translationUnitBegin();
Token lastBacktrack = null; Token lastBacktrack = null;
Token lastToken; Token lastToken;
@ -113,6 +113,137 @@ c, quick);
} }
} }
/**
*
* The merger of using-declaration and using-directive.
*
* using-declaration:
* using typename? ::? nested-name-specifier unqualified-id ;
* using :: unqualified-id ;
* using-directive:
* using namespace ::? nested-name-specifier? namespace-name ;
*
* @param container
* @throws Backtrack
*/
protected void usingClause( Object container ) throws Backtrack
{
consume( Token.t_using );
if( LT(1) == Token.t_namespace )
{
Object directive = callback.usingDirectiveBegin( container );
// using-directive
consume( Token.t_namespace );
// optional :: and nested classes handled in name
if( LT(1) == Token.tIDENTIFIER || LT(1) == Token.tCOLONCOLON )
{
name();
callback.usingDirectiveNamespaceId( directive );
}
else
{
callback.usingDirectiveAbort(directive);
throw backtrack;
}
if( LT(1) == Token.tSEMI )
{
consume( Token.tSEMI );
callback.usingDirectiveEnd( directive );
return;
}
else
{
callback.usingDirectiveAbort(directive);
throw backtrack;
}
}
else
{
Object usingDeclaration = callback.usingDeclarationBegin( container );
boolean typeName = false;
if( LT(1) == Token.t_typename )
{
typeName = true;
consume( Token.t_typename );
}
if( LT(1) == Token.tIDENTIFIER || LT(1) == Token.tCOLONCOLON )
{
// optional :: and nested classes handled in name
name();
callback.usingDeclarationMapping( usingDeclaration, typeName );
}
else
{
callback.usingDeclarationAbort( usingDeclaration );
throw backtrack;
}
if( LT(1) == Token.tSEMI )
{
consume( Token.tSEMI );
callback.usingDeclarationEnd( usingDeclaration );
}
else
{
callback.usingDeclarationAbort( usingDeclaration );
throw backtrack;
}
}
}
/**
* linkageSpecification
* : extern "string literal" declaration
* | extern "string literal" { declaration-seq }
* @param container
* @throws Exception
*/
protected void linkageSpecification( Object container ) throws Backtrack
{
consume( Token.t_extern );
if( LT(1) != Token.tSTRING )
throw backtrack;
Object linkageSpec = callback.linkageSpecificationBegin( container, consume( Token.tSTRING ).getImage() );
if( LT(1) == Token.tLBRACE )
{
consume(Token.tLBRACE);
linkageDeclarationLoop:
while (LT(1) != Token.tRBRACE) {
Token lastToken = LA(1);
switch (LT(1)) {
case Token.tRBRACE:
consume(Token.tRBRACE);
break linkageDeclarationLoop;
default:
declaration(linkageSpec);
}
if (lastToken == LA(1))
consumeToNextSemicolon();
}
// consume the }
consume();
callback.linkageSpecificationEnd( linkageSpec );
}
else // single declaration
{
declaration( linkageSpec );
callback.linkageSpecificationEnd( linkageSpec );
}
}
/** /**
* declaration * declaration
* : {"asm"} asmDefinition * : {"asm"} asmDefinition
@ -131,19 +262,17 @@ c, quick);
* - explicitInstantiation and explicitSpecialization into * - explicitInstantiation and explicitSpecialization into
* templateDeclaration * templateDeclaration
*/ */
protected void declaration( Object container ) throws Exception { protected void declaration( Object container ) throws Backtrack {
switch (LT(1)) { switch (LT(1)) {
case Token.t_asm: case Token.t_asm:
// asmDefinition( ); // asmDefinition( );
consume(); consume();
return; return;
case Token.t_namespace: case Token.t_namespace:
// namespaceDefinition(); namespaceDefinition( container );
consume();
return; return;
case Token.t_using: case Token.t_using:
// usingDeclaration(); usingClause( container );
consume();
return; return;
case Token.t_export: case Token.t_export:
case Token.t_template: case Token.t_template:
@ -151,19 +280,61 @@ c, quick);
consume(); consume();
return; return;
case Token.t_extern: case Token.t_extern:
if (LT(2) == Token.tSTRING) linkageSpecification( container );
{ return;
// linkageSpecification();
consume();
return;
}
// else drop through
default: default:
simpleDeclaration( container ); simpleDeclaration( container );
} }
} }
/**
* namespaceDefinition()
*
* namespace-definition:
* namespace identifier { namespace-body } | namespace { namespace-body }
* namespace-body:
* declaration-seq?
*
*/
protected void namespaceDefinition( Object container ) throws Backtrack
{
consume( Token.t_namespace);
Object namespace = callback.namespaceDefinitionBegin( container );
// optional name
if( LT(1) == Token.tIDENTIFIER )
{
name();
callback.namespaceDefinitionId( namespace );
}
if( LT(1) == Token.tLBRACE )
{
consume();
namepsaceDeclarationLoop:
while (LT(1) != Token.tRBRACE) {
Token lastToken = LA(1);
switch (LT(1)) {
case Token.tRBRACE:
consume(Token.tRBRACE);
break namepsaceDeclarationLoop;
default:
declaration(namespace);
}
if (lastToken == LA(1))
consumeToNextSemicolon();
}
// consume the }
consume();
callback.namespaceDefinitionEnd( namespace );
}
else
{
callback.namespaceDefinitionAbort( namespace );
throw backtrack;
}
}
/** /**
@ -177,7 +348,7 @@ c, quick);
* To do: * To do:
* - work in ctorInitializer and functionTryBlock * - work in ctorInitializer and functionTryBlock
*/ */
protected void simpleDeclaration( Object container ) throws Exception { protected void simpleDeclaration( Object container ) throws Backtrack {
Object simpleDecl = callback.simpleDeclarationBegin( container); Object simpleDecl = callback.simpleDeclarationBegin( container);
declSpecifierSeq(simpleDecl, false); declSpecifierSeq(simpleDecl, false);
@ -240,7 +411,7 @@ c, quick);
} }
protected void parameterDeclaration( Object containerObject ) throws Exception protected void parameterDeclaration( Object containerObject ) throws Backtrack
{ {
Object parameterDecl = callback.parameterDeclarationBegin( containerObject ); Object parameterDecl = callback.parameterDeclarationBegin( containerObject );
declSpecifierSeq( parameterDecl, true ); declSpecifierSeq( parameterDecl, true );
@ -274,7 +445,7 @@ c, quick);
* - folded elaboratedTypeSpecifier into classSpecifier and enumSpecifier * - folded elaboratedTypeSpecifier into classSpecifier and enumSpecifier
* - find template names in name * - find template names in name
*/ */
protected void declSpecifierSeq( Object decl, boolean parm ) throws Exception { protected void declSpecifierSeq( Object decl, boolean parm ) throws Backtrack {
boolean encounteredTypename = false; boolean encounteredTypename = false;
boolean encounteredRawType = false; boolean encounteredRawType = false;
declSpecifiers: declSpecifiers:
@ -345,10 +516,22 @@ c, quick);
name(); name();
callback.elaboratedTypeSpecifierName( elab ); callback.elaboratedTypeSpecifierName( elab );
callback.elaboratedTypeSpecifierEnd( elab ); callback.elaboratedTypeSpecifierEnd( elab );
break;
} }
case Token.t_enum: case Token.t_enum:
enumSpecifier(decl); try
{
enumSpecifier(decl);
return;
}
catch( Backtrack bt )
{
// this is an elaborated class specifier
Object elab = callback.elaboratedTypeSpecifierBegin( decl, consume() );
name();
callback.elaboratedTypeSpecifierName( elab );
callback.elaboratedTypeSpecifierEnd( elab );
}
break; break;
default: default:
break declSpecifiers; break declSpecifiers;
@ -356,6 +539,13 @@ c, quick);
} }
} }
protected void identifier() throws Backtrack {
Token first = consume(Token.tIDENTIFIER); // throws backtrack if its not that
callback.nameBegin(first);
callback.nameEnd(first);
}
/** /**
* name * name
* : ("::")? name2 ("::" name2)* * : ("::")? name2 ("::" name2)*
@ -367,7 +557,7 @@ c, quick);
* - Handle template ids * - Handle template ids
* - Handle unqualifiedId * - Handle unqualifiedId
*/ */
protected boolean name() throws Exception { protected void name() throws Backtrack {
Token first = LA(1); Token first = LA(1);
Token last = null; Token last = null;
@ -402,14 +592,13 @@ c, quick);
callback.nameEnd(last); callback.nameEnd(last);
return true;
} }
/** /**
* cvQualifier * cvQualifier
* : "const" | "volatile" * : "const" | "volatile"
*/ */
protected void cvQualifier( Object ptrOp ) throws Exception { protected void cvQualifier( Object ptrOp ) throws Backtrack {
switch (LT(1)) { switch (LT(1)) {
case Token.t_const: case Token.t_const:
case Token.t_volatile: case Token.t_volatile:
@ -427,7 +616,7 @@ c, quick);
* To Do: * To Do:
* - handle initializers * - handle initializers
*/ */
protected void initDeclarator( Object owner ) throws Exception { protected void initDeclarator( Object owner ) throws Backtrack {
Object declarator = declarator( owner ); Object declarator = declarator( owner );
// handle = initializerClause // handle = initializerClause
@ -503,7 +692,7 @@ c, quick);
* declaratorId * declaratorId
* : name * : name
*/ */
protected Object declarator( Object container ) throws Exception { protected Object declarator( Object container ) throws Backtrack {
do do
{ {
@ -632,7 +821,7 @@ c, quick);
* | "&" * | "&"
* | name "*" (cvQualifier)* * | name "*" (cvQualifier)*
*/ */
protected void ptrOperator(Object owner) throws Exception { protected void ptrOperator(Object owner) throws Backtrack {
int t = LT(1); int t = LT(1);
Object ptrOp = callback.pointerOperatorBegin( owner ); Object ptrOp = callback.pointerOperatorBegin( owner );
@ -671,46 +860,84 @@ c, quick);
/** /**
* enumSpecifier * enumSpecifier:
* "enum" (name)? "{" (enumerator-list) "}" * "enum" (name)? "{" (enumerator-list) "}"
* enumerator-list:
* enumerator-definition
* enumerator-list , enumerator-definition
* enumerator-definition:
* enumerator
* enumerator = constant-expression
* enumerator: identifier
*/ */
protected void enumSpecifier( Object owner ) throws Exception protected void enumSpecifier( Object owner ) throws Backtrack
{ {
if( LT(1) != Token.t_enum ) consume( Token.t_enum );
throw backtrack;
consume();
// insert beginEnum callback here Object enumSpecifier = callback.enumSpecifierBegin( owner );
if( LT(1) == Token.tIDENTIFIER ) if( LT(1) == Token.tIDENTIFIER )
consume(); {
identifier();
callback.enumSpecifierId( enumSpecifier );
}
if( LT(1) == Token.tLBRACE ) if( LT(1) == Token.tLBRACE )
{ {
consume(); consume( Token.tLBRACE );
// for the time being to get the CModel working ignore the enumerator list
int depth = 1; while( LT(1) != Token.tRBRACE )
while (depth > 0) { {
switch (consume().getType()) { Object defn;
case Token.tRBRACE: if( LT(1) == Token.tIDENTIFIER )
--depth; {
break; defn = callback.enumDefinitionBegin( enumSpecifier );
case Token.tLBRACE: identifier();
++depth; callback.enumDefinitionId( defn );
break;
} }
else
{
callback.enumSpecifierAbort( enumSpecifier );
throw backtrack;
}
if( LT(1) == Token.tASSIGN )
{
consume( Token.tASSIGN );
Object expression = callback.expressionBegin( defn );
constantExpression( expression );
callback.expressionEnd( expression );
}
callback.enumDefinitionEnd( defn );
if( LT(1) == Token.tRBRACE )
break;
if( LT(1) != Token.tCOMMA )
{
callback.enumSpecifierAbort( enumSpecifier );
throw backtrack;
}
consume(Token.tCOMMA); // if we made it this far
} }
consume( Token.tRBRACE );
callback.enumSpecifierEnd( enumSpecifier );
}
else
{
// enumSpecifierAbort
throw backtrack;
} }
// insert endEnum callback here
} }
/** /**
* classSpecifier * classSpecifier
* : classKey name (baseClause)? "{" (memberSpecification)* "}" * : classKey name (baseClause)? "{" (memberSpecification)* "}"
*/ */
protected void classSpecifier( Object owner ) throws Exception { protected void classSpecifier( Object owner ) throws Backtrack {
Token classKey = null; Token classKey = null;
Token mark = mark(); Token mark = mark();
@ -756,7 +983,7 @@ c, quick);
memberDeclarationLoop: memberDeclarationLoop:
while (LT(1) != Token.tRBRACE) { while (LT(1) != Token.tRBRACE) {
Token lastToken = currToken; Token lastToken = LA(1);
switch (LT(1)) { switch (LT(1)) {
case Token.t_public: case Token.t_public:
@ -771,7 +998,7 @@ c, quick);
default: default:
declaration(classSpec); declaration(classSpec);
} }
if (lastToken == currToken) if (lastToken == LA(1))
consumeToNextSemicolon(); consumeToNextSemicolon();
} }
// consume the } // consume the }
@ -781,7 +1008,7 @@ c, quick);
callback.classSpecifierEnd(classSpec); callback.classSpecifierEnd(classSpec);
} }
protected void baseSpecifier( Object classSpecOwner ) throws Exception { protected void baseSpecifier( Object classSpecOwner ) throws Backtrack {
Object baseSpecifier = callback.baseSpecifierBegin( classSpecOwner ); Object baseSpecifier = callback.baseSpecifierBegin( classSpecOwner );
@ -795,8 +1022,7 @@ c, quick);
case Token.t_public: case Token.t_public:
case Token.t_protected: case Token.t_protected:
case Token.t_private: case Token.t_private:
callback.baseSpecifierVisibility( baseSpecifier, currToken ); callback.baseSpecifierVisibility( baseSpecifier, consume() );
consume();
break; break;
case Token.tCOLONCOLON: case Token.tCOLONCOLON:
case Token.tIDENTIFIER: case Token.tIDENTIFIER:
@ -815,12 +1041,12 @@ c, quick);
callback.baseSpecifierEnd( baseSpecifier ); callback.baseSpecifierEnd( baseSpecifier );
} }
protected void functionBody() throws Exception { protected void functionBody() throws Backtrack {
compoundStatement(); compoundStatement();
} }
// Statements // Statements
protected void statement() throws Exception { protected void statement() throws Backtrack {
Object expression = null; Object expression = null;
switch (LT(1)) { switch (LT(1)) {
case Token.t_case: case Token.t_case:
@ -952,15 +1178,15 @@ c, quick);
} }
} }
protected void condition() throws Exception { protected void condition() throws Backtrack {
// TO DO // TO DO
} }
protected void forInitStatement() throws Exception { protected void forInitStatement() throws Backtrack {
// TO DO // TO DO
} }
protected void compoundStatement() throws Exception { protected void compoundStatement() throws Backtrack {
consume(Token.tLBRACE); consume(Token.tLBRACE);
while (LT(1) != Token.tRBRACE) while (LT(1) != Token.tRBRACE)
statement(); statement();
@ -968,11 +1194,11 @@ c, quick);
} }
// Expressions // Expressions
protected void constantExpression( Object expression ) throws Exception { protected void constantExpression( Object expression ) throws Backtrack {
conditionalExpression( expression ); conditionalExpression( expression );
} }
public void expression( Object expression ) throws Exception { public void expression( Object expression ) throws Backtrack {
assignmentExpression( expression ); assignmentExpression( expression );
while (LT(1) == Token.tCOMMA) { while (LT(1) == Token.tCOMMA) {
@ -982,7 +1208,7 @@ c, quick);
} }
} }
protected void assignmentExpression( Object expression ) throws Exception { protected void assignmentExpression( Object expression ) throws Backtrack {
if (LT(1) == Token.t_throw) { if (LT(1) == Token.t_throw) {
throwExpression(expression); throwExpression(expression);
return; return;
@ -1010,7 +1236,7 @@ c, quick);
} }
} }
protected void throwExpression( Object expression ) throws Exception { protected void throwExpression( Object expression ) throws Backtrack {
consume(Token.t_throw); consume(Token.t_throw);
try { try {
@ -1019,7 +1245,7 @@ c, quick);
} }
} }
protected boolean conditionalExpression( Object expression ) throws Exception { protected boolean conditionalExpression( Object expression ) throws Backtrack {
logicalOrExpression( expression ); logicalOrExpression( expression );
if (LT(1) == Token.tQUESTION) { if (LT(1) == Token.tQUESTION) {
@ -1032,7 +1258,7 @@ c, quick);
return false; return false;
} }
protected void logicalOrExpression( Object expression ) throws Exception { protected void logicalOrExpression( Object expression ) throws Backtrack {
logicalAndExpression( expression ); logicalAndExpression( expression );
while (LT(1) == Token.tOR) { while (LT(1) == Token.tOR) {
@ -1042,7 +1268,7 @@ c, quick);
} }
} }
protected void logicalAndExpression( Object expression ) throws Exception { protected void logicalAndExpression( Object expression ) throws Backtrack {
inclusiveOrExpression( expression ); inclusiveOrExpression( expression );
while (LT(1) == Token.tAND) { while (LT(1) == Token.tAND) {
@ -1052,7 +1278,7 @@ c, quick);
} }
} }
protected void inclusiveOrExpression( Object expression ) throws Exception { protected void inclusiveOrExpression( Object expression ) throws Backtrack {
exclusiveOrExpression(expression); exclusiveOrExpression(expression);
while (LT(1) == Token.tBITOR) { while (LT(1) == Token.tBITOR) {
@ -1062,7 +1288,7 @@ c, quick);
} }
} }
protected void exclusiveOrExpression( Object expression ) throws Exception { protected void exclusiveOrExpression( Object expression ) throws Backtrack {
andExpression( expression ); andExpression( expression );
while (LT(1) == Token.tXOR) { while (LT(1) == Token.tXOR) {
@ -1072,7 +1298,7 @@ c, quick);
} }
} }
protected void andExpression( Object expression ) throws Exception { protected void andExpression( Object expression ) throws Backtrack {
equalityExpression(expression); equalityExpression(expression);
while (LT(1) == Token.tAMPER) { while (LT(1) == Token.tAMPER) {
@ -1082,7 +1308,7 @@ c, quick);
} }
} }
protected void equalityExpression(Object expression) throws Exception { protected void equalityExpression(Object expression) throws Backtrack {
relationalExpression(expression); relationalExpression(expression);
for (;;) { for (;;) {
@ -1099,7 +1325,7 @@ c, quick);
} }
} }
protected void relationalExpression(Object expression) throws Exception { protected void relationalExpression(Object expression) throws Backtrack {
shiftExpression(expression); shiftExpression(expression);
for (;;) { for (;;) {
@ -1121,7 +1347,7 @@ c, quick);
} }
} }
protected void shiftExpression( Object expression ) throws Exception { protected void shiftExpression( Object expression ) throws Backtrack {
additiveExpression(expression); additiveExpression(expression);
for (;;) { for (;;) {
@ -1138,7 +1364,7 @@ c, quick);
} }
} }
protected void additiveExpression( Object expression ) throws Exception { protected void additiveExpression( Object expression ) throws Backtrack {
multiplicativeExpression(expression); multiplicativeExpression(expression);
for (;;) { for (;;) {
@ -1155,7 +1381,7 @@ c, quick);
} }
} }
protected void multiplicativeExpression( Object expression ) throws Exception { protected void multiplicativeExpression( Object expression ) throws Backtrack {
pmExpression( expression ); pmExpression( expression );
for (;;) { for (;;) {
@ -1173,7 +1399,7 @@ c, quick);
} }
} }
protected void pmExpression( Object expression ) throws Exception { protected void pmExpression( Object expression ) throws Backtrack {
castExpression( expression ); castExpression( expression );
for (;;) { for (;;) {
@ -1195,7 +1421,7 @@ c, quick);
* : unaryExpression * : unaryExpression
* | "(" typeId ")" castExpression * | "(" typeId ")" castExpression
*/ */
protected void castExpression( Object expression ) throws Exception { protected void castExpression( Object expression ) throws Backtrack {
// TO DO: we need proper symbol checkint to ensure type name // TO DO: we need proper symbol checkint to ensure type name
if (false && LT(1) == Token.tLPAREN) { if (false && LT(1) == Token.tLPAREN) {
Token mark = mark(); Token mark = mark();
@ -1215,7 +1441,7 @@ c, quick);
unaryExpression(expression); unaryExpression(expression);
} }
protected void typeId() throws Exception { protected void typeId() throws Backtrack {
try { try {
name(); name();
return; return;
@ -1223,7 +1449,7 @@ c, quick);
} }
} }
protected void deleteExpression( Object expression ) throws Exception { protected void deleteExpression( Object expression ) throws Backtrack {
if (LT(1) == Token.tCOLONCOLON) { if (LT(1) == Token.tCOLONCOLON) {
// global scope // global scope
consume(); consume();
@ -1240,7 +1466,7 @@ c, quick);
castExpression( expression ); castExpression( expression );
} }
protected void newExpression( Object expression ) throws Exception { protected void newExpression( Object expression ) throws Backtrack {
if (LT(1) == Token.tCOLONCOLON) { if (LT(1) == Token.tCOLONCOLON) {
// global scope // global scope
consume(); consume();
@ -1251,7 +1477,7 @@ c, quick);
//TODO: finish this horrible mess... //TODO: finish this horrible mess...
} }
protected void unaryExpression( Object expression ) throws Exception { protected void unaryExpression( Object expression ) throws Backtrack {
switch (LT(1)) { switch (LT(1)) {
case Token.tSTAR: case Token.tSTAR:
case Token.tAMPER: case Token.tAMPER:
@ -1298,7 +1524,7 @@ c, quick);
} }
} }
protected void postfixExpression( Object expression) throws Exception { protected void postfixExpression( Object expression) throws Backtrack {
switch (LT(1)) { switch (LT(1)) {
case Token.t_typename: case Token.t_typename:
consume(); consume();
@ -1364,7 +1590,7 @@ c, quick);
} }
} }
protected void primaryExpression( Object expression ) throws Exception { protected void primaryExpression( Object expression ) throws Backtrack {
int type = LT(1); int type = LT(1);
switch (type) { switch (type) {
// TO DO: we need more literals... // TO DO: we need more literals...
@ -1507,7 +1733,7 @@ c, quick);
} }
// Utility routines that require a knowledge of the grammar // Utility routines that require a knowledge of the grammar
protected static String generateName(Token startToken) throws Exception { protected static String generateName(Token startToken) throws ParserException {
Token currToken = startToken.getNext(); Token currToken = startToken.getNext();
if (currToken == null || currToken.getType() != Token.tCOLONCOLON) if (currToken == null || currToken.getType() != Token.tCOLONCOLON)

View file

@ -46,7 +46,7 @@ public class DeclSpecifier {
private boolean checkBit(int mask) { private boolean checkBit(int mask) {
int masked =(declSpecifierSeq & mask); int masked =(declSpecifierSeq & mask);
return (masked == 1); return (masked != 0);
} }
public void setAuto(boolean b) { setBit(b, isAuto); } public void setAuto(boolean b) { setBit(b, isAuto); }

View file

@ -1,3 +1,7 @@
2003-03-25 John Camelon
Added testDeclSpecifier(), testNamespaceDefinition(), testLinkageSpecification(),
testUsingClauses() and testEnumSpecifier() to DOMTests.
2003-03-23 John Camelon 2003-03-23 John Camelon
Added ptrOperator() test to DOMTests. Added ptrOperator() test to DOMTests.
Added testFunctionModifiers() test to DOMTests. Added testFunctionModifiers() test to DOMTests.

View file

@ -12,12 +12,18 @@ import org.eclipse.cdt.internal.core.dom.BaseSpecifier;
import org.eclipse.cdt.internal.core.dom.ClassSpecifier; import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
import org.eclipse.cdt.internal.core.dom.DOMBuilder; import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.dom.Declarator; import org.eclipse.cdt.internal.core.dom.Declarator;
import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier;
import org.eclipse.cdt.internal.core.dom.EnumeratorDefinition;
import org.eclipse.cdt.internal.core.dom.Expression; import org.eclipse.cdt.internal.core.dom.Expression;
import org.eclipse.cdt.internal.core.dom.LinkageSpecification;
import org.eclipse.cdt.internal.core.dom.NamespaceDefinition;
import org.eclipse.cdt.internal.core.dom.ParameterDeclaration; import org.eclipse.cdt.internal.core.dom.ParameterDeclaration;
import org.eclipse.cdt.internal.core.dom.ParameterDeclarationClause; import org.eclipse.cdt.internal.core.dom.ParameterDeclarationClause;
import org.eclipse.cdt.internal.core.dom.PointerOperator; import org.eclipse.cdt.internal.core.dom.PointerOperator;
import org.eclipse.cdt.internal.core.dom.SimpleDeclaration; import org.eclipse.cdt.internal.core.dom.SimpleDeclaration;
import org.eclipse.cdt.internal.core.dom.TranslationUnit; import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.dom.UsingDeclaration;
import org.eclipse.cdt.internal.core.dom.UsingDirective;
import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.ParserException; import org.eclipse.cdt.internal.core.parser.ParserException;
import org.eclipse.cdt.internal.core.parser.Token; import org.eclipse.cdt.internal.core.parser.Token;
@ -42,6 +48,228 @@ public class DOMTests extends TestCase {
return domBuilder.getTranslationUnit(); return domBuilder.getTranslationUnit();
} }
public void testNamespaceDefinition() throws Exception
{
for( int i = 0; i < 2; ++i )
{
TranslationUnit translationUnit;
if( i == 0 )
translationUnit = parse("namespace KingJohn { int x; }");
else
translationUnit = parse("namespace { int x; }");
List declarations = translationUnit.getDeclarations();
assertEquals( declarations.size(), 1 );
NamespaceDefinition namespace = (NamespaceDefinition)declarations.get(0);
if( i == 0 )
assertEquals( namespace.getName().toString(), "KingJohn" );
else
assertNull( namespace.getName() );
List namespaceDeclarations = namespace.getDeclarations();
assertEquals( namespaceDeclarations.size(), 1 );
SimpleDeclaration simpleDec = (SimpleDeclaration)namespaceDeclarations.get(0);
assertEquals( simpleDec.getDeclSpecifier().getType(), DeclSpecifier.t_int );
List declarators = simpleDec.getDeclarators();
assertEquals( declarators.size(), 1 );
Declarator declarator = (Declarator)declarators.get(0);
assertEquals( declarator.getName().toString(), "x");
}
}
public void testLinkageSpecification() throws Exception
{
for( int i = 0; i < 2; ++i )
{
TranslationUnit translationUnit;
if( i == 0 )
translationUnit = parse("extern \"C\" { int x(void); }");
else
translationUnit = parse("extern \"ADA\" int x(void);");
List declarations = translationUnit.getDeclarations();
assertEquals( declarations.size(), 1 );
LinkageSpecification linkage = (LinkageSpecification)declarations.get(0);
if( i == 0 )
assertEquals( "C", linkage.getLanguageLinkage() );
else
assertEquals( "ADA", linkage.getLanguageLinkage() );
List subDeclarations = linkage.getDeclarations();
assertEquals( subDeclarations.size(), 1 );
SimpleDeclaration simpleDec = (SimpleDeclaration)subDeclarations.get(0);
assertEquals( simpleDec.getDeclSpecifier().getType(), DeclSpecifier.t_int );
List declarators = simpleDec.getDeclarators();
assertEquals( declarators.size(), 1 );
Declarator declarator = (Declarator)declarators.get(0);
assertEquals( declarator.getName().toString(), "x" );
assertNotNull( declarator.getParms() );
}
}
public void testEnumSpecifier() throws Exception
{
Writer code = new StringWriter();
code.write( "enum { yo, go = 3, away };\n");
code.write( "enum hasAName { last = 666 };");
TranslationUnit translationUnit = parse( code.toString() );
List declarations = translationUnit.getDeclarations();
assertEquals( declarations.size(), 2 );
SimpleDeclaration declaration1 = (SimpleDeclaration)declarations.get(0);
EnumerationSpecifier enumSpecifier = (EnumerationSpecifier)declaration1.getTypeSpecifier();
assertNull( enumSpecifier.getName() );
List firstEnumItems = enumSpecifier.getEnumeratorDefinitions();
assertEquals( 3, firstEnumItems.size());
EnumeratorDefinition enumDef1_1 = (EnumeratorDefinition)firstEnumItems.get(0);
assertEquals( enumDef1_1.getName().toString(), "yo" );
assertNull( enumDef1_1.getExpression() );
EnumeratorDefinition enumDef1_2 = (EnumeratorDefinition)firstEnumItems.get(1);
assertEquals( enumDef1_2.getName().toString(), "go" );
assertNotNull( enumDef1_2.getExpression() );
EnumeratorDefinition enumDef1_3 = (EnumeratorDefinition)firstEnumItems.get(2);
assertEquals( enumDef1_3.getName().toString(), "away" );
assertNull( enumDef1_3.getExpression() );
SimpleDeclaration declaration2 = (SimpleDeclaration)declarations.get(1);
EnumerationSpecifier enumSpecifier2 = (EnumerationSpecifier)declaration2.getTypeSpecifier();
assertEquals( enumSpecifier2.getName().toString(), "hasAName" );
}
public void testUsingClauses() throws Exception
{
Writer code = new StringWriter();
code.write("using namespace A::B::C;\n");
code.write("using namespace C;\n");
code.write("using B::f;\n");
code.write("using ::f;\n");
code.write("using typename crap::de::crap;");
TranslationUnit translationUnit = parse(code.toString());
List declarations = translationUnit.getDeclarations();
assertEquals( declarations.size(), 5 );
UsingDirective first, second;
UsingDeclaration third, fourth, fifth;
first = (UsingDirective) declarations.get(0);
assertEquals( first.getNamespaceName().toString(), "A::B::C" );
second = (UsingDirective) declarations.get(1);
assertEquals( second.getNamespaceName().toString(), "C" );
third = (UsingDeclaration) declarations.get(2);
assertEquals( third.getMappedName().toString(), "B::f" );
assertFalse( third.isTypename() );
fourth = (UsingDeclaration) declarations.get(3);
assertEquals( fourth.getMappedName().toString(), "::f" );
assertFalse( fourth.isTypename() );
fifth = (UsingDeclaration) declarations.get(4);
assertTrue( fifth.isTypename() );
assertEquals( fifth.getMappedName().toString(), "crap::de::crap" );
}
public void testDeclSpecifier() throws Exception
{
DeclSpecifier d = new DeclSpecifier();
d.setTypedef( true );
assertTrue( d.isTypedef() );
d.setTypedef( false );
assertFalse( d.isTypedef() );
d.setAuto(true);
assertTrue( d.isAuto() );
d.setAuto(false);
assertFalse( d.isAuto());
d.setRegister(true);
assertTrue( d.isRegister() );
d.setRegister(false);
assertFalse( d.isRegister() );
d.setStatic(true);
assertTrue( d.isStatic() );
d.setStatic(false);
assertFalse( d.isStatic() );
d.setExtern(true);
assertTrue( d.isExtern() );
d.setExtern(false);
assertFalse( d.isExtern() );
d.setMutable(true);
assertTrue( d.isMutable() );
d.setMutable(false);
assertFalse( d.isMutable() );
d.setInline(true);
assertTrue( d.isInline() );
d.setInline(false);
assertFalse( d.isInline() );
d.setVirtual(true);
assertTrue( d.isVirtual() );
d.setVirtual(false);
assertFalse( d.isVirtual() );
d.setExplicit(true);
assertTrue( d.isExplicit() );
d.setExplicit(false);
assertFalse( d.isExplicit() );
d.setTypedef(true);
assertTrue( d.isTypedef() );
d.setTypedef(false);
assertFalse( d.isTypedef() );
d.setFriend(true);
assertTrue( d.isFriend());
d.setFriend(false);
assertFalse( d.isFriend());
d.setConst(true);
assertTrue( d.isConst() );
d.setConst(false);
assertFalse( d.isConst() );
d.setVolatile(true);
assertTrue( d.isVolatile() );
d.setVolatile(false);
assertFalse( d.isVolatile() );
d.setUnsigned(true);
assertTrue( d.isUnsigned());
d.setUnsigned(false);
assertFalse( d.isUnsigned());
d.setShort(true);
assertTrue( d.isShort());
d.setShort(false);
assertFalse( d.isShort());
d.setLong(true);
assertTrue( d.isLong() );
d.setLong(false);
assertFalse( d.isLong() );
for( int i = 0; i <= 7; ++i )
{
d.setType( i );
for( int j = 0; j <= 7; ++j )
{
if( j == i )
assertTrue( d.getType() == j );
else
assertFalse( d.getType() == j );
}
}
}
/** /**
* Test code: int x = 5; * Test code: int x = 5;
* Purpose: to test the simple decaration in it's simplest form. * Purpose: to test the simple decaration in it's simplest form.
@ -176,17 +404,17 @@ public class DOMTests extends TestCase {
BaseSpecifier bs = (BaseSpecifier)baseClasses.get( 0 ); BaseSpecifier bs = (BaseSpecifier)baseClasses.get( 0 );
assertEquals( bs.getAccess(), BaseSpecifier.t_public ); assertEquals( bs.getAccess(), BaseSpecifier.t_public );
assertEquals( bs.isVirtual(), false ); assertEquals( bs.isVirtual(), false );
assertEquals( bs.getName(), "B" ); assertEquals( bs.getName().toString(), "B" );
bs = (BaseSpecifier)baseClasses.get( 1 ); bs = (BaseSpecifier)baseClasses.get( 1 );
assertEquals( bs.getAccess(), BaseSpecifier.t_private ); assertEquals( bs.getAccess(), BaseSpecifier.t_private );
assertEquals( bs.isVirtual(), false ); assertEquals( bs.isVirtual(), false );
assertEquals( bs.getName(), "C" ); assertEquals( bs.getName().toString(), "C" );
bs = (BaseSpecifier)baseClasses.get( 2 ); bs = (BaseSpecifier)baseClasses.get( 2 );
assertEquals( bs.getAccess(), BaseSpecifier.t_protected ); assertEquals( bs.getAccess(), BaseSpecifier.t_protected );
assertEquals( bs.isVirtual(), true ); assertEquals( bs.isVirtual(), true );
assertEquals( bs.getName(), "D" ); assertEquals( bs.getName().toString(), "D" );
// Get the member declaration // Get the member declaration