1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Patch for John Camelon:

Core fix for Outline View
- Fixed bug35939.  Proper CElement position is set on
Simple Declarations, Class Specifications, Namespaces,
Enumerations and Enumerators, Macros and Inclusions.
- Callbacks updated to provide additional offset
information.
This commit is contained in:
Doug Schaefer 2003-04-04 18:45:09 +00:00
parent 7081cddca6
commit 0ff98a152c
14 changed files with 191 additions and 111 deletions

View file

@ -72,7 +72,7 @@ public class DOMBuilder implements IParserCallback
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#classEnd()
*/
public void classSpecifierEnd(Object classSpecifier) {
public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
}
/**
@ -141,13 +141,13 @@ public class DOMBuilder implements IParserCallback
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#functionBodyEnd()
*/
public void functionBodyEnd(Object functionBody) {
public void functionBodyEnd(Object functionBody ) {
}
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#inclusionBegin(java.lang.String)
*/
public void inclusionBegin(String includeFile, int offset) {
public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
}
/**
@ -159,13 +159,13 @@ public class DOMBuilder implements IParserCallback
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#macro(java.lang.String)
*/
public void macro(String macroName, int offset) {
public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
}
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationBegin(org.eclipse.cdt.internal.core.newparser.Token)
*/
public Object simpleDeclarationBegin(Object container) {
public Object simpleDeclarationBegin(Object container, Token firstToken) {
SimpleDeclaration decl = new SimpleDeclaration();
((IScope)container).addDeclaration(decl);
return decl;
@ -174,7 +174,7 @@ public class DOMBuilder implements IParserCallback
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationEnd(org.eclipse.cdt.internal.core.newparser.Token)
*/
public void simpleDeclarationEnd(Object declaration) {
public void simpleDeclarationEnd(Object declaration, Token lastToken) {
}
/**
@ -488,10 +488,10 @@ public class DOMBuilder implements IParserCallback
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
public Object namespaceDefinitionBegin(Object container, Token namespace) {
IScope ownerScope = (IScope)container;
NamespaceDefinition namespace = new NamespaceDefinition(ownerScope);
return namespace;
NamespaceDefinition namespaceDef = new NamespaceDefinition(ownerScope);
return namespaceDef;
}
@ -512,7 +512,7 @@ public class DOMBuilder implements IParserCallback
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
NamespaceDefinition ns = (NamespaceDefinition)namespace;
ns.getOwnerScope().addDeclaration(ns);
}
@ -626,13 +626,13 @@ public class DOMBuilder implements IParserCallback
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
public Object enumeratorBegin(Object enumSpec) {
EnumerationSpecifier es = (EnumerationSpecifier)enumSpec;
EnumeratorDefinition definition = new EnumeratorDefinition();
es.addEnumeratorDefinition(definition);
@ -642,7 +642,7 @@ public class DOMBuilder implements IParserCallback
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
public void enumeratorId(Object enumDefn) {
EnumeratorDefinition definition = (EnumeratorDefinition)enumDefn;
definition.setName( currName );
}
@ -650,7 +650,7 @@ public class DOMBuilder implements IParserCallback
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
public void enumeratorEnd(Object enumDefn, Token lastToken) {
}
/* (non-Javadoc)

View file

@ -1,3 +1,7 @@
2003-04-04 John Camelon
Fixed defect 35939. Proper CElement::pos() is set on Simple Declarations,
Class Specifications, Namespaces, Enumerations and Enumerators, Macros and Inclusions.
2003-04-03 John Camelon
Fixed defects 36019, 36020, 36045.
Finished template declarations and their callbacks for the DOM (not the Code Model).

View file

@ -12,6 +12,7 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.model;
import org.eclipse.cdt.internal.core.parser.Token;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**
@ -22,6 +23,7 @@ public class EnumeratorWrapper {
private final EnumerationWrapper parent;
private Name name;
private Token lastToken = null;
EnumeratorWrapper( EnumerationWrapper myParent )
{
@ -50,4 +52,18 @@ public class EnumeratorWrapper {
this.name = name;
}
/**
* @return
*/
public Token getLastToken() {
return lastToken;
}
/**
* @param token
*/
public void setLastToken(Token token) {
lastToken = token;
}
}

View file

@ -1,7 +1,8 @@
package org.eclipse.cdt.internal.core.model;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.internal.core.parser.Token;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**********************************************************************
@ -19,11 +20,13 @@ import org.eclipse.cdt.internal.core.parser.util.Name;
public class NamespaceWrapper implements ICElementWrapper{
private Name name;
private final IParent parent;
private ICElement element;
private ICElement element;
private Token firstToken;
public NamespaceWrapper( IParent incoming)
public NamespaceWrapper( IParent incoming, Token namespace)
{
this.parent= incoming;
firstToken = namespace;
}
/**
@ -64,4 +67,12 @@ public class NamespaceWrapper implements ICElementWrapper{
element = item;
}
/**
* @return
*/
public Token getFirstToken() {
return firstToken;
}
}

View file

@ -83,7 +83,11 @@ public class NewModelBuilder implements IParserCallback {
/**
* @see org.eclipse.cdt.core.newparser.IParserCallback#endClass()
*/
public void classSpecifierEnd(Object classSpecifier) {
public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)classSpecifier;
Structure s = (Structure)wrapper.getElement();
s.setPos( wrapper.getClassKind().getOffset(),
wrapper.getClassKind().getDelta( closingBrace ));
}
/**
@ -121,10 +125,10 @@ public class NewModelBuilder implements IParserCallback {
/**
* @see org.eclipse.cdt.core.newparser.IParserCallback#macro(String)
*/
public void macro(String macroName, int offset) {
public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
Macro elem = new Macro((TranslationUnit)translationUnit.getElement(), macroName);
elem.setIdPos(offset, macroName.length());
elem.setPos(offset, macroName.length());
elem.setPos(macroBeginOffset, macroEndOffset - macroBeginOffset);
((TranslationUnit)translationUnit.getElement()).addChild(elem);
}
@ -135,12 +139,13 @@ public class NewModelBuilder implements IParserCallback {
* @see
org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(Token)
*/
public Object simpleDeclarationBegin(Object container) {
public Object simpleDeclarationBegin(Object container, Token firstToken) {
ICElementWrapper wrapper = (ICElementWrapper)container;
// Assuming that the parent is the container's element
IParent parent = (IParent)wrapper.getElement();
SimpleDeclarationWrapper result = new SimpleDeclarationWrapper();
result.setParent( parent );
result.setFirst( firstToken );
// A special case to transfere the visibility
if( wrapper instanceof SimpleDeclarationWrapper ){
result.setCurrentVisibility(((SimpleDeclarationWrapper)wrapper).getCurrentVisibility());
@ -151,13 +156,13 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#beginInclusion(String)
* @see org.eclipse.cdt.internal.core.newmparser.IParserCallback#beginInclusion(String)
*/
public void inclusionBegin(String includeFile, int offset) {
public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
Include elem = new Include(((TranslationUnit)translationUnit.getElement()), includeFile);
((TranslationUnit)translationUnit.getElement()).addChild(elem);
elem.setIdPos(offset, includeFile.length());
elem.setPos(offset, includeFile.length());
elem.setPos(inclusionBeginOffset, offset + includeFile.length() + 1 );
}
/**
@ -186,8 +191,9 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
*/
public void simpleDeclarationEnd(Object declaration) {
public void simpleDeclarationEnd(Object declaration, Token lastToken) {
SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)declaration;
wrapper.setLast( lastToken );
wrapper.createElements();
}
@ -267,7 +273,7 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#functionBodyEnd()
*/
public void functionBodyEnd(Object functionBody) {
public void functionBodyEnd(Object functionBody ) {
}
/**
@ -358,13 +364,11 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
{
elem.setTypeName( wrapper.getClassKind().getImage() );
elem.setIdPos(wrapper.getName().getStartOffset(), elementName.length());
elem.setPos(wrapper.getName().getStartOffset(), elementName.length());
}
else
{
elem.setTypeName( wrapper.getClassKind().getImage() );
elem.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
elem.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
elem.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
}
}
/**
@ -551,10 +555,10 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
public Object namespaceDefinitionBegin(Object container, Token namespace) {
ICElementWrapper c = (ICElementWrapper)container;
NamespaceWrapper wrapper = new NamespaceWrapper((IParent)c.getElement());
NamespaceWrapper wrapper = new NamespaceWrapper((IParent)c.getElement(), namespace);
return wrapper;
}
@ -574,8 +578,7 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
realParent.addChild( newNameSpace );
// set the positions
newNameSpace.setIdPos(wrapper.getName().getStartOffset(), namespaceName.length());
newNameSpace.setPos(wrapper.getName().getStartOffset(), namespaceName.length());
newNameSpace.setIdPos(wrapper.getName().getStartOffset(), namespaceName.length());
}
/* (non-Javadoc)
@ -588,7 +591,10 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
NamespaceWrapper wrapper = (NamespaceWrapper)namespace;
Namespace celement = (Namespace)wrapper.getElement();
celement.setPos( wrapper.getFirstToken().getOffset(), wrapper.getFirstToken().getDelta(closingBrace));
}
/* (non-Javadoc)
@ -696,7 +702,7 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
EnumerationWrapper wrapper = (EnumerationWrapper)enumSpec;
List enumerators = wrapper.getEnumerators();
@ -716,7 +722,8 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
String enumeratorName = subwrapper.getName().toString();
enumerator.setIdPos(subwrapper.getName().getStartOffset(), enumeratorName.length());
enumerator.setPos(subwrapper.getName().getStartOffset(), enumeratorName.length());
enumerator.setPos(subwrapper.getName().getStartOffset(),
subwrapper.getName().getNameStart().getDelta( subwrapper.getLastToken()));
enumeration.addChild( enumerator );
}
@ -725,19 +732,19 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
if( wrapper.getName() != null )
{
enumeration.setIdPos(wrapper.getName().getStartOffset(), enumName.length());
enumeration.setPos(wrapper.getName().getStartOffset(), enumName.length());
}
else
{
enumeration.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
enumeration.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
}
enumeration.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getDelta( closingBrace ));
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
public Object enumeratorBegin(Object enumSpec) {
EnumerationWrapper wrapper = (EnumerationWrapper)enumSpec;
EnumeratorWrapper result = new EnumeratorWrapper(wrapper);
return result;
@ -746,7 +753,7 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
public void enumeratorId(Object enumDefn) {
EnumeratorWrapper wrapper = (EnumeratorWrapper)enumDefn;
wrapper.setName( currName );
}
@ -754,8 +761,9 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
public void enumeratorEnd(Object enumDefn, Token lastToken) {
EnumeratorWrapper wrapper = (EnumeratorWrapper)enumDefn;
wrapper.setLastToken( lastToken );
wrapper.getParent().addEnumerator( wrapper );
}

View file

@ -3,9 +3,9 @@ package org.eclipse.cdt.internal.core.model;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.INamespace;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.core.parser.Token;
@ -22,6 +22,7 @@ public class SimpleDeclarationWrapper extends DeclSpecifier implements DeclSpeci
private ICElement element = null;
private IParent parent = null;
Token first = null, last = null;
private Name name = null;
private boolean functionDefinition = false;
@ -147,13 +148,13 @@ public class SimpleDeclarationWrapper extends DeclSpecifier implements DeclSpeci
{
// hook up the offsets
declaration.setIdPos( currentDeclarator.getName().getStartOffset(), currentDeclarator.getName().length() );
declaration.setPos( currentDeclarator.getName().getStartOffset(), currentDeclarator.getName().length());
}
else
{
declaration.setIdPos( classKind.getOffset(), classKind.getImage().toString().length());
declaration.setPos( classKind.getOffset(), classKind.getImage().toString().length());
}
declaration.setPos( getFirst().getOffset(), getFirst().getDelta( getLast() ));
// add to parent
parentElement.addChild( declaration );
@ -415,4 +416,32 @@ public class SimpleDeclarationWrapper extends DeclSpecifier implements DeclSpeci
this.classKind = classKind;
}
/**
* @return
*/
public Token getFirst() {
return first;
}
/**
* @return
*/
public Token getLast() {
return last;
}
/**
* @param token
*/
public void setFirst(Token token) {
first = token;
}
/**
* @param token
*/
public void setLast(Token token) {
last = token;
}
}

View file

@ -12,9 +12,9 @@
package org.eclipse.cdt.internal.core.parser;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Iterator;
import org.eclipse.cdt.internal.core.parser.util.TypeInfo;

View file

@ -122,7 +122,7 @@ public class ExpressionEvaluator implements IParserCallback {
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionBegin(java.lang.String, int)
*/
public void inclusionBegin(String includeFile, int offset) {
public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionEnd()
@ -132,18 +132,18 @@ public class ExpressionEvaluator implements IParserCallback {
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#macro(java.lang.String, int)
*/
public void macro(String macroName, int offset) {
public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationBegin(java.lang.Object)
*/
public Object simpleDeclarationBegin(Object Container) {
public Object simpleDeclarationBegin(Object Container, Token firstToken) {
return null;
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
*/
public void simpleDeclarationEnd(Object declaration) {
public void simpleDeclarationEnd(Object declaration, Token lastToken) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationBegin(java.lang.Object)
@ -212,7 +212,7 @@ public class ExpressionEvaluator implements IParserCallback {
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyEnd()
*/
public void functionBodyEnd(Object functionBody) {
public void functionBodyEnd(Object functionBody ) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
@ -228,7 +228,7 @@ public class ExpressionEvaluator implements IParserCallback {
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object)
*/
public void classSpecifierEnd(Object classSpecifier) {
public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierBegin(java.lang.Object)
@ -405,7 +405,7 @@ public class ExpressionEvaluator implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
public Object namespaceDefinitionBegin(Object container, Token namespace) {
return null;
}
@ -429,7 +429,7 @@ public class ExpressionEvaluator implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
}
@ -536,7 +536,7 @@ public class ExpressionEvaluator implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
}
@ -544,7 +544,7 @@ public class ExpressionEvaluator implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
public Object enumeratorBegin(Object enumSpec) {
return null;
}
@ -552,7 +552,7 @@ public class ExpressionEvaluator implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
public void enumeratorId(Object enumDefn) {
}
@ -560,7 +560,7 @@ public class ExpressionEvaluator implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
public void enumeratorEnd(Object enumDefn, Token lastToken) {
}
@ -722,5 +722,4 @@ public class ExpressionEvaluator implements IParserCallback {
*/
public void templateParameterListEnd(Object parameterList) {
}
}

View file

@ -15,14 +15,14 @@ public interface IParserCallback {
public Object translationUnitBegin();
public void translationUnitEnd(Object unit);
public void inclusionBegin(String includeFile, int offset);
public void inclusionBegin(String includeFile, int nameBeginOffset, int inclusionBeginOffset);
public void inclusionEnd();
public void macro(String macroName, int offset);
public void macro(String macroName, int macroNameOffset, int macroBeginOffset, int macroEndOffset);
public Object simpleDeclarationBegin(Object Container);
public Object simpleDeclarationBegin(Object Container, Token firstToken);
public void simpleDeclSpecifier(Object Container, Token specifier);
public void simpleDeclSpecifierName( Object declaration );
public void simpleDeclarationEnd(Object declaration);
public void simpleDeclarationEnd(Object declaration, Token lastToken);
public Object parameterDeclarationBegin( Object Container );
public void parameterDeclarationEnd( Object declaration );
@ -60,7 +60,7 @@ public interface IParserCallback {
public void classSpecifierAbort( Object classSpecifier );
public void classSpecifierSafe( Object classSpecifier );
public void classMemberVisibility( Object classSpecifier, Token visibility );
public void classSpecifierEnd(Object classSpecifier);
public void classSpecifierEnd(Object classSpecifier, Token closingBrace );
public Object baseSpecifierBegin( Object containingClassSpec );
public void baseSpecifierName( Object baseSpecifier );
@ -78,10 +78,10 @@ public interface IParserCallback {
public void elaboratedTypeSpecifierName( Object elab );
public void elaboratedTypeSpecifierEnd( Object elab );
public Object namespaceDefinitionBegin( Object container );
public Object namespaceDefinitionBegin( Object container, Token namespace );
public void namespaceDefinitionId( Object namespace );
public void namespaceDefinitionAbort( Object namespace );
public void namespaceDefinitionEnd( Object namespace );
public void namespaceDefinitionEnd( Object namespace, Token closingBrace );
public Object linkageSpecificationBegin( Object container, String literal );
public void linkageSpecificationEnd( Object linkageSpec );
@ -99,11 +99,11 @@ public interface IParserCallback {
public Object enumSpecifierBegin( Object container, Token enumKey );
public void enumSpecifierId( Object enumSpec );
public void enumSpecifierAbort( Object enumSpec );
public void enumSpecifierEnd( Object enumSpec );
public void enumSpecifierEnd( Object enumSpec, Token closingBrace );
public Object enumDefinitionBegin( Object enumSpec );
public void enumDefinitionId( Object enumDefn );
public void enumDefinitionEnd( Object enumDefn );
public Object enumeratorBegin( Object enumSpec );
public void enumeratorId( Object enumDefn );
public void enumeratorEnd( Object enumDefn, Token lastToken );
public void asmDefinition( Object container, String assemblyCode );

View file

@ -18,7 +18,7 @@ public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionBegin(java.lang.String, int)
*/
public void inclusionBegin(String includeFile, int offset) {
public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
}
/* (non-Javadoc)
@ -30,13 +30,13 @@ public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#macro(java.lang.String, int)
*/
public void macro(String macroName, int offset) {
public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationBegin(java.lang.Object)
*/
public Object simpleDeclarationBegin(Object Container) {
public Object simpleDeclarationBegin(Object Container, Token firstToken) {
return null;
}
@ -55,7 +55,7 @@ public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
*/
public void simpleDeclarationEnd(Object declaration) {
public void simpleDeclarationEnd(Object declaration, Token lastToken) {
}
/* (non-Javadoc)
@ -224,7 +224,7 @@ public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object)
*/
public void classSpecifierEnd(Object classSpecifier) {
public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
}
/* (non-Javadoc)
@ -317,7 +317,7 @@ public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
public Object namespaceDefinitionBegin(Object container) {
public Object namespaceDefinitionBegin(Object container, Token namespace) {
return null;
}
@ -336,7 +336,7 @@ public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
public void namespaceDefinitionEnd(Object namespace) {
public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
}
/* (non-Javadoc)
@ -432,26 +432,26 @@ public class NullParserCallback implements IParserCallback {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
public void enumSpecifierEnd(Object enumSpec) {
public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
public Object enumDefinitionBegin(Object enumSpec) {
public Object enumeratorBegin(Object enumSpec) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
public void enumDefinitionId(Object enumDefn) {
public void enumeratorId(Object enumDefn) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
public void enumDefinitionEnd(Object enumDefn) {
public void enumeratorEnd(Object enumDefn, Token lastToken) {
}
/* (non-Javadoc)

View file

@ -459,9 +459,8 @@ c, quick);
protected void namespaceDefinition( Object container ) throws Backtrack
{
consume( Token.t_namespace);
Object namespace = null;
try{ namespace = callback.namespaceDefinitionBegin( container );} catch( Exception e ) {}
try{ namespace = callback.namespaceDefinitionBegin( container, consume( Token.t_namespace) );} catch( Exception e ) {}
// optional name
if( LT(1) == Token.tIDENTIFIER )
@ -487,8 +486,8 @@ c, quick);
consumeToNextSemicolon();
}
// consume the }
consume();
try{ callback.namespaceDefinitionEnd( namespace );} catch( Exception e ) {}
try{ callback.namespaceDefinitionEnd( namespace, consume( Token.tRBRACE ));} catch( Exception e ) {}
}
else
{
@ -511,7 +510,8 @@ c, quick);
*/
protected void simpleDeclaration( Object container ) throws Backtrack {
Object simpleDecl = null;
try{ simpleDecl = callback.simpleDeclarationBegin( container);} catch( Exception e ) {}
Token lastToken = null;
try{ simpleDecl = callback.simpleDeclarationBegin( container, LA(1));} catch( Exception e ) {}
declSpecifierSeq(simpleDecl, false);
Object declarator = null;
@ -534,7 +534,7 @@ c, quick);
switch (LT(1)) {
case Token.tSEMI:
consume();
lastToken = consume(Token.tSEMI);
break;
case Token.tCOLON:
ctorInitializer(declarator);
@ -545,10 +545,11 @@ c, quick);
if (quickParse) {
// speed up the parser by skiping the body
// simply look for matching brace and return
consume(Token.tLBRACE);
lastToken = consume(Token.tLBRACE);
int depth = 1;
while (depth > 0) {
switch (consume().getType()) {
lastToken = consume();
switch (lastToken.getType()) {
case Token.tRBRACE:
--depth;
break;
@ -560,13 +561,13 @@ c, quick);
} else {
functionBody();
}
try{ callback.functionBodyEnd(function);} catch( Exception e ) {}
try{ callback.functionBodyEnd(function );} catch( Exception e ) {}
break;
default:
break;
}
try{ callback.simpleDeclarationEnd(simpleDecl);} catch( Exception e ) {}
try{ callback.simpleDeclarationEnd(simpleDecl, lastToken);} catch( Exception e ) {}
}
protected void ctorInitializer(Object declarator) throws Backtrack {
@ -1269,9 +1270,9 @@ c, quick);
if( LT(1) == Token.tIDENTIFIER )
{
defn = null;
try{ defn = callback.enumDefinitionBegin( enumSpecifier );} catch( Exception e ) {}
try{ defn = callback.enumeratorBegin( enumSpecifier );} catch( Exception e ) {}
identifier();
try{ callback.enumDefinitionId( defn ); } catch( Exception e ) {}
try{ callback.enumeratorId( defn ); } catch( Exception e ) {}
}
else
{
@ -1288,21 +1289,20 @@ c, quick);
try{ callback.expressionEnd( expression );} catch( Exception e ) {}
}
try{ callback.enumDefinitionEnd( defn );} catch( Exception e ) {}
try{ callback.enumeratorEnd( defn, lastToken );} catch( Exception e ) {}
if( LT(1) == Token.tRBRACE )
break;
if( LT(1) != Token.tCOMMA )
{
try{ callback.enumSpecifierAbort( enumSpecifier );} catch( Exception e ) {}
throw backtrack;
}
consume(Token.tCOMMA); // if we made it this far
consume(Token.tCOMMA);
}
consume( Token.tRBRACE );
try{ callback.enumSpecifierEnd( enumSpecifier );} catch( Exception e ) {}
try{ callback.enumSpecifierEnd( enumSpecifier, consume( Token.tRBRACE ) );} catch( Exception e ) {}
}
else
{
@ -1357,9 +1357,8 @@ c, quick);
baseSpecifier( classSpec );
}
// If we don't get a "{", assume elaborated type
if (LT(1) == Token.tLBRACE) {
consume();
consume(Token.tLBRACE);
memberDeclarationLoop:
while (LT(1) != Token.tRBRACE) {
@ -1382,10 +1381,10 @@ c, quick);
consumeToNextSemicolon();
}
// consume the }
consume();
try{ callback.classSpecifierEnd(classSpec, consume( Token.tRBRACE )); } catch( Exception e ) {}
}
try{ callback.classSpecifierEnd(classSpec); } catch( Exception e ) {}
}
protected void baseSpecifier( Object classSpecOwner ) throws Backtrack {
@ -2063,7 +2062,7 @@ c, quick);
// Token management
private IScanner scanner;
private Token currToken;
private Token currToken, lastToken;
private Token fetchToken() throws EndOfFile {
try {
@ -2103,9 +2102,9 @@ c, quick);
if (currToken == null)
currToken = fetchToken();
Token retToken = currToken;
lastToken = currToken;
currToken = currToken.getNext();
return retToken;
return lastToken;
}
protected Token consume(int type) throws Backtrack {
@ -2123,6 +2122,7 @@ c, quick);
protected void backup(Token mark) {
currToken = mark;
lastToken = null;
}
}

View file

@ -718,6 +718,7 @@ public class Scanner implements IScanner {
currentContext);
} else if (c == '#') {
int beginningOffset = currentContext.getOffset();
// lets prepare for a preprocessor statement
StringBuffer buff = new StringBuffer();
buff.append((char) c);
@ -761,7 +762,7 @@ public class Scanner implements IScanner {
continue;
}
poundDefine();
poundDefine(beginningOffset);
c = getChar();
continue;
@ -773,7 +774,7 @@ public class Scanner implements IScanner {
continue;
}
poundInclude();
poundInclude( beginningOffset );
c = getChar();
continue;
@ -1465,7 +1466,7 @@ public class Scanner implements IScanner {
return encounteredNewline;
}
protected void poundInclude() throws ScannerException {
protected void poundInclude( int beginningOffset ) throws ScannerException {
skipOverWhitespace();
int c = getChar();
int offset;
@ -1498,7 +1499,7 @@ public class Scanner implements IScanner {
{
offset = currentContext.getOffset() - f.length() - 1; // -1 for the end quote
callback.inclusionBegin( f, offset );
callback.inclusionBegin( f, offset, beginningOffset );
callback.inclusionEnd();
}
}
@ -1506,7 +1507,7 @@ public class Scanner implements IScanner {
handleInclusion(f.trim(), useIncludePath );
}
protected void poundDefine() throws ScannerException, Parser.EndOfFile {
protected void poundDefine(int beginning) throws ScannerException, Parser.EndOfFile {
skipOverWhitespace();
// definition
String key = getNextIdentifier();
@ -1614,7 +1615,7 @@ public class Scanner implements IScanner {
// call the callback accordingly
if( callback != null )
callback.macro( key, offset );
callback.macro( key, offset, beginning, currentContext.getOffset() );
}
protected void expandDefinition(String symbol, Object expansion)

View file

@ -40,6 +40,11 @@ public class Token {
public int getOffset() { return offset; }
public int getLength() { return image.length(); }
public int getDelta( Token other )
{
return other.getOffset() + other.getLength() - getOffset();
}
private Token next;
public Token getNext() { return next; }
public void setNext(Token t) { next = t; }

View file

@ -53,4 +53,11 @@ public class Name {
{
return getEndOffset() - getStartOffset() + nameEnd.getImage().length();
}
/**
* @return
*/
public Token getNameStart() {
return nameStart;
}
}