mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Patch for John Camelon:
CORE - Updated callbacks and parser to add offset information to template declarations, thus making TemplateDeclaration implement IOffsetable.
This commit is contained in:
parent
006348900f
commit
938a074dd8
7 changed files with 85 additions and 18 deletions
|
@ -813,7 +813,7 @@ public class DOMBuilder implements IParserCallback
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
|
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
|
||||||
*/
|
*/
|
||||||
public Object templateDeclarationBegin(Object container, boolean exported) {
|
public Object templateDeclarationBegin(Object container, Token exported) {
|
||||||
return new TemplateDeclaration( (IScope)container, exported );
|
return new TemplateDeclaration( (IScope)container, exported );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -827,8 +827,9 @@ public class DOMBuilder implements IParserCallback
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
|
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public void templateDeclarationEnd(Object templateDecl) {
|
public void templateDeclarationEnd(Object templateDecl, Token lastToken) {
|
||||||
TemplateDeclaration decl = (TemplateDeclaration)templateDecl;
|
TemplateDeclaration decl = (TemplateDeclaration)templateDecl;
|
||||||
|
decl.setLastToken(lastToken);
|
||||||
decl.getOwnerScope().addDeclaration(decl);
|
decl.getOwnerScope().addDeclaration(decl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,21 +16,25 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.parser.Token;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author jcamelon
|
* @author jcamelon
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class TemplateDeclaration extends Declaration implements IScope, ITemplateParameterListOwner {
|
public class TemplateDeclaration extends Declaration implements IScope, ITemplateParameterListOwner, IOffsetable {
|
||||||
|
|
||||||
private final boolean exported;
|
private final boolean exported;
|
||||||
|
private Token firstToken, lastToken;
|
||||||
private IScope ownerScope;
|
private IScope ownerScope;
|
||||||
private List declarations = new ArrayList();
|
private List declarations = new ArrayList();
|
||||||
private TemplateParameterList templateParms = null;
|
private TemplateParameterList templateParms = null;
|
||||||
|
|
||||||
public TemplateDeclaration( IScope ownerScope, boolean exported )
|
public TemplateDeclaration( IScope ownerScope, Token exported )
|
||||||
{
|
{
|
||||||
this.ownerScope = ownerScope;
|
this.ownerScope = ownerScope;
|
||||||
this.exported = exported;
|
this.firstToken = exported;
|
||||||
|
this.exported = exported.getType() == Token.t_export ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -75,4 +79,60 @@ public class TemplateDeclaration extends Declaration implements IScope, ITemplat
|
||||||
templateParms = list;
|
templateParms = list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Token getFirstToken() {
|
||||||
|
return firstToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Token getLastToken() {
|
||||||
|
return lastToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param token
|
||||||
|
*/
|
||||||
|
public void setFirstToken(Token token) {
|
||||||
|
firstToken = token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param token
|
||||||
|
*/
|
||||||
|
public void setLastToken(Token token) {
|
||||||
|
lastToken = token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.dom.IOffsetable#getStartingOffset()
|
||||||
|
*/
|
||||||
|
public int getStartingOffset() {
|
||||||
|
return getFirstToken().getOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.dom.IOffsetable#getTotalLength()
|
||||||
|
*/
|
||||||
|
public int getTotalLength() {
|
||||||
|
return getLastToken().getOffset() + getLastToken().getLength() - getStartingOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.dom.IOffsetable#setStartingOffset(int)
|
||||||
|
*/
|
||||||
|
public void setStartingOffset(int i) {
|
||||||
|
throw new Error( "Sorry, not implemented bucko!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.dom.IOffsetable#setTotalLength(int)
|
||||||
|
*/
|
||||||
|
public void setTotalLength(int i) {
|
||||||
|
throw new Error( "Sorry, not implemented bucko!");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2003-04-10 John Camelon
|
||||||
|
Updated callbacks and parser to add offset information to template declarations,
|
||||||
|
thus making TemplateDeclaration implement IOffsetable.
|
||||||
|
|
||||||
2003-04-09 John Camelon
|
2003-04-09 John Camelon
|
||||||
Removed all the old Code Model Builder source that was no longer being used (NewModelBuilder.java, etc.).
|
Removed all the old Code Model Builder source that was no longer being used (NewModelBuilder.java, etc.).
|
||||||
Moved all the files in parser.util directory to the dom.
|
Moved all the files in parser.util directory to the dom.
|
||||||
|
|
|
@ -680,7 +680,7 @@ public class ExpressionEvaluator implements IParserCallback {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
|
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
|
||||||
*/
|
*/
|
||||||
public Object templateDeclarationBegin(Object container, boolean exported) {
|
public Object templateDeclarationBegin(Object container, Token exported) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -693,7 +693,7 @@ public class ExpressionEvaluator implements IParserCallback {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
|
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public void templateDeclarationEnd(Object templateDecl) {
|
public void templateDeclarationEnd(Object templateDecl, Token lastToken) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|
|
@ -124,9 +124,9 @@ public interface IParserCallback {
|
||||||
public Object explicitSpecializationBegin( Object container );
|
public Object explicitSpecializationBegin( Object container );
|
||||||
public void explicitSpecializationEnd( Object instantiation );
|
public void explicitSpecializationEnd( Object instantiation );
|
||||||
|
|
||||||
public Object templateDeclarationBegin( Object container, boolean exported );
|
public Object templateDeclarationBegin( Object container, Token firstToken );
|
||||||
public void templateDeclarationAbort( Object templateDecl );
|
public void templateDeclarationAbort( Object templateDecl );
|
||||||
public void templateDeclarationEnd( Object templateDecl );
|
public void templateDeclarationEnd( Object templateDecl, Token lastToken );
|
||||||
|
|
||||||
public Object templateParameterListBegin( Object declaration );
|
public Object templateParameterListBegin( Object declaration );
|
||||||
public void templateParameterListEnd( Object parameterList );
|
public void templateParameterListEnd( Object parameterList );
|
||||||
|
|
|
@ -569,7 +569,7 @@ public class NullParserCallback implements IParserCallback {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
|
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationBegin(java.lang.Object, boolean)
|
||||||
*/
|
*/
|
||||||
public Object templateDeclarationBegin(Object container, boolean exported) {
|
public Object templateDeclarationBegin(Object container, Token exported) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -582,7 +582,7 @@ public class NullParserCallback implements IParserCallback {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
|
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#templateDeclarationEnd(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
public void templateDeclarationEnd(Object templateDecl) {
|
public void templateDeclarationEnd(Object templateDecl, Token lastToken) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|
|
@ -283,14 +283,16 @@ c, quick);
|
||||||
*/
|
*/
|
||||||
protected void templateDeclaration( Object container ) throws Backtrack
|
protected void templateDeclaration( Object container ) throws Backtrack
|
||||||
{
|
{
|
||||||
boolean export = false;
|
Token firstToken = null;
|
||||||
if( LT(1) == Token.t_export )
|
if( LT(1) == Token.t_export )
|
||||||
{
|
{
|
||||||
consume( Token.t_export );
|
firstToken = consume( Token.t_export );
|
||||||
export = true;
|
consume( Token.t_template );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
firstToken = consume( Token.t_template );
|
||||||
|
|
||||||
|
|
||||||
consume( Token.t_template );
|
|
||||||
if( LT(1) != Token.tLT )
|
if( LT(1) != Token.tLT )
|
||||||
{
|
{
|
||||||
// explicit-instantiation
|
// explicit-instantiation
|
||||||
|
@ -318,11 +320,11 @@ c, quick);
|
||||||
Object templateDeclaration = null;
|
Object templateDeclaration = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
try{ templateDeclaration = callback.templateDeclarationBegin( container, export ); } catch ( Exception e ) {}
|
try{ templateDeclaration = callback.templateDeclarationBegin( container, firstToken ); } catch ( Exception e ) {}
|
||||||
templateParameterList( templateDeclaration );
|
templateParameterList( templateDeclaration );
|
||||||
consume( Token.tGT );
|
consume( Token.tGT );
|
||||||
declaration( templateDeclaration );
|
declaration( templateDeclaration );
|
||||||
try{ callback.templateDeclarationEnd( templateDeclaration ); } catch( Exception e ) {}
|
try{ callback.templateDeclarationEnd( templateDeclaration, lastToken ); } catch( Exception e ) {}
|
||||||
|
|
||||||
} catch( Backtrack bt )
|
} catch( Backtrack bt )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue