1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 06:05:24 +02:00

Merge Parser_SymbolTable branch into HEAD.

This commit is contained in:
John Camelon 2003-06-13 15:01:26 +00:00
parent c2348df608
commit 89913324d4
120 changed files with 8380 additions and 3194 deletions

View file

@ -1,5 +1,7 @@
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.Name;
/**
* @author dschaefe

View file

@ -4,6 +4,7 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Token;
public class ClassSpecifier extends TypeSpecifier implements IScope, IOffsetable, IAccessable {

View file

@ -16,6 +16,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Name;
/**
* @author jcamelon

View file

@ -1,16 +1,39 @@
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.IParser;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTConstructor;
import org.eclipse.cdt.core.parser.ast.IASTEnumSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
import org.eclipse.cdt.core.parser.ast.IASTTypedef;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
import org.eclipse.cdt.internal.core.parser.IParserCallback;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Token;
/**
* This is the parser callback that creates objects in the DOM.
*/
public class DOMBuilder implements IParserCallback
public class DOMBuilder implements IParserCallback, ISourceElementRequestor
{
protected DOMBuilder()
public DOMBuilder()
{
}
@ -61,6 +84,7 @@ public class DOMBuilder implements IParserCallback
classSpecifier.setClassKeyToken( classKey );
decl.setTypeSpecifier(classSpecifier);
domScopes.push( classSpecifier );
return classSpecifier;
}
@ -77,6 +101,7 @@ public class DOMBuilder implements IParserCallback
public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
ClassSpecifier c = (ClassSpecifier)classSpecifier;
c.setTotalLength( closingBrace.getOffset() + closingBrace.getLength() - c.getStartingOffset() );
domScopes.pop();
}
/**
@ -162,14 +187,15 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#inclusionBegin(java.lang.String)
*/
public Object inclusionBegin(String includeFile, int offset, int inclusionBeginOffset, boolean local) {
Inclusion inclusion = new Inclusion(
includeFile,
offset,
inclusionBeginOffset,
offset - inclusionBeginOffset + includeFile.length() + 1,
local );
translationUnit.addInclusion( inclusion );
return inclusion;
// Inclusion inclusion = new Inclusion(
// includeFile,
// offset,
// inclusionBeginOffset,
// offset - inclusionBeginOffset + includeFile.length() + 1,
// local );
// translationUnit.addInclusion( inclusion );
// return inclusion;
return null;
}
/**
@ -182,18 +208,18 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#macro(java.lang.String)
*/
public Object macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
Macro macro = new Macro( macroName, offset, macroBeginOffset, macroEndOffset - macroBeginOffset);
translationUnit.addMacro( macro );
return macro;
// Macro macro = new Macro( macroName, offset, macroBeginOffset, macroEndOffset - macroBeginOffset);
// translationUnit.addMacro( macro );
return null;
}
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationBegin(org.eclipse.cdt.internal.core.newparser.Token)
*/
public Object simpleDeclarationBegin(Object container, Token firstToken) {
SimpleDeclaration decl = new SimpleDeclaration((IScope)container);
if( container instanceof IAccessable )
decl.setAccessSpecifier(new AccessSpecifier( ((IAccessable)container).getVisibility() ));
SimpleDeclaration decl = new SimpleDeclaration( getCurrentDOMScope() );
if( getCurrentDOMScope() instanceof IAccessable )
decl.setAccessSpecifier(new AccessSpecifier( ((IAccessable)getCurrentDOMScope()).getVisibility() ));
((IOffsetable)decl).setStartingOffset( firstToken.getOffset() );
return decl;
}
@ -205,7 +231,7 @@ public class DOMBuilder implements IParserCallback
SimpleDeclaration decl = (SimpleDeclaration)declaration;
IOffsetable offsetable = (IOffsetable)decl;
offsetable.setTotalLength( lastToken.getOffset() + lastToken.getLength() - offsetable.getStartingOffset());
decl.getOwnerScope().addDeclaration(decl);
getCurrentDOMScope().addDeclaration(decl);
}
/**
@ -321,6 +347,7 @@ public class DOMBuilder implements IParserCallback
public void classSpecifierAbort(Object classSpecifier) {
ClassSpecifier cs = (ClassSpecifier)classSpecifier;
cs.getOwner().setTypeSpecifier(null);
domScopes.pop();
}
/**
@ -518,20 +545,20 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container, Token namespace) {
IScope ownerScope = (IScope)container;
NamespaceDefinition namespaceDef = new NamespaceDefinition(ownerScope);
namespaceDef.setStartToken(namespace);
((IOffsetable)namespaceDef).setStartingOffset( namespace.getOffset() );
return namespaceDef;
// IScope ownerScope = (IScope)container;
// NamespaceDefinition namespaceDef = new NamespaceDefinition(ownerScope);
// namespaceDef.setStartToken(namespace);
// ((IOffsetable)namespaceDef).setStartingOffset( namespace.getOffset() );
// return namespaceDef;
return null;
}
/* (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 );
// NamespaceDefinition ns = (NamespaceDefinition)namespace;
// ns.setName( currName );
}
/* (non-Javadoc)
@ -544,77 +571,80 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
NamespaceDefinition ns = (NamespaceDefinition)namespace;
ns.setTotalLength( closingBrace.getOffset() + closingBrace.getLength() - ns.getStartingOffset() );
ns.getOwnerScope().addDeclaration(ns);
// NamespaceDefinition ns = (NamespaceDefinition)namespace;
// ns.setTotalLength( closingBrace.getOffset() + closingBrace.getLength() - ns.getStartingOffset() );
// 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;
// IScope scope = (IScope)container;
// LinkageSpecification linkage = new LinkageSpecification( scope, literal );
// domScopes.push( linkage );
return null;
}
/* (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 );
// LinkageSpecification linkage = (LinkageSpecification)domScopes.pop();
// 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;
// IScope scope = (IScope)container;
// UsingDirective directive = new UsingDirective( scope );
// return directive;
return null;
}
/* (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 );
// 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 );
// 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;
// IScope scope = (IScope)container;
// UsingDeclaration declaration = new UsingDeclaration( scope );
// return declaration;
return null;
}
/* (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 );
// 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 );
// UsingDeclaration declaration = (UsingDeclaration)decl;
// declaration.getOwnerScope().addDeclaration( declaration );
}
/* (non-Javadoc)
@ -696,9 +726,9 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#asmDefinition(java.lang.String)
*/
public void asmDefinition(Object container, String assemblyCode) {
IScope scope = (IScope)container;
ASMDefinition definition = new ASMDefinition( scope, assemblyCode );
scope.addDeclaration( definition );
// IScope scope = (IScope)container;
// ASMDefinition definition = new ASMDefinition( scope, assemblyCode );
// scope.addDeclaration( definition );
}
/* (non-Javadoc)
@ -767,8 +797,8 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitInstantiationBegin(java.lang.Object)
*/
public Object explicitInstantiationBegin(Object container) {
IScope scope = (IScope)container;
ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( scope, ExplicitTemplateDeclaration.k_instantiation );
ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( getCurrentDOMScope(), ExplicitTemplateDeclaration.k_instantiation );
domScopes.push( etd );
return etd;
}
@ -776,7 +806,7 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitInstantiationEnd(java.lang.Object)
*/
public void explicitInstantiationEnd(Object instantiation) {
ExplicitTemplateDeclaration declaration = (ExplicitTemplateDeclaration)instantiation;
ExplicitTemplateDeclaration declaration = (ExplicitTemplateDeclaration)domScopes.pop();
declaration.getOwnerScope().addDeclaration(declaration);
}
@ -784,8 +814,8 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitSpecializationBegin(java.lang.Object)
*/
public Object explicitSpecializationBegin(Object container) {
IScope scope = (IScope)container;
ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( scope, ExplicitTemplateDeclaration.k_specialization);
ExplicitTemplateDeclaration etd = new ExplicitTemplateDeclaration( getCurrentDOMScope(), ExplicitTemplateDeclaration.k_specialization);
domScopes.push( etd );
return etd;
}
@ -793,7 +823,7 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#explicitSpecializationEnd(java.lang.Object)
*/
public void explicitSpecializationEnd(Object instantiation) {
ExplicitTemplateDeclaration etd = (ExplicitTemplateDeclaration)instantiation;
ExplicitTemplateDeclaration etd = (ExplicitTemplateDeclaration)domScopes.pop();
etd.getOwnerScope().addDeclaration(etd);
}
@ -809,10 +839,11 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
*/
public Object templateDeclarationBegin(Object container, Token exported) {
TemplateDeclaration d = new TemplateDeclaration( (IScope)container, exported );
if( container instanceof IAccessable )
TemplateDeclaration d = new TemplateDeclaration( (IScope)getCurrentDOMScope(), exported );
if( getCurrentDOMScope() instanceof IAccessable )
d.setVisibility( ((IAccessable)container).getVisibility() );
d.setStartingOffset( exported.getOffset() );
domScopes.push( d );
return d;
}
@ -820,14 +851,14 @@ public class DOMBuilder implements IParserCallback
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationAbort(java.lang.Object)
*/
public void templateDeclarationAbort(Object templateDecl) {
templateDecl = null;
domScopes.pop();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
*/
public void templateDeclarationEnd(Object templateDecl, Token lastToken) {
TemplateDeclaration decl = (TemplateDeclaration)templateDecl;
TemplateDeclaration decl = (TemplateDeclaration)domScopes.pop();
decl.setLastToken(lastToken);
decl.getOwnerScope().addDeclaration(decl);
decl.setTotalLength(lastToken.getOffset() + lastToken.getLength() - decl.getStartingOffset() );
@ -950,5 +981,295 @@ public class DOMBuilder implements IParserCallback
// System.out.println( "Told you so!");
// }
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptProblem(org.eclipse.cdt.core.parser.IProblem)
*/
public void acceptProblem(IProblem problem) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMacro(org.eclipse.cdt.core.parser.ast.IASTMacro)
*/
public void acceptMacro(IASTMacro macro) {
Macro m = new Macro( macro.getName(), macro.getElementNameOffset(), macro.getElementStartingOffset(),
macro.getElementEndingOffset() - macro.getElementStartingOffset());
translationUnit.addMacro( m );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariable(org.eclipse.cdt.core.parser.ast.IASTVariable)
*/
public void acceptVariable(IASTVariable variable) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void acceptFunctionDeclaration(IASTFunction function) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsageDirective(org.eclipse.cdt.core.parser.ast.IASTUsageDirective)
*/
public void acceptUsingDirective(IASTUsingDirective usageDirective) {
UsingDirective directive = new UsingDirective( getCurrentDOMScope() );
directive.setNamespaceName( usageDirective.getNamespaceName() );
directive.getOwnerScope().addDeclaration( directive );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsageDeclaration(org.eclipse.cdt.core.parser.ast.IASTUsageDeclaration)
*/
public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration) {
UsingDeclaration declaration = new UsingDeclaration( getCurrentDOMScope() );
declaration.setTypename( usageDeclaration.isTypename());
declaration.setMappedName(usageDeclaration.usingTypeName());
declaration.getOwnerScope().addDeclaration( declaration );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptASMDefinition(org.eclipse.cdt.core.parser.ast.IASTASMDefinition)
*/
public void acceptASMDefinition(IASTASMDefinition asmDefinition) {
IScope scope = getCurrentDOMScope();
ASMDefinition definition = new ASMDefinition( scope, asmDefinition.getBody() );
scope.addDeclaration( definition );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedef(org.eclipse.cdt.core.parser.ast.IASTTypedef)
*/
public void acceptTypedef(IASTTypedef typedef) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterEnumSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumSpecifier)
*/
public void enterEnumSpecifier(IASTEnumSpecifier enumSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerator)
*/
public void acceptEnumerator(IASTEnumerator enumerator) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitEnumSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumSpecifier)
*/
public void exitEnumSpecifier(IASTEnumSpecifier enumSpec) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void enterFunctionBody(IASTFunction function) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction)
*/
public void exitFunctionBody(IASTFunction function) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {
domScopes.push( translationUnit );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void enterInclusion(IASTInclusion inclusion) {
Inclusion i = new Inclusion(
inclusion.getName(),
inclusion.getElementNameOffset(),
inclusion.getElementStartingOffset(),
inclusion.getElementEndingOffset(),
inclusion.isLocal() );
translationUnit.addInclusion( i );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
NamespaceDefinition namespaceDef = new NamespaceDefinition(getCurrentDOMScope());
namespaceDef.setName( namespaceDefinition.getName() );
((IOffsetable)namespaceDef).setStartingOffset( namespaceDefinition.getElementStartingOffset() );
if( ! namespaceDefinition.getName().equals( "" ))
namespaceDef.setNameOffset( namespaceDefinition.getElementNameOffset() );
this.domScopes.push( namespaceDef );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecification)
*/
public void enterClassSpecifier(IASTClassSpecifier classSpecification) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
*/
public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec) {
LinkageSpecification linkage = new LinkageSpecification( getCurrentDOMScope(), linkageSpec.getLinkageString() );
domScopes.push( linkage );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
*/
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
*/
public void enterTemplateSpecialization(IASTTemplateSpecialization specialization) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
*/
public void enterTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void acceptMethodDeclaration(IASTMethod method) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void enterMethodBody(IASTMethod method) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod)
*/
public void exitMethodBody(IASTMethod method) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField)
*/
public void acceptField(IASTField field) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptConstructor(org.eclipse.cdt.core.parser.ast.IASTConstructor)
*/
public void acceptConstructor(IASTConstructor constructor) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
*/
public void exitTemplateDeclaration(IASTTemplateDeclaration declaration) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization)
*/
public void exitTemplateSpecialization(IASTTemplateSpecialization specialization) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation)
*/
public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification)
*/
public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec) {
LinkageSpecification linkage = (LinkageSpecification)domScopes.pop();
getCurrentDOMScope().addDeclaration(linkage );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecification)
*/
public void exitClassSpecifier(IASTClassSpecifier classSpecification) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition)
*/
public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
NamespaceDefinition definition = (NamespaceDefinition)domScopes.pop();
definition.setTotalLength( namespaceDefinition.getElementEndingOffset() - namespaceDefinition.getElementStartingOffset());
getCurrentDOMScope().addDeclaration( definition );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void exitInclusion(IASTInclusion inclusion) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
public void exitCompilationUnit(IASTCompilationUnit compilationUnit) {
domScopes.pop();
}
private ScopeStack domScopes = new ScopeStack();
private IScope getCurrentDOMScope()
{
return domScopes.peek();
}
}

View file

@ -2,6 +2,7 @@ package org.eclipse.cdt.internal.core.dom;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Token;
/**

View file

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Name;
public class Declarator implements IExpressionOwner, IDeclaratorOwner {

View file

@ -1,5 +1,7 @@
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.Name;
/**
* @author jcamelon

View file

@ -16,6 +16,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Token;
/**

View file

@ -12,6 +12,8 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.Name;
/**
* @author jcamelon

View file

@ -16,6 +16,8 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Name;
/**
* @author jcamelon

View file

@ -15,6 +15,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Token;
/**

View file

@ -16,8 +16,6 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.Token;
/**
* @author jcamelon
*
@ -25,8 +23,10 @@ import org.eclipse.cdt.internal.core.parser.Token;
public class NamespaceDefinition extends Declaration implements IScope {
private List declarations = new LinkedList();
private Name name = null;
private Token startToken = null;
private String name = "namespace";
int startingOffset = 0;
int nameOffset = 0;
int endOffset = 0;
public NamespaceDefinition( IScope owner )
{
@ -52,7 +52,7 @@ public class NamespaceDefinition extends Declaration implements IScope {
/**
* @return String
*/
public Name getName() {
public String getName() {
return name;
}
@ -60,25 +60,44 @@ public class NamespaceDefinition extends Declaration implements IScope {
* Sets the name.
* @param name The name to set
*/
public void setName(Name name) {
public void setName(String name) {
this.name = name;
}
public int getStartOffset()
{
return startingOffset;
}
public int getNameOffset()
{
return nameOffset;
}
public int getEndOffset()
{
return endOffset;
}
/**
* Returns the startToken.
* @return Token
* @param i
*/
public Token getStartToken() {
return startToken;
public void setEndOffset(int i) {
endOffset = i;
}
/**
* Sets the startToken.
* @param startToken The startToken to set
* @param i
*/
public void setStartToken(Token startToken) {
this.startToken = startToken;
public void setNameOffset(int i) {
nameOffset = i;
}
/**
* @param i
*/
public void setStartingOffset(int i) {
startingOffset = i;
}
}

View file

@ -0,0 +1,38 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import java.util.Stack;
/**
* @author jcamelon
*
*/
public class ScopeStack {
public IScope peek()
{
return (IScope)scopes.peek();
}
public IScope pop()
{
return (IScope)scopes.pop();
}
public void push( IScope scope )
{
scopes.push( scope );
}
private Stack scopes = new Stack();
}

View file

@ -12,6 +12,8 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.Name;
/**
* @author jcamelon

View file

@ -13,13 +13,14 @@
package org.eclipse.cdt.internal.core.dom;
/**
* @author jcamelon
*
*/
public class UsingDeclaration extends Declaration {
private Name mappedName;
private String mappedName;
boolean isTypename = false;
public UsingDeclaration( IScope owner )
@ -29,7 +30,7 @@ public class UsingDeclaration extends Declaration {
/**
* @return String
*/
public Name getMappedName() {
public String getMappedName() {
return mappedName;
}
@ -37,7 +38,7 @@ public class UsingDeclaration extends Declaration {
* Sets the mapping.
* @param mapping The mapping to set
*/
public void setMappedName(Name mapping) {
public void setMappedName(String mapping) {
this.mappedName = mapping;
}

View file

@ -12,6 +12,8 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
import org.eclipse.cdt.internal.core.parser.Name;
/**
* @author jcamelon
@ -19,7 +21,7 @@ package org.eclipse.cdt.internal.core.dom;
*/
public class UsingDirective extends Declaration {
private Name namespaceName;
private String namespaceName;
public UsingDirective( IScope owner )
{
@ -29,7 +31,7 @@ public class UsingDirective extends Declaration {
/**
* @return String
*/
public Name getNamespaceName() {
public String getNamespaceName() {
return namespaceName;
}
@ -37,7 +39,7 @@ public class UsingDirective extends Declaration {
* Sets the namespaceName.
* @param namespaceName The namespaceName to set
*/
public void setNamespaceName(Name namespaceName) {
public void setNamespaceName(String namespaceName) {
this.namespaceName = namespaceName;
}
}

View file

@ -6,8 +6,8 @@ package org.eclipse.cdt.core.model;
*/
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
/**
* Common protocol for all elements provided by the C model.

View file

@ -1,3 +1,22 @@
2003-06-13 John Camelon
Merged ParserSymbolTable branch back into HEAD.
2003-06-12 John Camelon
Get rest of JUnit tests working, will merge back to HEAD branch.
2003-06-12 John Camelon
Introduction of ASTFactory strategy, some restructuring of packages and interfaces.
2003-06-10 John Camelon
Futher pursuit of the golden hammer, symbol table integration.
2003-06-09 John Camelon
First step in replacing IParserCallback with ISourceElementRequestor.
2003-06-05 Andrew Niefer
Begin implementation of functions for template specializations: deduceTemplateArgument,
classTemplateSpecializationToFunctionTemplate, transformFunctionTemplateForOrdering
2003-06-09 Victor Mozgin
Fixed for conversion operator declarations.
This fixes PR 36769 (finally) and PR 38657.
@ -20,6 +39,31 @@
2003-06-05 John Camelon
Fix Bug 38380 "Include" class public methods fails JUnit tests
2003-05-29 Andrew Niefer
new Class eType for stronger type safety in TypeInfo
new class PtrOp for better handling of pointer operators and cv qualifiers
new class TemplateInstance to support templates
Start of implementation for templates & specializations
2003-05-29 John Camelon
Remove all AST components.
2003-05-26 John Camelon
Rollback PST/Parser integration.
2003-05-13 Andrew Niefer
Moved symbol table to org.eclipse.cdt.internal.core.pst
Created interface for symbol table: ISymbol, IContainerSymbol, IDerivableContainerSymbol,
IParameterizedSymbol, and ISpecializedSymbol. These are all implemented by Declaration
The symbol table itself uses this interface instead of using its Declaration directly
(with the exception of the undo command framework)
2003-05-08 Andrew Niefer
Added a basic command structure to support rollbacks
2003-05-06 John Camelon
Further integration of SymbolTable into Parser, some refactoring.
2003-05-05 John Camelon/Andrew Niefer
Added Symboltable infrastructure into main parser.

View file

@ -8,7 +8,7 @@
* Contributors:
* Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser;
package org.eclipse.cdt.core.parser;
import org.eclipse.cdt.internal.core.parser.Parser.Backtrack;
@ -82,4 +82,7 @@ public interface IParser {
*/
public int getLastErrorOffset();
public void setRequestor( ISourceElementRequestor r );
}

View file

@ -8,14 +8,12 @@
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser;
package org.eclipse.cdt.core.parser;
/**
* @author jcamelon
*
*/
public interface ISymbol {
public Object getObject();
public interface IProblem {
}

View file

@ -1,16 +1,18 @@
package org.eclipse.cdt.internal.core.parser;
package org.eclipse.cdt.core.parser;
import java.io.Reader;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.internal.core.parser.IMacroDescriptor;
import org.eclipse.cdt.internal.core.parser.IParserCallback;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.cdt.internal.core.parser.ScannerException;
import org.eclipse.cdt.internal.core.parser.Token;
/**
* @author jcamelon
*
* To change this generated comment edit the template variable
"typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public interface IScanner {
@ -33,4 +35,6 @@ public interface IScanner {
public void mapLineNumbers( boolean value );
public void setQuickScan(boolean qs);
public void setCallback(IParserCallback c);
public void setRequestor( ISourceElementRequestor r );
public void setASTFactory( IASTFactory f );
}

View file

@ -0,0 +1,82 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTConstructor;
import org.eclipse.cdt.core.parser.ast.IASTEnumSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
import org.eclipse.cdt.core.parser.ast.IASTTypedef;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
/**
* @author jcamelon
*
*/
public interface ISourceElementRequestor {
public void acceptProblem( IProblem problem );
public void acceptMacro( IASTMacro macro );
public void acceptVariable( IASTVariable variable );
public void acceptFunctionDeclaration( IASTFunction function );
public void acceptUsingDirective( IASTUsingDirective usageDirective );
public void acceptUsingDeclaration( IASTUsingDeclaration usageDeclaration );
public void acceptASMDefinition( IASTASMDefinition asmDefinition );
public void acceptTypedef( IASTTypedef typedef );
public void enterEnumSpecifier( IASTEnumSpecifier enumSpec );
public void acceptEnumerator( IASTEnumerator enumerator );
public void exitEnumSpecifier( IASTEnumSpecifier enumSpec );
public void enterFunctionBody( IASTFunction function );
public void exitFunctionBody( IASTFunction function );
public void enterCompilationUnit( IASTCompilationUnit compilationUnit );
public void enterInclusion( IASTInclusion inclusion );
public void enterNamespaceDefinition( IASTNamespaceDefinition namespaceDefinition );
public void enterClassSpecifier( IASTClassSpecifier classSpecification );
public void enterLinkageSpecification( IASTLinkageSpecification linkageSpec );
public void enterTemplateDeclaration( IASTTemplateDeclaration declaration );
public void enterTemplateSpecialization( IASTTemplateSpecialization specialization );
public void enterTemplateExplicitInstantiation( IASTTemplateInstantiation instantiation );
public void acceptMethodDeclaration( IASTMethod method );
public void enterMethodBody( IASTMethod method );
public void exitMethodBody( IASTMethod method );
public void acceptField( IASTField field );
public void acceptConstructor( IASTConstructor constructor );
public void exitTemplateDeclaration( IASTTemplateDeclaration declaration );
public void exitTemplateSpecialization( IASTTemplateSpecialization specialization );
public void exitTemplateExplicitInstantiation( IASTTemplateInstantiation instantiation );
public void exitLinkageSpecification( IASTLinkageSpecification linkageSpec );
public void exitClassSpecifier( IASTClassSpecifier classSpecification );
public void exitNamespaceDefinition( IASTNamespaceDefinition namespaceDefinition );
public void exitInclusion( IASTInclusion inclusion );
public void exitCompilationUnit( IASTCompilationUnit compilationUnit );
}

View file

@ -0,0 +1,29 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public class AccessVisibility {
public static final AccessVisibility v_public = new AccessVisibility( 1 );
public static final AccessVisibility v_protected = new AccessVisibility( 2 );
public static final AccessVisibility v_private = new AccessVisibility( 3 );
private AccessVisibility( int constant)
{
value = constant;
}
private final int value;
}

View file

@ -0,0 +1,30 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public class ClassKind {
public final static ClassKind k_class = new ClassKind( 1 );
public final static ClassKind k_struct = new ClassKind( 2 );
public final static ClassKind k_union = new ClassKind( 3 );
private ClassKind( int value )
{
this.value = value;
}
private final int value;
}

View file

@ -0,0 +1,27 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public class ClassNameType {
public static final ClassNameType t_identifier = new ClassNameType( 1 );
public static final ClassNameType t_template = new ClassNameType( 2 );
private final int type;
private ClassNameType( int t )
{
type = t;
}
}

View file

@ -0,0 +1,21 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTASMDefinition extends IASTOffsetableElement, IASTDeclaration {
public String getBody();
}

View file

@ -8,18 +8,17 @@
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.dom;
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public class DOMFactory {
public interface IASTBaseSpecifier {
public AccessVisibility getAccess();
public boolean isVirtual();
public IASTClassSpecifier getParent();
public static DOMBuilder createDOMBuilder( boolean lineNumbers )
{
if( lineNumbers )
return new LineNumberedDOMBuilder();
else
return new DOMBuilder();
}
}

View file

@ -0,0 +1,27 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
import java.util.Iterator;
/**
* @author jcamelon
*
*/
public interface IASTClassSpecifier extends IASTScope, IASTOffsetableNamedElement, IASTTemplatedDeclaration {
public ClassNameType getClassNameType();
public ClassKind getClassKind();
public Iterator getBaseClauses();
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTCompilationUnit extends IASTScope {
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTConstructor {
}

View file

@ -0,0 +1,21 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTDeclaration {
IASTScope getOwnerScope();
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTEnumSpecifier {
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTEnumerator {
}

View file

@ -0,0 +1,51 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
import org.eclipse.cdt.internal.core.parser.TokenDuple;
import org.eclipse.cdt.internal.core.parser.Parser.Backtrack;
/**
* @author jcamelon
*
*/
public interface IASTFactory {
public IASTMacro createMacro( String name, int startingOffset, int endingOffset, int nameOffset );
public IASTInclusion createInclusion( String name, String fileName, boolean local, int startingOffset, int endingOffset, int nameOffset );
public IASTUsingDirective createUsingDirective(
IASTScope scope,
TokenDuple duple)
throws Backtrack;
public IASTUsingDeclaration createUsingDeclaration(
IASTScope scope,
boolean isTypeName,
TokenDuple name );
public IASTASMDefinition createASMDefinition(
IASTScope scope,
String assembly,
int first,
int last);
public IASTNamespaceDefinition createNamespaceDefinition(
IASTScope scope,
String identifier,
int startingOffset, int nameOffset);
public IASTCompilationUnit createCompilationUnit();
public IASTLinkageSpecification createLinkageSpecification(IASTScope scope, String spec);
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTField {
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTFunction {
}

View file

@ -0,0 +1,26 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTInclusion extends IASTOffsetableNamedElement {
public String getName();
public String getFullFileName();
public boolean isLocal();
}

View file

@ -0,0 +1,20 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTLinkageSpecification extends IASTScope, IASTDeclaration {
public String getLinkageString();
}

View file

@ -0,0 +1,21 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTMacro extends IASTOffsetableNamedElement {
public String getName();
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTMethod {
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTNamespaceDefinition extends IASTOffsetableNamedElement, IASTScope, IASTDeclaration {
}

View file

@ -0,0 +1,26 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTOffsetableElement {
public void setStartingOffset( int o );
public void setEndingOffset( int o );
public int getElementStartingOffset();
public int getElementEndingOffset();
}

View file

@ -0,0 +1,23 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTOffsetableNamedElement extends IASTOffsetableElement {
public String getName();
public int getElementNameOffset();
public void setNameOffset( int o );
}

View file

@ -0,0 +1,22 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
import java.util.Iterator;
/**
* @author jcamelon
*
*/
public interface IASTScope {
public Iterator getDeclarations();
}

View file

@ -0,0 +1,24 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
import java.util.Iterator;
/**
* @author jcamelon
*
*/
public interface IASTTemplateDeclaration {
public TemplateDeclarationType getTemplateDeclarationType();
public Iterator getTemplateParameters();
}

View file

@ -0,0 +1,21 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTTemplateInstantiation {
public TemplateDeclarationType getTemplateDeclarationType();
public IASTTemplateDeclaration getTemplateDeclaration();
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTTemplateParameter {
}

View file

@ -0,0 +1,21 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTTemplateSpecialization {
public TemplateDeclarationType getTemplateDeclarationType();
public IASTTemplateDeclaration getTemplateDeclaration();
}

View file

@ -0,0 +1,20 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTTemplatedDeclaration {
public IASTTemplateDeclaration getOwnerTemplateDeclaration();
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTTypedef {
}

View file

@ -0,0 +1,22 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTUsingDeclaration extends IASTDeclaration {
public boolean isTypename();
public String usingTypeName();
}

View file

@ -0,0 +1,20 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTUsingDirective extends IASTDeclaration {
public String getNamespaceName();
}

View file

@ -0,0 +1,19 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public interface IASTVariable {
}

View file

@ -0,0 +1,32 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser.ast;
/**
* @author jcamelon
*
*/
public class TemplateDeclarationType {
public static final TemplateDeclarationType t_class = new TemplateDeclarationType(1);
public static final TemplateDeclarationType t_function = new TemplateDeclarationType( 2 );
public static final TemplateDeclarationType t_memberClass = new TemplateDeclarationType( 3 );
public static final TemplateDeclarationType t_method = new TemplateDeclarationType( 4 );
public static final TemplateDeclarationType t_field = new TemplateDeclarationType( 5 );
private final int type;
private TemplateDeclarationType( int t )
{
type = t;
}
}

View file

@ -24,11 +24,11 @@ import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.core.model.ITemplate;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.internal.core.dom.ArrayQualifier;
import org.eclipse.cdt.internal.core.dom.ClassKey;
import org.eclipse.cdt.internal.core.dom.ClassSpecifier;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
import org.eclipse.cdt.internal.core.dom.DOMFactory;
import org.eclipse.cdt.internal.core.dom.DeclSpecifier;
import org.eclipse.cdt.internal.core.dom.Declaration;
import org.eclipse.cdt.internal.core.dom.Declarator;
@ -39,7 +39,6 @@ import org.eclipse.cdt.internal.core.dom.IOffsetable;
import org.eclipse.cdt.internal.core.dom.ITemplateParameterListOwner;
import org.eclipse.cdt.internal.core.dom.Inclusion;
import org.eclipse.cdt.internal.core.dom.Macro;
import org.eclipse.cdt.internal.core.dom.Name;
import org.eclipse.cdt.internal.core.dom.NamespaceDefinition;
import org.eclipse.cdt.internal.core.dom.ParameterDeclaration;
import org.eclipse.cdt.internal.core.dom.ParameterDeclarationClause;
@ -49,7 +48,7 @@ import org.eclipse.cdt.internal.core.dom.TemplateDeclaration;
import org.eclipse.cdt.internal.core.dom.TemplateParameter;
import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.dom.TypeSpecifier;
import org.eclipse.cdt.internal.core.parser.IParser;
import org.eclipse.cdt.internal.core.parser.Name;
import org.eclipse.cdt.internal.core.parser.Parser;
import org.eclipse.core.resources.IProject;
@ -66,7 +65,7 @@ public class CModelBuilder {
public Map parse(boolean requiresLineNumbers) throws Exception {
// Note - if a CModel client wishes to have a CModel with valid line numbers
// DOMFactory.createDOMBuilder should be given the parameter 'true'
DOMBuilder domBuilder = DOMFactory.createDOMBuilder( requiresLineNumbers );
DOMBuilder domBuilder = new DOMBuilder();
String code = translationUnit.getBuffer().getContents();
IParser parser = new Parser(code, domBuilder, true);
parser.mapLineNumbers(requiresLineNumbers);
@ -283,12 +282,12 @@ public class CModelBuilder {
parent.addChild((ICElement)element);
// set element position
if(nsDef.getName() != null){
element.setIdPos(nsDef.getName().getStartOffset(), nsDef.getName().length());
element.setIdPos(nsDef.getNameOffset(), nsDef.getName().length());
}else{
element.setIdPos(nsDef.getStartToken().getOffset(), nsDef.getStartToken().getLength());
element.setIdPos(nsDef.getStartingOffset(), new String( "namespace").length());
}
element.setPos(nsDef.getStartingOffset(), nsDef.getTotalLength());
element.setTypeName(nsDef.getStartToken().getImage());
element.setTypeName(new String( "namespace"));
// set the element lines
element.setLines(nsDef.getTopLine(), nsDef.getBottomLine());

View file

@ -19,6 +19,9 @@ import java.util.LinkedList;
import java.util.Set;
import java.util.Stack;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
/**
* @author aniefer
*
@ -31,18 +34,20 @@ public class ContextStack {
super();
}
public void updateContext(Reader reader, String filename, int type) throws ScannerException {
public void updateContext(Reader reader, String filename, int type, IASTInclusion inclusion, ISourceElementRequestor requestor) throws ScannerException {
undoStack.clear();
push( new ScannerContext().initialize(reader, filename, type ) );
push( new ScannerContext().initialize(reader, filename, type, null ), requestor );
}
protected void push( IScannerContext context ) throws ScannerException
protected void push( IScannerContext context, ISourceElementRequestor requestor ) throws ScannerException
{
if( context.getKind() == IScannerContext.INCLUSION )
{
if( !inclusions.add( context.getFilename() ) )
throw new ScannerException( "Inclusion " + context.getFilename() + " already encountered." );
throw new ScannerException( "Inclusion " + context.getFilename() + " already encountered." );
if( requestor != null )
requestor.enterInclusion( context.getExtension() );
} else if( context.getKind() == IScannerContext.MACROEXPANSION )
{
if( !defines.add( context.getFilename() ) )
@ -56,7 +61,7 @@ public class ContextStack {
topContext = context;
}
public boolean rollbackContext() {
public boolean rollbackContext(ISourceElementRequestor requestor) {
try {
currentContext.getReader().close();
} catch (IOException ie) {
@ -66,6 +71,8 @@ public class ContextStack {
if( currentContext.getKind() == IScannerContext.INCLUSION )
{
inclusions.remove( currentContext.getFilename() );
if( requestor != null )
requestor.exitInclusion( currentContext.getExtension() );
} else if( currentContext.getKind() == IScannerContext.MACROEXPANSION )
{
defines.remove( currentContext.getFilename() );
@ -82,7 +89,7 @@ public class ContextStack {
return true;
}
public void undoRollback( IScannerContext undoTo ) throws ScannerException {
public void undoRollback( IScannerContext undoTo, ISourceElementRequestor requestor ) throws ScannerException {
if( currentContext == undoTo ){
return;
}
@ -93,7 +100,7 @@ public class ContextStack {
Iterator iter = undoStack.iterator();
for( int i = size; i > 0; i-- )
{
push( (IScannerContext) undoStack.removeFirst() );
push( (IScannerContext) undoStack.removeFirst(), requestor );
if( currentContext == undoTo )
break;

View file

@ -13,7 +13,8 @@ package org.eclipse.cdt.internal.core.parser;
import java.util.EmptyStackException;
import java.util.Stack;
import org.eclipse.cdt.internal.core.dom.Name;
import org.eclipse.cdt.core.parser.IParser;
public class ExpressionEvaluator implements IParserCallback {

View file

@ -10,6 +10,8 @@
******************************************************************************/
package org.eclipse.cdt.internal.core.parser;
import org.eclipse.cdt.core.parser.IParser;
public interface IParserCallback {
public void setParser( IParser parser );

View file

@ -1,6 +1,8 @@
package org.eclipse.cdt.internal.core.parser;
import java.io.IOException;
import java.io.Reader;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
/**
* @author jcamelon
*
@ -17,17 +19,20 @@ public interface IScannerContext {
public static int INCLUSION = 2;
public static int MACROEXPANSION = 3;
public IScannerContext initialize(Reader r, String f, int k, IASTInclusion i);
public int read() throws IOException;
public String getFilename();
public int getOffset();
public Reader getReader();
IScannerContext initialize(Reader r, String f, int k);
int read() throws IOException;
String getFilename();
int getOffset();
Reader getReader();
public int undoStackSize();
public int popUndo();
public void pushUndo(int undo);
int undoStackSize();
int popUndo();
void pushUndo(int undo);
public int getKind();
public void setKind( int kind );
public IASTInclusion getExtension();
public void setExtension( IASTInclusion ext );
int getKind();
void setKind( int kind );
}

View file

@ -0,0 +1,75 @@
package org.eclipse.cdt.internal.core.parser;
/**
* @author dschaefe
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class Name {
private Token nameStart, nameEnd;
public Name(Token nameStart) {
this.nameStart = nameStart;
}
public Name(Token nameStart, Token nameEnd) {
this( nameStart );
setEnd( nameEnd );
}
public void setEnd(Token nameEnd) {
this.nameEnd = nameEnd;
}
public int getStartOffset()
{
return nameStart.offset;
}
public int getEndOffset()
{
return nameEnd.offset;
}
public String toString() {
Token t = nameStart;
StringBuffer buffer = new StringBuffer();
buffer.append( t.getImage() );
if( t.getType() == Token.t_operator )
buffer.append( " " );
while (t != nameEnd) {
t = t.getNext();
buffer.append( t.getImage() );
if (t.getType() == Token.t_operator) buffer.append( " " );
}
return buffer.toString();
}
public int length()
{
return getEndOffset() - getStartOffset() + nameEnd.getImage().length();
}
/**
* @return
*/
public Token getNameStart() {
return nameStart;
}
public static String tokensToString( Token first, Token last )
{
Name n = new Name( first, last );
return n.toString();
}
}

View file

@ -1,5 +1,7 @@
package org.eclipse.cdt.internal.core.parser;
import org.eclipse.cdt.core.parser.IParser;
public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)

View file

@ -15,9 +15,18 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.internal.core.model.Util;
import org.eclipse.cdt.internal.core.parser.ParserSymbolTable.Declaration;
import org.eclipse.cdt.internal.core.parser.ParserSymbolTable.TypeInfo;
/**
* This is our first implementation of the IParser interface, serving as a parser for
@ -35,7 +44,8 @@ public class Parser implements IParser {
private boolean quickParse = false; // are we doing the high-level parse, or an in depth parse?
private boolean parsePassed = true; // did the parse pass?
private boolean cppNature = true; // true for C++, false for C
private ParserSymbolTable pst = new ParserSymbolTable(); // names
private ISourceElementRequestor requestor = null; // new callback mechanism
private IASTFactory astFactory = null; // ast factory
/**
* This is the single entry point for setting parsePassed to
@ -62,9 +72,13 @@ public class Parser implements IParser {
public Parser(IScanner s, IParserCallback c, boolean quick) {
callback = c;
scanner = s;
if( c instanceof ISourceElementRequestor )
setRequestor( (ISourceElementRequestor)c );
quickParse = quick;
astFactory = ParserFactory.createASTFactory( quick );
scanner.setQuickScan(quick);
scanner.setCallback(c);
scanner.setASTFactory( astFactory );
}
@ -162,14 +176,17 @@ c, quickParse);
protected void translationUnit() {
try { callback.setParser( this ); } catch( Exception e) {}
Object translationUnit = null;
try{ translationUnit = callback.translationUnitBegin();} catch( Exception e ) {}
pst.getCompilationUnit().setObject(translationUnit);
try{ translationUnit = callback.translationUnitBegin();} catch( Exception e ) {}
IASTCompilationUnit compilationUnit = astFactory.createCompilationUnit();
requestor.enterCompilationUnit( compilationUnit );
Token lastBacktrack = null;
Token checkToken;
while (true) {
try {
checkToken = LA(1);
declaration( translationUnit, pst.getCompilationUnit() );
declaration( translationUnit, compilationUnit );
if( LA(1) == checkToken )
errorHandling();
} catch (EndOfFile e) {
@ -199,8 +216,12 @@ c, quickParse);
}
}
try{ callback.translationUnitEnd(translationUnit);} catch( Exception e ) {}
requestor.exitCompilationUnit( compilationUnit );
}
/**
* This function is called whenever we encounter and error that we cannot backtrack out of and we
* still wish to try and continue on with the parse to do a best-effort parse for our client.
@ -240,7 +261,7 @@ c, quickParse);
* @param container Callback object representing the scope these definitions fall into.
* @throws Backtrack request for a backtrack
*/
protected void usingClause( Object container ) throws Backtrack
protected void usingClause( Object container, IASTScope scope ) throws Backtrack
{
Token firstToken = consume( Token.t_using );
@ -251,10 +272,11 @@ c, quickParse);
// using-directive
consume( Token.t_namespace );
// optional :: and nested classes handled in name
// optional :: and nested classes handled in name
TokenDuple duple = null ;
if( LT(1) == Token.tIDENTIFIER || LT(1) == Token.tCOLONCOLON )
{
name();
duple = name();
try{ callback.usingDirectiveNamespaceId( directive );} catch( Exception e ) {}
}
else
@ -267,6 +289,9 @@ c, quickParse);
{
consume( Token.tSEMI );
try{ callback.usingDirectiveEnd( directive );} catch( Exception e ) {}
IASTUsingDirective astUD = astFactory.createUsingDirective(scope, duple);
requestor.acceptUsingDirective( astUD );
return;
}
else
@ -287,10 +312,11 @@ c, quickParse);
consume( Token.t_typename );
}
TokenDuple name = null;
if( LT(1) == Token.tIDENTIFIER || LT(1) == Token.tCOLONCOLON )
{
// optional :: and nested classes handled in name
name();
name = name();
try{ callback.usingDeclarationMapping( usingDeclaration, typeName ); } catch( Exception e ) {}
}
else
@ -302,7 +328,11 @@ c, quickParse);
if( LT(1) == Token.tSEMI )
{
consume( Token.tSEMI );
try{ callback.usingDeclarationEnd( usingDeclaration );} catch( Exception e ) {}
IASTUsingDeclaration declaration = astFactory.createUsingDeclaration( scope, typeName, name );
requestor.acceptUsingDeclaration(declaration);
}
else
{
@ -311,7 +341,8 @@ c, quickParse);
}
}
}
/**
* Implements Linkage specification in the ANSI C++ grammar.
*
@ -322,19 +353,25 @@ c, quickParse);
* @param container Callback object representing the scope these definitions fall into.
* @throws Backtrack request for a backtrack
*/
protected void linkageSpecification( Object container ) throws Backtrack
protected void linkageSpecification( Object container, IASTScope scope ) throws Backtrack
{
consume( Token.t_extern );
if( LT(1) != Token.tSTRING )
throw backtrack;
Object linkageSpec = null;
try{ linkageSpec = callback.linkageSpecificationBegin( container, consume( Token.tSTRING ).getImage() );} catch( Exception e ) {}
Object linkageSpec = null;
Token spec = consume( Token.tSTRING );
try{ linkageSpec = callback.linkageSpecificationBegin( container, spec.getImage() );} catch( Exception e ) {}
if( LT(1) == Token.tLBRACE )
{
consume(Token.tLBRACE);
{
consume(Token.tLBRACE);
IASTLinkageSpecification linkage = astFactory.createLinkageSpecification(scope, spec.getImage());
requestor.enterLinkageSpecification( linkage );
linkageDeclarationLoop:
while (LT(1) != Token.tRBRACE) {
Token checkToken = LA(1);
@ -345,7 +382,7 @@ c, quickParse);
default:
try
{
declaration(linkageSpec, null);
declaration(linkageSpec, linkage);
}
catch( Backtrack bt )
{
@ -360,13 +397,21 @@ c, quickParse);
// consume the }
consume();
try{ callback.linkageSpecificationEnd( linkageSpec );} catch( Exception e ) {}
requestor.exitLinkageSpecification( linkage );
}
else // single declaration
{
declaration( linkageSpec, null );
IASTLinkageSpecification linkage = astFactory.createLinkageSpecification( scope, spec.getImage() );
requestor.enterLinkageSpecification( linkage );
declaration( linkageSpec );
try{ callback.linkageSpecificationEnd( linkageSpec );} catch( Exception e ) {}
requestor.exitLinkageSpecification( linkage );
}
}
/**
*
@ -397,7 +442,7 @@ c, quickParse);
// explicit-instantiation
Object instantiation = null;
try { instantiation = callback.explicitInstantiationBegin( container ); } catch( Exception e ) { }
declaration( instantiation, null );
declaration( instantiation );
try { callback.explicitInstantiationEnd( instantiation ); } catch( Exception e ) { }
return;
}
@ -410,7 +455,7 @@ c, quickParse);
// explicit-specialization
Object specialization = null;
try{ specialization = callback.explicitSpecializationBegin( container ); } catch( Exception e ) { }
declaration( specialization, null );
declaration( specialization );
try{ callback.explicitSpecializationEnd( specialization ); } catch( Exception e ) { }
return;
}
@ -422,7 +467,7 @@ c, quickParse);
try{ templateDeclaration = callback.templateDeclarationBegin( container, firstToken ); } catch ( Exception e ) {}
templateParameterList( templateDeclaration );
consume( Token.tGT );
declaration( templateDeclaration, null );
declaration( templateDeclaration );
try{ callback.templateDeclarationEnd( templateDeclaration, lastToken ); } catch( Exception e ) {}
} catch( Backtrack bt )
@ -529,6 +574,11 @@ c, quickParse);
}
}
protected void declaration( Object container ) throws Backtrack
{
declaration( container, null );
}
/**
* The most abstract construct within a translationUnit : a declaration.
*
@ -552,23 +602,29 @@ c, quickParse);
* @param container IParserCallback object which serves as the owner scope for this declaration.
* @throws Backtrack request a backtrack
*/
protected void declaration( Object container, Declaration scope ) throws Backtrack {
protected void declaration( Object container, IASTScope scope ) throws Backtrack {
switch (LT(1)) {
case Token.t_asm:
consume( Token.t_asm );
Token first = consume( Token.t_asm );
consume( Token.tLPAREN );
String assembly = consume( Token.tSTRING ).getImage();
consume( Token.tRPAREN );
consume( Token.tSEMI );
Token last = consume( Token.tSEMI );
IASTASMDefinition asmDefinition =
astFactory.createASMDefinition(scope, assembly, first.getOffset(), last.getEndOffset());
// if we made it this far, then we have all we need
// do the callback
try{ callback.asmDefinition( container, assembly );} catch( Exception e ) {}
return;
requestor.acceptASMDefinition( asmDefinition );
return;
case Token.t_namespace:
namespaceDefinition( container, scope );
namespaceDefinition( container, scope);
return;
case Token.t_using:
usingClause( container );
usingClause( container, scope );
return;
case Token.t_export:
case Token.t_template:
@ -577,20 +633,20 @@ c, quickParse);
case Token.t_extern:
if( LT(2) == Token.tSTRING )
{
linkageSpecification( container );
linkageSpecification( container, scope );
return;
}
default:
Token mark = mark();
try
{
simpleDeclaration( container, true, scope ); // try it first with the original strategy
simpleDeclaration( container, true ); // try it first with the original strategy
}
catch( Backtrack bt)
{
// did not work
backup( mark );
simpleDeclaration( container, false, scope ); // try it again with the second strategy
simpleDeclaration( container, false ); // try it again with the second strategy
}
}
}
@ -606,72 +662,43 @@ c, quickParse);
* @throws Backtrack request a backtrack
*/
protected void namespaceDefinition( Object container, Declaration scope ) throws Backtrack
protected void namespaceDefinition( Object container, IASTScope scope ) throws Backtrack
{
Object namespace = null;
boolean redeclared = false;
Token firstToken = consume( Token.t_namespace );
Token first = consume( Token.t_namespace );
try{ namespace = callback.namespaceDefinitionBegin( container, first );} catch( Exception e ) {}
// optional name
String identifier = "";
Token identifier = null;
// optional name
if( LT(1) == Token.tIDENTIFIER )
{
identifier = LA(1).getImage();
identifier();
identifier = identifier();
try{ callback.namespaceDefinitionId( namespace );} catch( Exception e ) {}
}
if( LT(1) == Token.tLBRACE )
{
consume( Token.tLBRACE);
Declaration namespaceSymbol = null;
try {
namespaceSymbol = scope.Lookup( identifier );
} catch (ParserSymbolTableException e1) {
// should not get ambiguity here
}
if( namespaceSymbol == null )
{
namespaceSymbol = pst.new Declaration( identifier );
try
{
namespaceSymbol.setType( TypeInfo.t_namespace );
}
catch( ParserSymbolTableException pste )
{
// should never happen
}
try{ namespace = callback.namespaceDefinitionBegin( container, firstToken );} catch( Exception e ) {}
namespaceSymbol.setObject( namespace );
try {
scope.addDeclaration( namespaceSymbol );
} catch (ParserSymbolTableException e2) {
// TODO ambiguity?
}
if( !identifier.equals( "" ))
try{ callback.namespaceDefinitionId( namespace );} catch( Exception e ) {}
}
else
{
if( namespaceSymbol.getType() != TypeInfo.t_namespace )
throw backtrack;
namespace = namespaceSymbol.getObject();
redeclared = true;
}
consume();
IASTNamespaceDefinition namespaceDefinition =
astFactory.createNamespaceDefinition(
scope,
( identifier == null ? "" : identifier.getImage() ),
first.getOffset(), ( identifier == null ? 0 : identifier.getOffset()) );
requestor.enterNamespaceDefinition( namespaceDefinition );
namepsaceDeclarationLoop:
while (LT(1) != Token.tRBRACE) {
Token checkToken = LA(1);
switch (LT(1)) {
case Token.tRBRACE:
consume(Token.tRBRACE);
//consume(Token.tRBRACE);
break namepsaceDeclarationLoop;
default:
try
{
declaration(namespace, namespaceSymbol);
declaration(namespace, namespaceDefinition);
}
catch( Backtrack bt )
{
@ -685,9 +712,11 @@ c, quickParse);
}
// consume the }
Token lastToken =consume( Token.tRBRACE );
if( ! redeclared )
try{ callback.namespaceDefinitionEnd( namespace, lastToken );} catch( Exception e ) {}
Token last = consume( Token.tRBRACE );
try{ callback.namespaceDefinitionEnd( namespace, last);} catch( Exception e ) {}
namespaceDefinition.setEndingOffset( last.getOffset() + last.getLength());
requestor.exitNamespaceDefinition( namespaceDefinition );
}
else
{
@ -695,9 +724,9 @@ c, quickParse);
throw backtrack;
}
}
/**
* Serves as the catch-all for all complicated declarations, including function-definitions.
*
@ -715,10 +744,10 @@ c, quickParse);
* @param tryConstructor true == take strategy1 (constructor ) : false == take strategy 2 ( pointer to function)
* @throws Backtrack request a backtrack
*/
protected void simpleDeclaration( Object container, boolean tryConstructor, Declaration scope ) throws Backtrack {
protected void simpleDeclaration( Object container, boolean tryConstructor ) throws Backtrack {
Object simpleDecl = null;
try{ simpleDecl = callback.simpleDeclarationBegin( container, LA(1));} catch( Exception e ) {}
declSpecifierSeq(simpleDecl, false, tryConstructor, scope);
declSpecifierSeq(simpleDecl, false, tryConstructor);
Object declarator = null;
if (LT(1) != Token.tSEMI)
@ -846,7 +875,7 @@ c, quickParse);
Token current = LA(1);
Object parameterDecl = null;
try{ parameterDecl = callback.parameterDeclarationBegin( containerObject );} catch( Exception e ) {}
declSpecifierSeq( parameterDecl, true, false, null );
declSpecifierSeq( parameterDecl, true, false );
if (LT(1) != Token.tSEMI)
try {
@ -1029,7 +1058,7 @@ c, quickParse);
* @param tryConstructor true for constructor, false for pointer to function strategy
* @throws Backtrack request a backtrack
*/
protected void declSpecifierSeq( Object decl, boolean parm, boolean tryConstructor, Declaration scope ) throws Backtrack {
protected void declSpecifierSeq( Object decl, boolean parm, boolean tryConstructor ) throws Backtrack {
Flags flags = new Flags( parm, tryConstructor );
declSpecifiers:
for (;;) {
@ -1097,7 +1126,6 @@ c, quickParse);
return;
if ( lookAheadForDeclarator( flags ) )
return;
try{ callback.simpleDeclSpecifier(decl,LA(1));} catch( Exception e ) {}
name();
try{ callback.simpleDeclSpecifierName( decl );} catch( Exception e ) {}
@ -1112,7 +1140,7 @@ c, quickParse);
{
try
{
classSpecifier(decl, scope);
classSpecifier(decl);
return;
}
catch( Backtrack bt )
@ -1172,6 +1200,7 @@ c, quickParse);
callback.elaboratedTypeSpecifierEnd( elab );
} catch( Exception e ) {}
}
/**
* Consumes template parameters.
@ -1210,13 +1239,14 @@ c, quickParse);
*
* @throws Backtrack request a backtrack
*/
protected void identifier() throws Backtrack {
protected Token identifier() throws Backtrack {
Token first = consume(Token.tIDENTIFIER); // throws backtrack if its not that
try
{
callback.nameBegin(first);
callback.nameEnd(first);
} catch( Exception e ) {}
return first;
}
/**
@ -1274,7 +1304,7 @@ c, quickParse);
*
* @throws Backtrack request a backtrack
*/
protected void name() throws Backtrack {
protected TokenDuple name() throws Backtrack {
Token first = LA(1);
Token last = null;
@ -1318,6 +1348,7 @@ c, quickParse);
}
try{ callback.nameEnd(last);} catch( Exception e ) {}
return new TokenDuple( first, last );
}
@ -1873,7 +1904,7 @@ c, quickParse);
* @param owner IParserCallback object that represents the declaration that owns this classSpecifier
* @throws Backtrack request a backtrack
*/
protected void classSpecifier( Object owner, Declaration scope ) throws Backtrack {
protected void classSpecifier( Object owner ) throws Backtrack {
Token classKey = null;
Token mark = mark();
@ -1931,7 +1962,7 @@ c, quickParse);
default:
try
{
declaration(classSpec, scope);
declaration(classSpec);
}
catch( Backtrack bt )
{
@ -2115,7 +2146,7 @@ c, quickParse);
while (LT(1) == Token.t_catch) {
consume();
consume(Token.tLPAREN);
declaration(null, null); // was exceptionDeclaration
declaration(null); // was exceptionDeclaration
consume(Token.tRPAREN);
compoundStatement();
}
@ -2147,7 +2178,7 @@ c, quickParse);
}
// declarationStatement
declaration(null, null);
declaration(null);
}
}
@ -3121,4 +3152,14 @@ c, quickParse);
public int getLastErrorOffset() {
return firstErrorOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IParser#setRequestor(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
public void setRequestor(ISourceElementRequestor r) {
requestor = r;
if( scanner != null )
scanner.setRequestor(r);
}
}

View file

@ -0,0 +1,30 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.full.FullParseASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.quick.QuickParseASTFactory;
/**
* @author jcamelon
*
*/
public class ParserFactory {
public static IASTFactory createASTFactory( boolean quickParse )
{
if( quickParse )
return new QuickParseASTFactory();
else
return new FullParseASTFactory();
}
}

View file

@ -24,6 +24,13 @@ import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
/**
* @author jcamelon
*
@ -43,12 +50,12 @@ public class Scanner implements IScanner {
new ScannerContext().initialize(
new StringReader("\n"),
START,
ScannerContext.SENTINEL));
ScannerContext.SENTINEL, null), requestor);
if (filename == null)
contextStack.push( new ScannerContext().initialize(reader, TEXT, ScannerContext.TOP ) );
contextStack.push( new ScannerContext().initialize(reader, TEXT, ScannerContext.TOP, null ), requestor );
else
contextStack.push( new ScannerContext().initialize(reader, filename, ScannerContext.TOP ) );
contextStack.push( new ScannerContext().initialize(reader, filename, ScannerContext.TOP, null ), requestor );
} catch( ScannerException se ) {
//won't happen since we aren't adding an include or a macro
}
@ -255,8 +262,10 @@ public class Scanner implements IScanner {
return buffer.toString();
}
protected void handleInclusion(String fileName, boolean useIncludePaths ) throws ScannerException {
protected void handleInclusion(String fileName, boolean useIncludePaths, int nameOffset, int beginOffset, int endOffset ) throws ScannerException {
FileReader inclusionReader = null;
String newPath = null;
if( useIncludePaths ) // search include paths for this file
{
// iterate through the include paths
@ -266,16 +275,12 @@ public class Scanner implements IScanner {
File pathFile = (File)iter.next();
if (pathFile.isDirectory()) {
String newPath = pathFile.getPath() + File.separatorChar + fileName;
newPath = pathFile.getPath() + File.separatorChar + fileName;
File includeFile = new File(newPath);
if (includeFile.exists() && includeFile.isFile()) {
try {
FileReader inclusionReader =
new FileReader(includeFile);
contextStack.updateContext(inclusionReader, newPath, ScannerContext.INCLUSION );
return;
inclusionReader = new FileReader(includeFile);
break;
} catch (FileNotFoundException fnf) {
// do nothing - check the next directory
}
@ -289,23 +294,24 @@ public class Scanner implements IScanner {
File currentIncludeFile = new File( currentFilename );
String parentDirectory = currentIncludeFile.getParent();
currentIncludeFile = null;
String fullPath = parentDirectory + File.separatorChar + fileName;
File includeFile = new File( fullPath );
newPath = parentDirectory + File.separatorChar + fileName;
File includeFile = new File( newPath );
if (includeFile.exists() && includeFile.isFile()) {
try {
FileReader inclusionReader =
inclusionReader =
new FileReader(includeFile);
contextStack.updateContext(inclusionReader, fullPath, ScannerContext.INCLUSION );
return;
} catch (FileNotFoundException fnf) {
if (throwExceptionOnInclusionNotFound)
throw new ScannerException("Cannot find inclusion " + fileName);
}
}
}
if (throwExceptionOnInclusionNotFound)
if (throwExceptionOnInclusionNotFound && inclusionReader == null )
throw new ScannerException("Cannot find inclusion " + fileName);
IASTInclusion inclusion = astFactory.createInclusion( fileName, newPath, !useIncludePaths, beginOffset, endOffset, nameOffset );
contextStack.updateContext(inclusionReader, newPath, ScannerContext.INCLUSION, inclusion, requestor );
}
// constants
@ -390,7 +396,7 @@ public class Scanner implements IScanner {
try {
c = contextStack.getCurrentContext().read();
if (c == NOCHAR) {
if (contextStack.rollbackContext() == false) {
if (contextStack.rollbackContext(requestor) == false) {
c = NOCHAR;
break;
} else {
@ -398,7 +404,7 @@ public class Scanner implements IScanner {
}
}
} catch (IOException e) {
if (contextStack.rollbackContext() == false) {
if (contextStack.rollbackContext(requestor) == false) {
c = NOCHAR;
} else {
done = false;
@ -442,7 +448,7 @@ public class Scanner implements IScanner {
private void ungetChar(int c) throws ScannerException{
contextStack.getCurrentContext().pushUndo(c);
if( c == '\n' ) contextStack.recantNewline();
contextStack.undoRollback( lastContext );
contextStack.undoRollback( lastContext, requestor );
}
protected boolean lookAheadForTokenPasting() throws ScannerException
@ -652,7 +658,7 @@ public class Scanner implements IScanner {
if( storageBuffer != null )
{
storageBuffer.append( ident );
contextStack.updateContext( new StringReader( storageBuffer.toString()), PASTING, IScannerContext.MACROEXPANSION );
contextStack.updateContext( new StringReader( storageBuffer.toString()), PASTING, IScannerContext.MACROEXPANSION, null, requestor );
storageBuffer = null;
c = getChar();
continue;
@ -788,7 +794,7 @@ public class Scanner implements IScanner {
{
if( storageBuffer != null )
{
contextStack.updateContext( new StringReader( buff.toString()), PASTING, IScannerContext.MACROEXPANSION );
contextStack.updateContext( new StringReader( buff.toString()), PASTING, IScannerContext.MACROEXPANSION, null, requestor );
storageBuffer = null;
c = getChar();
continue;
@ -1776,17 +1782,26 @@ public class Scanner implements IScanner {
}
String f = fileName.toString();
offset = contextStack.getCurrentContext().getOffset() - f.length() - 1; // -1 for the end quote
if( quickScan )
{
if( callback != null )
{
offset = contextStack.getCurrentContext().getOffset() - f.length() - 1; // -1 for the end quote
callback.inclusionEnd(callback.inclusionBegin( f, offset, beginningOffset, !useIncludePath ));
}
if( requestor != null )
{
IASTInclusion i = astFactory.createInclusion( f, "", !useIncludePath, beginningOffset,
contextStack.getCurrentContext().getOffset(), offset );
requestor.enterInclusion(i);
requestor.exitInclusion(i);
}
}
else
handleInclusion(f.trim(), useIncludePath );
handleInclusion(f.trim(), useIncludePath, offset, beginningOffset, contextStack.getCurrentContext().getOffset() );
}
protected void poundDefine(int beginning) throws ScannerException, Parser.EndOfFile {
@ -1952,6 +1967,12 @@ public class Scanner implements IScanner {
// NOTE: return value is ignored!
callback.macro( key, offset, beginning, contextStack.getCurrentContext().getOffset() );
}
if( requestor != null )
{
IASTMacro m = astFactory.createMacro( key, beginning, contextStack.getCurrentContext().getOffset(), offset );
requestor.acceptMacro(m);
}
}
protected Vector getMacroParameters (String params, boolean forStringizing) throws ScannerException {
@ -2000,7 +2021,7 @@ public class Scanner implements IScanner {
throws ScannerException {
if (expansion instanceof String ) {
String replacementValue = (String) expansion;
contextStack.updateContext( new StringReader(replacementValue), (POUND_DEFINE + symbol ), ScannerContext.MACROEXPANSION );
contextStack.updateContext( new StringReader(replacementValue), (POUND_DEFINE + symbol ), ScannerContext.MACROEXPANSION, null, requestor );
} else if (expansion instanceof IMacroDescriptor ) {
IMacroDescriptor macro = (IMacroDescriptor) expansion;
skipOverWhitespace();
@ -2117,7 +2138,7 @@ public class Scanner implements IScanner {
String finalString = buffer.toString();
contextStack.updateContext(
new StringReader(finalString),
POUND_DEFINE + macro.getSignature(), ScannerContext.MACROEXPANSION );
POUND_DEFINE + macro.getSignature(), ScannerContext.MACROEXPANSION, null, requestor );
} else
if (throwExceptionOnBadMacroExpansion)
throw new ScannerException(
@ -2184,5 +2205,22 @@ public class Scanner implements IScanner {
mapLineNumbers = value;
}
private boolean mapLineNumbers = false;
private boolean mapLineNumbers = false;
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IScanner#setRequestor(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
public void setRequestor(ISourceElementRequestor r) {
requestor = r;
}
private ISourceElementRequestor requestor = null;
private IASTFactory astFactory = null;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IScanner#setASTFactory(org.eclipse.cdt.internal.core.parser.ast.IASTFactory)
*/
public void setASTFactory(IASTFactory f) {
astFactory = f;
}
}

View file

@ -14,6 +14,8 @@ import java.io.IOException;
import java.io.Reader;
import java.util.Stack;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
public class ScannerContext implements IScannerContext
{
private Reader reader;
@ -23,12 +25,13 @@ public class ScannerContext implements IScannerContext
private int kind;
public ScannerContext(){}
public IScannerContext initialize(Reader r, String f, int k)
public IScannerContext initialize(Reader r, String f, int k, IASTInclusion i)
{
reader = r;
filename = f;
offset = 0;
kind = k;
inc = i;
return this;
}
@ -103,6 +106,20 @@ public class ScannerContext implements IScannerContext
public void setKind(int kind) {
this.kind = kind;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IScannerContext#getExtension()
*/
public IASTInclusion getExtension() {
return inc;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IScannerContext#setExtension(org.eclipse.cdt.core.parser.ast.IASTInclusion)
*/
public void setExtension(IASTInclusion ext) {
inc = ext;
}
private IASTInclusion inc = null;
}

View file

@ -43,6 +43,8 @@ public class Token {
public int offset;
public int getOffset() { return offset; }
public int getLength() { return image.length(); }
public int getEndOffset() { return getOffset() + getLength(); }
public int getDelta( Token other )
{

View file

@ -0,0 +1,87 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser;
import java.util.Iterator;
/**
* @author jcamelon
*
*/
public class TokenDuple {
public TokenDuple( Token first, Token last )
{
firstToken = first;
lastToken = last;
}
private final Token firstToken, lastToken;
/**
* @return
*/
public Token getFirstToken() {
return firstToken;
}
/**
* @return
*/
public Token getLastToken() {
return lastToken;
}
public Iterator iterator()
{
return new TokenIterator();
}
private class TokenIterator implements Iterator
{
private Token iter = TokenDuple.this.firstToken;
/* (non-Javadoc)
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
return ( iter != TokenDuple.this.lastToken);
}
/* (non-Javadoc)
* @see java.util.Iterator#next()
*/
public Object next() {
Token temp = iter;
iter = iter.getNext();
return temp;
}
/* (non-Javadoc)
* @see java.util.Iterator#remove()
*/
public void remove() {
throw new UnsupportedOperationException();
}
}
public String toString()
{
StringBuffer buff = new StringBuffer();
Token iter = firstToken;
for( ; ; )
{
buff.append( iter.getImage() );
if( iter == lastToken ) break;
iter = iter.getNext();
}
return buff.toString();
}
}

View file

@ -0,0 +1,55 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast;
import org.eclipse.cdt.core.parser.ast.AccessVisibility;
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
/**
* @author jcamelon
*
*/
public class ASTBaseSpecifier implements IASTBaseSpecifier {
private final IASTClassSpecifier baseClass;
private final boolean isVirtual;
private final AccessVisibility visibility;
public ASTBaseSpecifier( IASTClassSpecifier c, AccessVisibility a, boolean virtual )
{
isVirtual = virtual;
baseClass = c;
visibility = a;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier#getAccess()
*/
public AccessVisibility getAccess() {
return visibility;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier#isVirtual()
*/
public boolean isVirtual() {
return isVirtual;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier#getParent()
*/
public IASTClassSpecifier getParent() {
return baseClass;
}
}

View file

@ -0,0 +1,97 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
/**
* @author jcamelon
*
*/
public class ASTInclusion implements IASTInclusion {
public ASTInclusion( String name, String fileName, boolean local )
{
this.name = name;
this.fileName = fileName;
this.local = local;
}
private final String name, fileName;
private final boolean local;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTInclusion#getName()
*/
public String getName() {
return name;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTInclusion#getFullFileName()
*/
public String getFullFileName() {
return fileName;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTInclusion#isLocal()
*/
public boolean isLocal() {
return local;
}
private int startingOffset = 0, nameOffset = 0, endingOffset = 0;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementStartingOffset()
*/
public int getElementStartingOffset() {
return startingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementEndingOffset()
*/
public int getElementEndingOffset() {
return endingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementNameOffset()
*/
public int getElementNameOffset() {
return nameOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IOffsetableElementRW#setStartingOffset(int)
*/
public void setStartingOffset(int o) {
startingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IOffsetableElementRW#setEndingOffset(int)
*/
public void setEndingOffset(int o) {
endingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IOffsetableElementRW#setNameOffset(int)
*/
public void setNameOffset(int o) {
nameOffset = o;
}
}

View file

@ -0,0 +1,72 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
/**
* @author jcamelon
*
*/
public class ASTMacro implements IASTMacro {
private final String name;
public ASTMacro( String name )
{
this.name =name;
}
private int startingOffset = 0, endingOffset = 0, nameOffset = 0;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMacro#getName()
*/
public String getName() {
return name;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElementRW#setStartingOffset(int)
*/
public void setStartingOffset(int o) {
startingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElementRW#setEndingOffset(int)
*/
public void setEndingOffset(int o) {
endingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElementRW#setNameOffset(int)
*/
public void setNameOffset(int o) {
nameOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementStartingOffset()
*/
public int getElementStartingOffset() {
return startingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementEndingOffset()
*/
public int getElementEndingOffset() {
return endingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementNameOffset()
*/
public int getElementNameOffset() {
return nameOffset;
}
}

View file

@ -0,0 +1,46 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
/**
* @author jcamelon
*
*/
public class BaseASTFactory {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createMacro(java.lang.String, int, int, int)
*/
public IASTMacro createMacro(String name, int startingOffset, int endingOffset, int nameOffset) {
IASTMacro m = new ASTMacro( name );
m.setStartingOffset( startingOffset );
m.setEndingOffset( endingOffset );
m.setNameOffset( nameOffset );
return m;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createInclusion(java.lang.String, java.lang.String, boolean)
*/
public IASTInclusion createInclusion(String name, String fileName, boolean local, int startingOffset, int endingOffset, int nameOffset) {
IASTInclusion inclusion = new ASTInclusion( name, fileName, local );
inclusion.setStartingOffset( startingOffset );
inclusion.setEndingOffset( endingOffset );
inclusion.setNameOffset( nameOffset );
return inclusion;
}
}

View file

@ -0,0 +1,37 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast;
/**
* @author jcamelon
*
*/
public class NamedOffsets extends Offsets {
private int nameOffset = 0;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getElementNameOffset()
*/
public int getElementNameOffset() {
return nameOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int)
*/
public void setNameOffset(int o) {
nameOffset = o;
}
}

View file

@ -0,0 +1,39 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast;
/**
* @author jcamelon
*
*/
public class Offsets {
protected int startingOffset = 0;
protected int endingOffset = 0;
public void setStartingOffset(int o) {
startingOffset = o;
}
public void setEndingOffset(int o) {
endingOffset = o;
}
public int getElementStartingOffset() {
return startingOffset;
}
public int getElementEndingOffset() {
return endingOffset;
}
}

View file

@ -0,0 +1,78 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
* @author jcamelon
*
*/
public class ASTASMDefinition implements IASTFASMDefinition {
private final String body;
public ASTASMDefinition( ISymbol s, String body )
{
this.symbol = s;
this.body = body;
}
private int startingOffset, endingOffset;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTASMDefinition#getBody()
*/
public String getBody() {
return body;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#setStartingOffset(int)
*/
public void setStartingOffset(int o) {
startingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#setEndingOffset(int)
*/
public void setEndingOffset(int o) {
endingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementStartingOffset()
*/
public int getElementStartingOffset() {
return startingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IOffsetableElement#getElementEndingOffset()
*/
public int getElementEndingOffset() {
return endingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.ISymbolTableExtension#getSymbol()
*/
private final ISymbol symbol;
public ISymbol getSymbol() {
return symbol;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTDeclaration#getOwnerScope()
*/
public IASTScope getOwnerScope() {
return (IPSTContainerExtension)symbol.getContainingSymbol().getASTNode();
}
}

View file

@ -0,0 +1,137 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.ClassKind;
import org.eclipse.cdt.core.parser.ast.ClassNameType;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
/**
* @author jcamelon
*
*/
public class ASTClassSpecifier implements IASTFClassSpecifier, IPSTSymbolExtension {
private final IDerivableContainerSymbol symbol;
private final ClassKind classKind;
private final ClassNameType type;
private final String name;
public ASTClassSpecifier( IDerivableContainerSymbol symbol, String name, ClassNameType type, ClassKind kind )
{
this.name = name;
this.symbol = symbol;
this.classKind = kind;
this.type = type;
symbol.setASTNode( this );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() {
return new ScopeIterator( symbol.getContainedSymbols());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassNameType()
*/
public ClassNameType getClassNameType() {
return type;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassKind()
*/
public ClassKind getClassKind() {
return classKind;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getBaseClauses()
*/
public Iterator getBaseClauses() {
return new BaseIterator( symbol.getParents() );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()
*/
public String getName() {
return name;
}
private int nameOffset = 0, startingOffset = 0, endingOffset = 0;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getElementNameOffset()
*/
public int getElementNameOffset() {
return nameOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int)
*/
public void setNameOffset(int o) {
nameOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTemplatedDeclaration#getOwnerTemplateDeclaration()
*/
public IASTTemplateDeclaration getOwnerTemplateDeclaration() {
if( getSymbol().getContainingSymbol().getType() == ParserSymbolTable.TypeInfo.t_template )
return (IASTTemplateDeclaration)getSymbol().getContainingSymbol().getASTNode();
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
*/
public void setStartingOffset(int o) {
startingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
*/
public void setEndingOffset(int o) {
endingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementStartingOffset()
*/
public int getElementStartingOffset() {
return startingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementEndingOffset()
*/
public int getElementEndingOffset() {
return endingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IPSTSymbolExtension#getSymbol()
*/
public ISymbol getSymbol() {
return symbol;
}
}

View file

@ -0,0 +1,50 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import java.util.Iterator;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
* @author jcamelon
*
*/
public class ASTCompilationUnit implements IASTFCompilationUnit {
public ASTCompilationUnit( IContainerSymbol symbol )
{
this.symbol = symbol;
symbol.setASTNode( this );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IScope#getDeclarations()
*/
public Iterator getDeclarations() {
return new ScopeIterator( symbol.getContainedSymbols() );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.ISymbolTableExtension#getSymbol()
*/
public IContainerSymbol getContainerSymbol() {
return symbol;
}
private final IContainerSymbol symbol;
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IPSTSymbolExtension#getSymbol()
*/
public ISymbol getSymbol() {
return symbol;
}
}

View file

@ -0,0 +1,68 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
* @author jcamelon
*
*/
public class ASTLinkageSpecification implements IASTFLinkageSpecification {
public ASTLinkageSpecification( IContainerSymbol symbol, String linkage )
{
this.symbol = symbol;
symbol.setASTNode( this );
this.linkage = linkage;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() {
return new ScopeIterator( symbol.getContainedSymbols() );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IPSTSymbolExtension#getSymbol()
*/
public IContainerSymbol getContainerSymbol() {
return symbol;
}
private final IContainerSymbol symbol;
private final String linkage;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification#getLinkageString()
*/
public String getLinkageString() {
return linkage;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IPSTSymbolExtension#getSymbol()
*/
public ISymbol getSymbol() {
return symbol;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTDeclaration#getOwnerScope()
*/
public IASTScope getOwnerScope() {
return (IPSTContainerExtension)symbol.getContainingSymbol().getASTNode();
}
}

View file

@ -0,0 +1,112 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
* @author jcamelon
*
*/
public class ASTNamespaceDefinition implements IASTFNamespaceDefinition {
public ASTNamespaceDefinition( IContainerSymbol symbol, String name )
{
this.symbol = symbol;
this.name = name;
}
private final String name;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition#getName()
*/
public String getName() {
return name;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() {
return new ScopeIterator( symbol.getContainedSymbols() );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IPSTSymbolExtension#getSymbol()
*/
public ISymbol getSymbol() {
return symbol;
}
private final IContainerSymbol symbol;
private int nameOffset = 0, startingOffset = 0, endingOffset = 0;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getElementNameOffset()
*/
public int getElementNameOffset() {
return nameOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int)
*/
public void setNameOffset(int o) {
nameOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
*/
public void setStartingOffset(int o) {
startingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
*/
public void setEndingOffset(int o) {
endingOffset = o;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementStartingOffset()
*/
public int getElementStartingOffset() {
return startingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementEndingOffset()
*/
public int getElementEndingOffset() {
return endingOffset;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IPSTContainerExtension#getContainerSymbol()
*/
public IContainerSymbol getContainerSymbol() {
return symbol;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTDeclaration#getOwnerScope()
*/
public IASTScope getOwnerScope() {
return (IPSTContainerExtension)symbol.getContainingSymbol().getASTNode();
}
}

View file

@ -0,0 +1,42 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
/**
* @author jcamelon
*
*/
public class ASTUsingDirective implements IASTUsingDirective {
private final String namespaceName;
public ASTUsingDirective( String namespace )
{
namespaceName = namespace;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTUsingDirective#getNamespaceName()
*/
public String getNamespaceName() {
return namespaceName;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTDeclaration#getOwnerScope()
*/
public IASTScope getOwnerScope() {
return null; //TODO
}
}

View file

@ -0,0 +1,53 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.internal.core.parser.ast.ASTBaseSpecifier;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
/**
* @author jcamelon
*
*/
public class BaseIterator implements Iterator {
private final Iterator rawIter;
public BaseIterator( List bases )
{
rawIter = bases.iterator();
}
/* (non-Javadoc)
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
return rawIter.hasNext();
}
/* (non-Javadoc)
* @see java.util.Iterator#next()
*/
public Object next() {
ParserSymbolTable.Declaration.ParentWrapper wrapper = (ParserSymbolTable.Declaration.ParentWrapper)rawIter.next();
return new ASTBaseSpecifier( (IASTFClassSpecifier)wrapper.getParent().getASTNode(), wrapper.getAccess(), wrapper.isVirtual());
}
/* (non-Javadoc)
* @see java.util.Iterator#remove()
*/
public void remove() {
throw new UnsupportedOperationException();
}
}

View file

@ -0,0 +1,148 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.internal.core.parser.Token;
import org.eclipse.cdt.internal.core.parser.TokenDuple;
import org.eclipse.cdt.internal.core.parser.Parser.Backtrack;
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException;
/**
* @author jcamelon
*
*/
public class FullParseASTFactory extends BaseASTFactory implements IASTFactory {
private ParserSymbolTable pst = new ParserSymbolTable(); // symbol table
public IASTUsingDirective createUsingDirective(
IASTScope scope,
TokenDuple duple)
throws Backtrack {
Iterator iter = duple.iterator();
Token t1 = (Token)iter.next();
IContainerSymbol symbol = null;
if( t1.getType() == Token.tCOLONCOLON )
symbol = pst.getCompilationUnit();
else
{
try
{
symbol = (IContainerSymbol)((IASTFScope)scope).getContainerSymbol().Lookup( t1.getImage() );
}
catch( ParserSymbolTableException pste )
{
handlePSTException( pste );
}
}
while( iter.hasNext() )
{
Token t = (Token)iter.next();
if( t.getType() == Token.tCOLONCOLON ) continue;
try
{
symbol = symbol.LookupNestedNameSpecifier( t.getImage() );
}
catch( ParserSymbolTableException pste )
{
handlePSTException( pste );
}
}
try {
((IASTFScope)scope).getContainerSymbol().addUsingDirective( symbol );
} catch (ParserSymbolTableException pste) {
handlePSTException( pste );
}
IASTUsingDirective astUD = new ASTUsingDirective( duple.toString() );
return astUD;
}
public IASTASMDefinition createASMDefinition(
IASTScope scope,
String assembly,
int first,
int last) {
IContainerSymbol containerSymbol = (IContainerSymbol)((IASTFScope)scope).getSymbol();
ISymbol asmSymbol = pst.newSymbol( "", ParserSymbolTable.TypeInfo.t_asm );
IASTFASMDefinition asmDefinition = new ASTASMDefinition( asmSymbol, assembly );
asmSymbol.setASTNode( asmDefinition );
try {
containerSymbol.addSymbol(asmSymbol);
} catch (ParserSymbolTableException e1) {
//?
}
asmDefinition.setStartingOffset( first );
asmDefinition.setEndingOffset( last );
return asmDefinition;
}
public IASTNamespaceDefinition createNamespaceDefinition(
IASTScope scope,
String identifier,
int first, int nameOffset ) {
IContainerSymbol namespaceSymbol = null;
pst.newContainerSymbol( identifier, ParserSymbolTable.TypeInfo.t_namespace );
IASTFNamespaceDefinition namespaceDefinition = new ASTNamespaceDefinition( namespaceSymbol, identifier );
namespaceDefinition.setStartingOffset( first );
if( identifier != "" )
namespaceDefinition.setNameOffset( nameOffset );
return namespaceDefinition;
}
public IASTCompilationUnit createCompilationUnit() {
IASTFCompilationUnit compilationUnit = new ASTCompilationUnit( pst.getCompilationUnit() );
return compilationUnit;
}
public IASTLinkageSpecification createLinkageSpecification(IASTScope scope, String spec) {
IContainerSymbol symbol = pst.newContainerSymbol("", ParserSymbolTable.TypeInfo.t_linkage );
IASTFLinkageSpecification linkage = new ASTLinkageSpecification( symbol, spec);
return linkage;
}
/**
* @param pste
*/
private void handlePSTException(ParserSymbolTableException pste) throws Backtrack {
throw new Backtrack();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple)
*/
public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, TokenDuple name) {
// TODO Auto-generated method stub
return null;
}
}

View file

@ -0,0 +1,21 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
/**
* @author jcamelon
*
*/
public interface IASTFASMDefinition
extends org.eclipse.cdt.core.parser.ast.IASTASMDefinition, IPSTSymbolExtension {
}

View file

@ -0,0 +1,22 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import org.eclipse.cdt.core.parser.ast.IASTScope;
/**
* @author jcamelon
*
*/
public interface IASTFClassSpecifier
extends IASTScope, org.eclipse.cdt.core.parser.ast.IASTClassSpecifier {
}

View file

@ -0,0 +1,23 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
/**
* @author jcamelon
*
*/
public interface IASTFCompilationUnit
extends
org.eclipse.cdt.core.parser.ast.IASTCompilationUnit,
IASTFScope {
}

View file

@ -0,0 +1,20 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
/**
* @author jcamelon
*
*/
public interface IASTFLinkageSpecification
extends org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification, IASTFScope {
}

View file

@ -0,0 +1,20 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
/**
* @author jcamelon
*
*/
public interface IASTFNamespaceDefinition
extends IASTFScope, org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition {
}

View file

@ -0,0 +1,20 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
/**
* @author jcamelon
*
*/
public interface IASTFScope
extends org.eclipse.cdt.core.parser.ast.IASTScope, IPSTContainerExtension {
}

View file

@ -0,0 +1,23 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
/**
* @author jcamelon
*
*/
public interface IPSTContainerExtension extends IPSTSymbolExtension, IASTScope {
public IContainerSymbol getContainerSymbol();
}

View file

@ -0,0 +1,22 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
* @author jcamelon
*
*/
public interface IPSTSymbolExtension {
ISymbol getSymbol();
}

View file

@ -0,0 +1,55 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.full;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
* @author jcamelon
*
*/
public class ScopeIterator implements Iterator {
private final Map sourceMap;
private final Iterator keyIter;
public ScopeIterator( Map in )
{
sourceMap = in;
keyIter = in.keySet().iterator();
}
/* (non-Javadoc)
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
return keyIter.hasNext();
}
/* (non-Javadoc)
* @see java.util.Iterator#next()
*/
public Object next() {
ISymbol symbol = (ISymbol)sourceMap.get( keyIter.next() );
return symbol.getASTNode();
}
/* (non-Javadoc)
* @see java.util.Iterator#remove()
*/
public void remove() {
throw new UnsupportedOperationException();
}
}

View file

@ -0,0 +1,70 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
/**
* @author jcamelon
*
*/
public class ASTASMDefinition
extends ASTDeclaration
implements IASTASMDefinition {
private Offsets offsets = new Offsets();
private final String assembly;
/**
* @param scope
*/
public ASTASMDefinition(IASTScope scope, String assembly) {
super(scope);
this.assembly = assembly;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTASMDefinition#getBody()
*/
public String getBody() {
return assembly;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
*/
public void setStartingOffset(int o) {
offsets.setStartingOffset(o);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
*/
public void setEndingOffset(int o) {
offsets.setEndingOffset( o );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementStartingOffset()
*/
public int getElementStartingOffset() {
return offsets.getElementStartingOffset();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementEndingOffset()
*/
public int getElementEndingOffset() {
return offsets.getElementEndingOffset();
}
}

View file

@ -0,0 +1,40 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
/**
* @author jcamelon
*
*/
public class ASTCompilationUnit implements IASTCompilationUnit, IASTQScope {
private List declarations = new ArrayList();
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() {
return declarations.iterator();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.quick.IASTQScope#addDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration)
*/
public void addDeclaration(IASTDeclaration declaration) {
declarations.add( declaration );
}
}

View file

@ -0,0 +1,35 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
/**
* @author jcamelon
*
*/
public class ASTDeclaration implements IASTDeclaration {
private final IASTScope scope;
public ASTDeclaration( IASTScope scope )
{
this.scope = scope;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTDeclaration#getOwnerScope()
*/
public IASTScope getOwnerScope() {
return scope;
}
}

View file

@ -0,0 +1,59 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTScope;
/**
* @author jcamelon
*
*/
public class ASTLinkageSpecification
extends ASTDeclaration
implements IASTDeclaration, IASTLinkageSpecification, IASTQScope {
private final String linkage;
public ASTLinkageSpecification( IASTScope scope, String linkage )
{
super( scope );
this.linkage = linkage;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification#getLinkageString()
*/
public String getLinkageString() {
return linkage;
}
private List declarations = new ArrayList();
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() {
return declarations.iterator();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.quick.IASTQScope#addDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration)
*/
public void addDeclaration(IASTDeclaration declaration) {
declarations.add( declaration );
}
}

View file

@ -0,0 +1,99 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
/**
* @author jcamelon
*
*/
public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamespaceDefinition, IASTQScope {
private final String name;
private NamedOffsets offsets = new NamedOffsets();
public ASTNamespaceDefinition( IASTScope scope, String name )
{
super( scope );
this.name = name;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()
*/
public String getName() {
return name;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getElementNameOffset()
*/
public int getElementNameOffset() {
return offsets.getElementNameOffset();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int)
*/
public void setNameOffset(int o) {
offsets.setNameOffset( o );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
*/
public void setStartingOffset(int o) {
offsets.setStartingOffset(o);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
*/
public void setEndingOffset(int o) {
offsets.setEndingOffset(o);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementStartingOffset()
*/
public int getElementStartingOffset() {
return offsets.getElementStartingOffset();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getElementEndingOffset()
*/
public int getElementEndingOffset() {
return offsets.getElementEndingOffset();
}
private List declarations = new ArrayList();
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() {
return declarations.iterator();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.quick.IASTQScope#addDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration)
*/
public void addDeclaration(IASTDeclaration declaration) {
declarations.add( declaration );
}
}

View file

@ -0,0 +1,47 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
/**
* @author jcamelon
*
*/
public class ASTUsingDeclaration
extends ASTDeclaration
implements IASTUsingDeclaration {
private final boolean isTypename;
private final String mappingName;
public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, String mappingName )
{
super( scope );
isTypename = isTypeName;
this.mappingName = mappingName;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename()
*/
public boolean isTypename() {
return isTypename;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#usingTypeName()
*/
public String usingTypeName() {
return mappingName;
}
}

View file

@ -0,0 +1,38 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
/**
* @author jcamelon
*
*/
public class ASTUsingDirective
extends ASTDeclaration
implements IASTUsingDirective {
public ASTUsingDirective( IASTScope scope, String name )
{
super( scope );
this.namespaceName = name;
}
private final String namespaceName;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTUsingDirective#getNamespaceName()
*/
public String getNamespaceName() {
return namespaceName;
}
}

View file

@ -0,0 +1,23 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
/**
* @author jcamelon
*
*/
public interface IASTQScope extends IASTScope {
public void addDeclaration( IASTDeclaration declaration );
}

View file

@ -0,0 +1,79 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.internal.core.parser.TokenDuple;
import org.eclipse.cdt.internal.core.parser.Parser.Backtrack;
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
/**
* @author jcamelon
*
*/
public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createUsingDirective(org.eclipse.cdt.internal.core.parser.ast.IASTScope, org.eclipse.cdt.internal.core.parser.TokenDuple)
*/
public IASTUsingDirective createUsingDirective(IASTScope scope, TokenDuple duple) throws Backtrack {
return new ASTUsingDirective( scope, duple.toString() );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createASMDefinition(org.eclipse.cdt.internal.core.parser.ast.IASTScope, java.lang.String, int, int)
*/
public IASTASMDefinition createASMDefinition(IASTScope scope, String assembly, int first, int last) {
IASTASMDefinition definition = new ASTASMDefinition( scope, assembly );
definition.setStartingOffset( first );
definition.setEndingOffset( last );
return definition;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createNamespaceDefinition(int, java.lang.String, int)
*/
public IASTNamespaceDefinition createNamespaceDefinition(IASTScope scope, String identifier, int first, int nameOffset) {
IASTNamespaceDefinition definition = new ASTNamespaceDefinition( scope, identifier );
definition.setStartingOffset( first );
definition.setNameOffset( nameOffset );
return definition;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createCompilationUnit()
*/
public IASTCompilationUnit createCompilationUnit() {
return new ASTCompilationUnit();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createLinkageSpecification(java.lang.String)
*/
public IASTLinkageSpecification createLinkageSpecification(IASTScope scope, String spec) {
return new ASTLinkageSpecification( scope, spec );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple)
*/
public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, TokenDuple name) {
return new ASTUsingDeclaration( scope, isTypeName, name.toString() );
}
}

Some files were not shown because too many files have changed in this diff Show more