From e8808fb00973608f7ac78ccfc0d6b11bf3371cda Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 17 Mar 2003 15:22:05 +0000 Subject: [PATCH] Patch for John Camelon: - see ChangeLogs --- .../cdt/internal/core/dom/ClassSpecifier.java | 1 - .../cdt/internal/core/dom/DOMBuilder.java | 48 +++++++++++++- .../core/dom/ElaboratedTypeSpecifier.java | 49 +++++++++++++++ .../cdt/{ => internal}/core/dom/IScope.java | 8 +-- .../core/dom/ParameterDeclarationClause.java | 1 - .../internal/core/dom/TranslationUnit.java | 1 - core/org.eclipse.cdt.core/parser/ChangeLog | 5 ++ .../internal/core/model/NewModelBuilder.java | 62 ++++++++++++++----- .../core/model/SimpleDeclarationWrapper.java | 35 +++++++++++ .../core/parser/ExpressionEvaluator.java | 31 ++++++++++ .../internal/core/parser/IParserCallback.java | 14 +++-- .../cdt/internal/core/parser/IScanner.java | 2 + .../core/parser/NullParserCallback.java | 32 ++++++++++ .../cdt/internal/core/parser/Parser.java | 38 +++++++++--- .../cdt/internal/core/parser/Scanner.java | 2 - 15 files changed, 292 insertions(+), 37 deletions(-) create mode 100644 core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ElaboratedTypeSpecifier.java rename core/org.eclipse.cdt.core/dom/org/eclipse/cdt/{ => internal}/core/dom/IScope.java (59%) diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ClassSpecifier.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ClassSpecifier.java index 025955c9a2b..41af1e46e51 100644 --- a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ClassSpecifier.java +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ClassSpecifier.java @@ -3,7 +3,6 @@ package org.eclipse.cdt.internal.core.dom; import java.util.LinkedList; import java.util.List; -import org.eclipse.cdt.core.dom.IScope; import org.eclipse.cdt.internal.core.parser.util.Name; public class ClassSpecifier extends TypeSpecifier implements IScope { diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java index 9a41dc288b7..6a67fd57276 100644 --- a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java @@ -1,7 +1,6 @@ package org.eclipse.cdt.internal.core.dom; -import org.eclipse.cdt.core.dom.IScope; import org.eclipse.cdt.internal.core.parser.IParserCallback; import org.eclipse.cdt.internal.core.parser.Token; import org.eclipse.cdt.internal.core.parser.util.DeclSpecifier; @@ -277,4 +276,51 @@ public class DOMBuilder implements IParserCallback public void expressionEnd(Object expression) { } + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object) + */ + public void classSpecifierAbort(Object classSpecifier) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object) + */ + public void classSpecifierSafe(Object classSpecifier) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object) + */ + public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) { + int kind = ClassSpecifier.t_struct; + + switch (classKey.getType()) { + case Token.t_class: + kind = ClassSpecifier.t_class; + break; + case Token.t_struct: + kind = ClassSpecifier.t_struct; + break; + case Token.t_union: + kind = ClassSpecifier.t_union; + break; + } + + ElaboratedTypeSpecifier elab = new ElaboratedTypeSpecifier( kind, (SimpleDeclaration)container ); + return elab; + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierEnd(java.lang.Object) + */ + public void elaboratedTypeSpecifierEnd(Object elab) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object) + */ + public void elaboratedTypeSpecifierName(Object elab) { + ((ElaboratedTypeSpecifier)elab).setName( currName ); + } + } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ElaboratedTypeSpecifier.java new file mode 100644 index 00000000000..de87ba34fa4 --- /dev/null +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ElaboratedTypeSpecifier.java @@ -0,0 +1,49 @@ +package org.eclipse.cdt.internal.core.dom; + +import org.eclipse.cdt.internal.core.parser.util.Name; + +/** + * @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 class ElaboratedTypeSpecifier extends TypeSpecifier { + + public static final int t_class = 0; + public static final int t_struct = 1; + public static final int t_union = 2; + public static final int t_enum = 3; + + private final int classKey; + public int getClassKey() { return classKey; } + + + /** + * @see org.eclipse.cdt.internal.core.dom.TypeSpecifier#getDeclaration() + */ + public SimpleDeclaration getDeclaration() { + return super.getDeclaration(); + } + + /** + * @see org.eclipse.cdt.internal.core.dom.TypeSpecifier#setDeclaration(org.eclipse.cdt.internal.core.dom.SimpleDeclaration) + */ + public void setDeclaration(SimpleDeclaration declaration) { + super.setDeclaration(declaration); + } + + public ElaboratedTypeSpecifier(int classKey, SimpleDeclaration declaration) { + super(declaration); + this.classKey = classKey; + } + + private Name name; + public void setName(Name n) { name = n; } + public Name getName() { return name; } + + +} diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/core/dom/IScope.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/IScope.java similarity index 59% rename from core/org.eclipse.cdt.core/dom/org/eclipse/cdt/core/dom/IScope.java rename to core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/IScope.java index 98d6587b8bd..019e8290208 100644 --- a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/core/dom/IScope.java +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/IScope.java @@ -1,13 +1,11 @@ -package org.eclipse.cdt.core.dom; +package org.eclipse.cdt.internal.core.dom; import java.util.List; -import org.eclipse.cdt.internal.core.dom.Declaration; /** - * A scope contains a set of declarations that are defined in that scope. - */ -public interface IScope { + * A scope contains a set of declarations that are defined in that +scope. */ public interface IScope { public void addDeclaration(Declaration declaration); public List getDeclarations(); diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ParameterDeclarationClause.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ParameterDeclarationClause.java index a5caa43ac73..fee7abfb28c 100644 --- a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ParameterDeclarationClause.java +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/ParameterDeclarationClause.java @@ -3,7 +3,6 @@ package org.eclipse.cdt.internal.core.dom; import java.util.LinkedList; import java.util.List; -import org.eclipse.cdt.core.dom.IScope; /** * @author jcamelon diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TranslationUnit.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TranslationUnit.java index 95454b73e57..d052b7c74d2 100644 --- a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TranslationUnit.java +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/TranslationUnit.java @@ -3,7 +3,6 @@ package org.eclipse.cdt.internal.core.dom; import java.util.LinkedList; import java.util.List; -import org.eclipse.cdt.core.dom.IScope; /** */ diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index 80874636559..42536943a57 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,8 @@ +2003-03-13 John Camelon + Moved ## token to IScanner from Scanner. + Updated IParserCallback and implementations to deal with Elaborated Type Specifiers. + Moved IScope into the internal DOM package. + 2003-03-11 John Camelon added ChangeLog to parser directory updated IParserCallback (and all implementors) for expressions diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java index e0c84d20a3b..b5b62e0bc04 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java @@ -35,8 +35,6 @@ public class NewModelBuilder implements IParserCallback { return translationUnit; } - - private Token classKey; /** * @see org.eclipse.cdt.core.newparser.IParserCallback#beginClass(String, String) */ @@ -55,24 +53,21 @@ public class NewModelBuilder implements IParserCallback { default: kind = ICElement.C_UNION; } - this.classKey = classKey; - Structure elem = new Structure( c.getParent(), kind, null ); - c.getParent().addChild(elem); - return new SimpleDeclarationWrapper( elem ); + SimpleDeclarationWrapper wrapper = new SimpleDeclarationWrapper(); + wrapper.setKind( kind ); + wrapper.setParent( c.getParent() ); + + return wrapper; } /** * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#classSpecifierName() */ - public void classSpecifierName(Object classSpecifier) { - - SimpleDeclarationWrapper container = (SimpleDeclarationWrapper)classSpecifier; - String name = currName.toString(); - Structure elem = ((Structure)container.getElement()); - elem.setElementName( name ); - elem.setIdPos(currName.getStartOffset(), name.length()); - elem.setPos(currName.getStartOffset(), name.length()); + public void classSpecifierName(Object classSpecifier) + { + SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)classSpecifier; + wrapper.setName( currName ); } /** @@ -312,4 +307,43 @@ org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(T public void expressionEnd(Object expression) { } + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object) + */ + public void classSpecifierAbort(Object classSpecifier) { + classSpecifier = null; + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object) + */ + public void classSpecifierSafe(Object classSpecifier) { + SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)classSpecifier; + Structure elem = new Structure( wrapper.getParent(), wrapper.getKind(), null ); + wrapper.setElement( elem ); + wrapper.getParent().addChild(elem); + String name = currName.toString(); + elem.setElementName( name ); + elem.setIdPos(currName.getStartOffset(), name.length()); + elem.setPos(currName.getStartOffset(), name.length()); + } + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object) + */ + public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) { + return null; + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierEnd(java.lang.Object) + */ + public void elaboratedTypeSpecifierEnd(Object elab) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object) + */ + public void elaboratedTypeSpecifierName(Object elab) { + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java index 779c6932d85..2883df1eefb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java @@ -6,6 +6,7 @@ import java.util.List; import org.eclipse.cdt.core.model.IStructure; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.core.parser.util.DeclSpecifier; +import org.eclipse.cdt.internal.core.parser.util.Name; /** * @author jcamelon @@ -19,6 +20,8 @@ public class SimpleDeclarationWrapper extends DeclSpecifier implements DeclSpeci private CElement element = null; private CElement parent = null; + int kind; + private Name name = null; public SimpleDeclarationWrapper( CElement item ) { @@ -162,4 +165,36 @@ public class SimpleDeclarationWrapper extends DeclSpecifier implements DeclSpeci declarators.remove( declarator ); } + /** + * Returns the name. + * @return Name + */ + public Name getName() { + return name; + } + + /** + * Sets the name. + * @param name The name to set + */ + public void setName(Name name) { + this.name = name; + } + + /** + * Returns the kind. + * @return int + */ + public int getKind() { + return kind; + } + + /** + * Sets the kind. + * @param kind The kind to set + */ + public void setKind(int kind) { + this.kind = kind; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java index ced333f1dab..9e268adcc02 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java @@ -269,4 +269,35 @@ public class ExpressionEvaluator implements IParserCallback { public void expressionEnd(Object expression) { } + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object) + */ + public void classSpecifierAbort(Object classSpecifier) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object) + */ + public void classSpecifierSafe(Object classSpecifier) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object) + */ + public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) { + return null; + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierEnd(java.lang.Object) + */ + public void elaboratedTypeSpecifierEnd(Object elab) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object) + */ + public void elaboratedTypeSpecifierName(Object container) { + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java index 517a6173977..0602d005afb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java @@ -43,6 +43,8 @@ public interface IParserCallback { public Object classSpecifierBegin(Object container, Token classKey); public void classSpecifierName(Object classSpecifier); + public void classSpecifierAbort( Object classSpecifier ); + public void classSpecifierSafe( Object classSpecifier ); public void classSpecifierEnd(Object classSpecifier); public Object baseSpecifierBegin( Object containingClassSpec ); @@ -51,8 +53,12 @@ public interface IParserCallback { public void baseSpecifierVirtual( Object baseSpecifier, boolean virtual ); public void baseSpecifierEnd( Object baseSpecifier ); - public Object expressionBegin( Object container ); - public void expressionOperator(Token operator) throws Exception; - public void expressionTerminal(Token terminal) throws Exception; - public void expressionEnd(Object expression ); + public Object expressionBegin( Object container ); + public void expressionOperator(Token operator) throws Exception; + public void expressionTerminal(Token terminal) throws Exception; + public void expressionEnd(Object expression ); + + public Object elaboratedTypeSpecifierBegin( Object container, Token classKey ); + public void elaboratedTypeSpecifierName( Object elab ); + public void elaboratedTypeSpecifierEnd( Object elab ); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IScanner.java index 63ef33190a4..759aa3897ec 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IScanner.java @@ -14,6 +14,8 @@ import java.util.List; */ public interface IScanner { + public static final int tPOUNDPOUND = -6; + public IScanner initialize( Reader sourceToBeRead, String fileName ); public void addDefinition(String key, IMacroDescriptor macroToBeAdded ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java index cad90265c30..2898f59b2de 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java @@ -184,4 +184,36 @@ public class NullParserCallback implements IParserCallback { public void expressionEnd(Object expression) { } + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierAbort(java.lang.Object) + */ + public void classSpecifierAbort(Object classSpecifier) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierSafe(java.lang.Object) + */ + public void classSpecifierSafe(Object classSpecifier) { + } + + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierBegin(java.lang.Object) + */ + public Object elaboratedTypeSpecifierBegin(Object container, Token classKey) { + return null; + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierEnd(java.lang.Object) + */ + public void elaboratedTypeSpecifierEnd(Object elab) { + } + + /** + * @see org.eclipse.cdt.internal.core.parser.IParserCallback#elaboratedTypeSpecifierName(java.lang.Object) + */ + public void elaboratedTypeSpecifierName(Object elab) { + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 2d81d942d09..3ea19643631 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -84,7 +84,7 @@ c, quick); lastToken = currToken; declaration( translationUnit ); if( currToken == lastToken ) - skipToNextSemi(); + consumeToNextSemicolon(); } catch (Backtrack b) { // Mark as failure and try to reach a recovery point parsePassed = false; @@ -92,7 +92,7 @@ c, quick); if (lastBacktrack != null && lastBacktrack == LA(1)) { // we haven't progressed from the last backtrack // try and find tne next definition - skipToNextSemi(); + consumeToNextSemicolon(); } else { // start again from here lastBacktrack = LA(1); @@ -102,7 +102,7 @@ c, quick); callback.translationUnitEnd(translationUnit); } - public void skipToNextSemi() { + protected void consumeToNextSemicolon() { for (int t = LT(1); t != Token.tEOF; t = LT(1)) { consume(); // TO DO: we should really check for matching braces too @@ -338,8 +338,20 @@ c, quick); case Token.t_class: case Token.t_struct: case Token.t_union: - classSpecifier(decl); - return; + try + { + classSpecifier(decl); + return; + } + catch( Backtrack bt ) + { + // this is an elaborated class specifier + Object elab = callback.elaboratedTypeSpecifierBegin( decl, consume() ); + name(); + callback.elaboratedTypeSpecifierName( elab ); + callback.elaboratedTypeSpecifierEnd( elab ); + + } case Token.t_enum: enumSpecifier(decl); break; @@ -638,6 +650,7 @@ c, quick); public void classSpecifier( Object owner ) throws Exception { Token classKey = null; + Token mark = mark(); // class key switch (LT(1)) { case Token.t_class: @@ -656,8 +669,17 @@ c, quick); name(); callback.classSpecifierName(classSpec); } - - //currRegion.put(name.getImage(), classKey); + + if( LT(1) != Token.tCOLON && LT(1) != Token.tLBRACE ) + { + // this is not a classSpecification + callback.classSpecifierAbort( classSpec ); + classSpec = null; + backup( mark ); + throw backtrack; + } + else + callback.classSpecifierSafe( classSpec ); // base clause if (LT(1) == Token.tCOLON) { @@ -693,7 +715,7 @@ c, quick); declaration(classSpec); } if (lastToken == currToken) - skipToNextSemi(); + consumeToNextSemicolon(); } // consume the } consume(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java index 751ab4baa37..6cfb5ac011d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java @@ -325,8 +325,6 @@ public class Scanner implements IScanner { private static final String DEFINED = "defined"; private static final String POUND_DEFINE = "#define "; - public static final int tPOUNDPOUND = -6; - private IScannerContext currentContext; private Stack contextStack = new Stack();