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

Added other preprocesser to LocationMap.

This commit is contained in:
John Camelon 2005-02-01 04:28:55 +00:00
parent 88562cda49
commit a74c7f1bf4
5 changed files with 439 additions and 65 deletions

View file

@ -2444,13 +2444,13 @@ abstract class BaseScanner implements IScanner {
handlePPDefine(pos, startingLineNumber);
return;
case ppUndef:
handlePPUndef();
handlePPUndef(pos);
return;
case ppIfdef:
handlePPIfdef(true);
handlePPIfdef(pos, true);
return;
case ppIfndef:
handlePPIfdef(false);
handlePPIfdef(pos, false);
return;
case ppIf:
start = bufferPos[bufferStackPos] + 1;
@ -2466,13 +2466,19 @@ abstract class BaseScanner implements IScanner {
skipOverConditionalCode(true);
if (isLimitReached())
handleInvalidCompletion();
processIf( pos, bufferPos[bufferStackPos], true );
}
processIf( pos, bufferPos[bufferStackPos], false );
return;
case ppElse:
case ppElif:
// Condition must have been true, skip over the rest
if (branchState(type == ppElse ? BRANCH_ELSE : BRANCH_ELIF)) {
if( type == ppElse )
processElse( pos, bufferPos[bufferStackPos], false );
else
processElsif( pos, bufferPos[bufferStackPos], false );
skipToNewLine();
skipOverConditionalCode(false);
} else {
@ -2495,12 +2501,17 @@ abstract class BaseScanner implements IScanner {
len = bufferPos[bufferStackPos] - start;
handleProblem(IProblem.PREPROCESSOR_POUND_ERROR, start,
CharArrayUtils.extract(buffer, start, len));
processError( pos, pos + len );
break;
case ppEndif:
if (!branchState(BRANCH_END))
handleProblem(IProblem.PREPROCESSOR_UNBALANCE_CONDITION,
start, ppKeywords.findKey(buffer, start, len));
processEndif( pos, bufferPos[bufferStackPos ] );
break;
case ppPragma:
skipToNewLine();
processPragma( pos, bufferPos[bufferStackPos ]);
default:
problem = true;
break;
@ -2517,6 +2528,33 @@ abstract class BaseScanner implements IScanner {
skipToNewLine();
}
/**
* @param startPos
* @param endPos
*/
protected abstract void processPragma(int startPos, int endPos);
/**
* @param pos
* @param i
*/
protected abstract void processEndif(int pos, int i);
/**
* @param startPos
* @param endPos
*/
protected abstract void processError(int startPos, int endPos);
protected abstract void processElsif(int startPos, int endPos, boolean taken);
protected abstract void processElse(int startPos, int endPos, boolean taken);
/**
* @param pos
* @param i
* @param b
*/
protected abstract void processIf(int startPos, int endPos, boolean taken );
protected void handlePPInclude(int pos2, boolean include_next, int startingLineNumber) {
char[] buffer = bufferStack[bufferStackPos];
int limit = bufferLimit[bufferStackPos];
@ -3026,7 +3064,7 @@ abstract class BaseScanner implements IScanner {
return CharArrayUtils.trim(result);
}
protected void handlePPUndef() throws EndOfFileException {
protected void handlePPUndef(int pos) throws EndOfFileException {
char[] buffer = bufferStack[bufferStackPos];
int limit = bufferLimit[bufferStackPos];
@ -3063,11 +3101,18 @@ abstract class BaseScanner implements IScanner {
handleCompletionOnDefinition(new String(buffer, idstart, idlen));
skipToNewLine();
processUndef( pos, bufferPos[bufferStackPos] );
definitions.remove(buffer, idstart, idlen);
}
protected void handlePPIfdef(boolean positive) throws EndOfFileException {
/**
* @param pos
* @param endPos
*/
protected abstract void processUndef(int pos, int endPos);
protected void handlePPIfdef(int pos, boolean positive) throws EndOfFileException {
char[] buffer = bufferStack[bufferStackPos];
int limit = bufferLimit[bufferStackPos];
@ -3114,16 +3159,19 @@ abstract class BaseScanner implements IScanner {
branchState(BRANCH_IF);
if ((definitions.get(buffer, idstart, idlen) != null) == positive) {
// continue on
processIfdef( pos, bufferPos[bufferStackPos], positive, true );
return;
}
processIfdef( pos, bufferPos[bufferStackPos], positive, false );
// skip over this group
skipOverConditionalCode(true);
if (isLimitReached())
handleInvalidCompletion();
}
protected abstract void processIfdef(int startPos, int endPos, boolean positive, boolean taken);
// checkelse - if potential for more, otherwise skip to endif
protected void skipOverConditionalCode(boolean checkelse) {
char[] buffer = bufferStack[bufferStackPos];
@ -3139,6 +3187,7 @@ abstract class BaseScanner implements IScanner {
char c = buffer[bufferPos[bufferStackPos]];
if (c == '#') {
int startPos = bufferPos[bufferStackPos];
skipOverWhiteSpace();
// find the directive
@ -3166,13 +3215,22 @@ abstract class BaseScanner implements IScanner {
case ppIf:
++nesting;
branchState(BRANCH_IF);
skipToNewLine();
if( type == ppIfdef )
processIfdef( startPos, bufferPos[bufferStackPos], true, false );
else if( type == ppIfndef )
processIfdef( startPos, bufferPos[bufferStackPos], false, false );
else
processIf( startPos, bufferPos[bufferStackPos], false );
break;
case ppElse:
if (branchState(BRANCH_ELSE)) {
skipToNewLine();
if (checkelse && nesting == 0) {
skipToNewLine();
processElse( startPos, bufferPos[ bufferStackPos], true );
return;
}
processElse( startPos, bufferPos[ bufferStackPos], false );
} else {
//problem, ignore this one.
handleProblem(
@ -3192,8 +3250,17 @@ abstract class BaseScanner implements IScanner {
len, definitions,
getLineNumber(bufferPos[bufferStackPos]),
getCurrentFilename()) != 0)
{
// condition passed, we're good
processElsif( start, bufferPos[bufferStackPos], true);
return;
}
processElsif( start, bufferPos[bufferStackPos], false );
}
else
{
skipToNewLine();
processElsif( start, bufferPos[bufferStackPos], false );
}
} else {
//problem, ignore this one.
@ -3205,6 +3272,7 @@ abstract class BaseScanner implements IScanner {
break;
case ppEndif:
if (branchState(BRANCH_END)) {
processEndif( startPos, bufferPos[ bufferStackPos ]);
if (nesting > 0) {
--nesting;
} else {
@ -4375,6 +4443,7 @@ abstract class BaseScanner implements IScanner {
protected static final int ppUndef = 8;
protected static final int ppError = 9;
protected static final int ppInclude_next = 10;
protected static final int ppPragma = 11;
protected static final char[] TAB = { '\t' };
protected static final char[] SPACE = { ' ' };

View file

@ -276,4 +276,64 @@ public class DOMScanner extends BaseScanner {
super.throwEOF();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processIfdef(int, int, boolean, boolean)
*/
protected void processIfdef(int startPos, int endPos, boolean positive, boolean taken) {
if( positive )
locationMap.encounterPoundIfdef( resolveOffset(startPos), resolveOffset(endPos), taken );
else
locationMap.encounterPoundIfndef( resolveOffset(startPos), resolveOffset(endPos), taken );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processIf(int, int, boolean)
*/
protected void processIf(int startPos, int endPos, boolean taken) {
locationMap.encounterPoundIf( resolveOffset( startPos ), resolveOffset( endPos ), taken );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processElsif(int, int, boolean)
*/
protected void processElsif(int startPos, int endPos, boolean taken) {
locationMap.encounterPoundElif( resolveOffset( startPos ), resolveOffset( endPos ), taken );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processElse(int, int, boolean)
*/
protected void processElse(int startPos, int endPos, boolean taken) {
locationMap.encounterPoundElse( resolveOffset( startPos ), resolveOffset( endPos ), taken );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processUndef(int, int)
*/
protected void processUndef(int pos, int endPos) {
locationMap.encounterPoundUndef( resolveOffset( pos ), resolveOffset( endPos ));
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processError(int, int)
*/
protected void processError(int startPos, int endPos) {
locationMap.encounterPoundError( resolveOffset( startPos), resolveOffset( endPos ));
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processEndif(int, int)
*/
protected void processEndif(int startPos , int endPos ) {
locationMap.encounterPoundEndIf( resolveOffset( startPos ), resolveOffset( endPos ));
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processPragma(int, int)
*/
protected void processPragma(int startPos, int endPos) {
locationMap.encounterPoundPragma( resolveOffset( startPos ), resolveOffset(endPos));
}
}

View file

@ -38,13 +38,14 @@ public interface IScannerPreprocessorLog {
int nameOffset, int nameEndOffset, int endOffset);
public void encounterPoundIf(int startOffset, int endOffset, boolean taken);
public void encounterPoundPragma(int startOffset, int endOffset);
public void encounterPoundError(int startOffset, int endOffset);
public void encounterPoundIfdef(int startOffset, int endOffset, boolean taken);
public void encounterPoundUndef(int startOffset, int endOffset);
public void encounterPoundElse(int startOffset, int endOffset);
public void encounterPoundIfndef( int startOffset, int endOffset, boolean taken );
public void encounterPoundElse(int startOffset, int endOffset, boolean taken );
public void encounterPoundElif(int startOffset, int endOffset, boolean taken);
public void encounterPoundEndIf(int startOffset, int endOffset);
public void encounterPoundPragma(int startOffset, int endOffset);
public void encounterPoundError(int startOffset, int endOffset);
public void encounterPoundUndef(int startOffset, int endOffset);
public void encounterProblem( IASTProblem problem );
}

View file

@ -40,7 +40,148 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
/**
* @author jcamelon
*/
protected static class _InclusionStatement extends ScannerASTNode implements
protected static class _Endif extends _Context implements
_IPreprocessorDirective{
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Endif(_CompositeContext parent, int startOffset, int endOffset) {
super(parent, startOffset, endOffset);
// TODO Auto-generated constructor stub
}
}
/**
* @author jcamelon
*/
protected static class _Elif extends _Context implements
_IPreprocessorDirective {
public final boolean taken;
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Elif(_CompositeContext parent, int startOffset, int endOffset, boolean taken ) {
super(parent, startOffset, endOffset);
this.taken = taken;
}
}
/**
* @author jcamelon
*/
protected static class _Ifdef extends _Context implements
_IPreprocessorDirective {
public final boolean taken;
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Ifdef(_CompositeContext parent, int startOffset, int endOffset, boolean taken) {
super(parent, startOffset, endOffset);
this.taken = taken;
}
}
/**
* @author jcamelon
*/
protected static class _Ifndef extends _Context implements
_IPreprocessorDirective {
public final boolean taken;
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Ifndef(_CompositeContext parent, int startOffset, int endOffset, boolean taken ) {
super(parent, startOffset, endOffset);
this.taken = taken;
}
}
/**
* @author jcamelon
*/
protected static class _Error extends _Context implements
_IPreprocessorDirective {
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Error(_CompositeContext parent, int startOffset, int endOffset) {
super(parent, startOffset, endOffset);
// TODO Auto-generated constructor stub
}
}
/**
* @author jcamelon
*/
protected static class _Pragma extends _Context implements
_IPreprocessorDirective {
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Pragma(_CompositeContext parent, int startOffset, int endOffset) {
super(parent, startOffset, endOffset);
}
}
/**
* @author jcamelon
*/
protected class _If extends _Context implements _IPreprocessorDirective {
public final boolean taken;
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _If(_CompositeContext parent, int startOffset, int endOffset, boolean taken) {
super(parent, startOffset, endOffset);
this.taken = taken;
}
}
/**
* @author jcamelon
*/
protected static class _Else extends _Context implements
_IPreprocessorDirective {
public final boolean taken;
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Else(_CompositeContext parent, int startOffset, int endOffset, boolean taken) {
super(parent, startOffset, endOffset);
this.taken = taken;
}
}
/**
* @author jcamelon
*/
protected static class ASTInclusionStatement extends ScannerASTNode implements
IASTPreprocessorIncludeStatement {
private final char[] path;
@ -48,7 +189,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
/**
* @param cs
*/
public _InclusionStatement(char[] cs) {
public ASTInclusionStatement(char[] cs) {
this.path = cs;
}
@ -160,7 +301,25 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
}
public static class ScannerASTNode extends ASTNode {
public static interface _IPreprocessorDirective
{
}
protected static class _Undef extends _Context implements _IPreprocessorDirective
{
/**
* @param parent
* @param startOffset
* @param endOffset
*/
public _Undef(_CompositeContext parent, int startOffset, int endOffset) {
super(parent, startOffset, endOffset);
}
}
private static class ScannerASTNode extends ASTNode {
private IASTNode parent;
private ASTNodeProperty property;
@ -436,7 +595,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
}
protected static class _Inclusion extends _CompositeContext {
protected static class _Inclusion extends _CompositeContext implements _IPreprocessorDirective {
public final CodeReader reader;
public _Inclusion(_CompositeContext parent, CodeReader reader,
@ -481,7 +640,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
public final int nameOffset;
}
protected static class _ObjectMacroDefinition extends _MacroDefinition {
protected static class _ObjectMacroDefinition extends _MacroDefinition implements _IPreprocessorDirective {
/**
* @param parent
* @param startOffset
@ -498,7 +657,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
}
protected static class _FunctionMacroDefinition extends _MacroDefinition {
protected static class _FunctionMacroDefinition extends _MacroDefinition implements _IPreprocessorDirective {
public final char[][] parms;
@ -552,14 +711,15 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* @see org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver#getMacroDefinitions()
*/
public IASTPreprocessorMacroDefinition[] getMacroDefinitions() {
List contexts = new ArrayList(8);
LocationMap.collectContexts(V_MACRODEFS, tu, contexts);
if (contexts.isEmpty())
return EMPTY_MACRO_DEFINITIONS_ARRAY;
int size = collectContexts(V_MACRODEFS, tu, null, 0);
if( size == 0 ) return EMPTY_MACRO_DEFINITIONS_ARRAY;
_Context [] contexts = new _Context[size];
collectContexts(V_MACRODEFS, tu, contexts, 0);
IASTPreprocessorMacroDefinition[] result = new IASTPreprocessorMacroDefinition[contexts
.size()];
for (int i = 0; i < contexts.size(); ++i)
result[i] = createASTMacroDefinition((_MacroDefinition) contexts.get(i));
.length];
for (int i = 0; i < contexts.length; ++i)
result[i] = createASTMacroDefinition((_MacroDefinition) contexts[i]);
return result;
@ -603,16 +763,16 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
*
* @see org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver#getIncludeDirectives()
*/
public IASTPreprocessorIncludeStatement[] getIncludeDirectives() {
List contexts = new ArrayList(8);
collectContexts(V_INCLUSIONS, tu, contexts);
if (contexts.isEmpty())
public IASTPreprocessorIncludeStatement[] getIncludeDirectives() {
int size = collectContexts(V_INCLUSIONS, tu, null, 0);
if (size == 0 )
return EMPTY_INCLUDES_ARRAY;
IASTPreprocessorIncludeStatement[] result = new IASTPreprocessorIncludeStatement[contexts
.size()];
for (int i = 0; i < contexts.size(); ++i) {
_Inclusion inc = ((_Inclusion) contexts.get(i));
result[i] = new _InclusionStatement(inc.reader.filename);
_Context [] contexts = new _Context[size];
collectContexts(V_INCLUSIONS, tu, contexts, 0);
IASTPreprocessorIncludeStatement[] result = new IASTPreprocessorIncludeStatement[size];
for (int i = 0; i < size; ++i) {
_Inclusion inc = ((_Inclusion) contexts[i]);
result[i] = new ASTInclusionStatement(inc.reader.filename);
((ScannerASTNode) result[i]).setOffsetAndLength(
inc.context_directive_start, inc.context_directive_end
- inc.context_directive_start);
@ -877,7 +1037,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* int)
*/
public void encounterPoundIf(int startOffset, int endOffset, boolean taken) {
// TODO Auto-generated method stub
currentContext.addSubContext( new _If( currentContext, startOffset, endOffset, taken ) );
}
@ -888,8 +1048,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* int)
*/
public void encounterPoundPragma(int startOffset, int endOffset) {
// TODO Auto-generated method stub
currentContext.addSubContext( new _Pragma( currentContext, startOffset, endOffset ) );
}
/*
@ -899,8 +1058,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* int)
*/
public void encounterPoundError(int startOffset, int endOffset) {
// TODO Auto-generated method stub
currentContext.addSubContext( new _Error( currentContext, startOffset, endOffset ) );
}
/*
@ -910,8 +1068,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* int)
*/
public void encounterPoundIfdef(int startOffset, int endOffset, boolean taken) {
// TODO Auto-generated method stub
currentContext.addSubContext( new _Ifdef( currentContext, startOffset, endOffset, taken ) );
}
/*
@ -921,8 +1078,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* int)
*/
public void encounterPoundUndef(int startOffset, int endOffset) {
// TODO Auto-generated method stub
currentContext.addSubContext( new _Undef( currentContext, startOffset, endOffset ) );
}
/*
@ -931,9 +1087,8 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* @see org.eclipse.cdt.internal.core.parser.scanner2.IScannerPreprocessorLog#encounterPoundElse(int,
* int)
*/
public void encounterPoundElse(int startOffset, int endOffset) {
// TODO Auto-generated method stub
public void encounterPoundElse(int startOffset, int endOffset, boolean taken) {
currentContext.addSubContext( new _Else( currentContext, startOffset, endOffset, taken ));
}
/*
@ -943,7 +1098,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* int)
*/
public void encounterPoundElif(int startOffset, int endOffset, boolean taken) {
// TODO Auto-generated method stub
currentContext.addSubContext( new _Elif( currentContext, startOffset, endOffset, taken ) );
}
@ -954,8 +1109,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* int)
*/
public void encounterPoundEndIf(int startOffset, int endOffset) {
// TODO Auto-generated method stub
currentContext.addSubContext( new _Endif( currentContext, startOffset, endOffset) );
}
/*
@ -982,13 +1136,13 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
* @see org.eclipse.cdt.internal.core.parser.scanner2.ILocationResolver#getScannerProblems()
*/
public IASTProblem[] getScannerProblems() {
List contexts = new ArrayList(8);
LocationMap.collectContexts(V_PROBLEMS, tu, contexts);
if (contexts.isEmpty())
return EMPTY_PROBLEMS_ARRAY;
IASTProblem[] result = new IASTProblem[contexts.size()];
for (int i = 0; i < contexts.size(); ++i)
result[i] = ((_Problem) contexts.get(i)).problem;
int size = LocationMap.collectContexts(V_PROBLEMS, tu, null, 0);
if( size == 0 ) return EMPTY_PROBLEMS_ARRAY;
_Context [] contexts = new _Context[size];
LocationMap.collectContexts(V_PROBLEMS, tu, contexts, 0);
IASTProblem[] result = new IASTProblem[size];
for (int i = 0; i < size; ++i)
result[i] = ((_Problem) contexts[i]).problem;
return result;
}
@ -1003,37 +1157,69 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
_Problem pr = new _Problem(currentContext, p.getOffset(), p.getOffset()
+ p.getLength(), problem);
pr.context_ends = p.getOffset() + p.getLength();
currentContext.addSubContext( pr );
}
protected static final int V_ALL = 1;
protected static final int V_INCLUSIONS = 2;
protected static final int V_PROBLEMS = 3;
protected static final int V_MACRODEFS = 4;
protected static final int V_PREPROCESSOR = 5;
private static final char[] EMPTY_CHAR_ARRAY = "".toCharArray(); //$NON-NLS-1$
protected static void collectContexts(int key, _Context source, List result) {
protected static int collectContexts(int key, _Context source, _Context[] result, int s ) {
int startAt = s;
int count = 0;
switch (key) {
case V_ALL:
result.add(source);
if( result != null )
result[startAt++] = source;
++count;
break;
case V_INCLUSIONS:
if (source instanceof _Inclusion)
result.add(source);
{
if( result != null )
result[startAt++] = source;
++count;
}
break;
case V_PROBLEMS:
if (source instanceof _Problem)
result.add(source);
{
if( result != null )
result[startAt++] = source;
++count;
}
break;
case V_MACRODEFS:
if (source instanceof _MacroDefinition)
result.add(source);
{
if( result != null )
result[startAt++] = source;
++count;
}
break;
case V_PREPROCESSOR:
if( source instanceof _IPreprocessorDirective )
{
if( result != null )
result[startAt++] = source;
++count;
}
break;
}
if (source instanceof _CompositeContext) {
List l = ((_CompositeContext) source).getSubContexts();
for (int i = 0; i < l.size(); ++i)
collectContexts(key, (_Context) l.get(i), result);
{
int value = collectContexts(key, (_Context) l.get(i), result, startAt);
count += value;
startAt += value;
}
}
return count;
}
/* (non-Javadoc)
@ -1050,11 +1236,14 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
char [] name = ((IASTFileLocation)nodeLocation).getFileName().toCharArray();
if( readerCompatable( nodeLocation, tu.reader, name ) )
return CharArrayUtils.extract( tu.reader.buffer, nodeLocation.getNodeOffset(), nodeLocation.getNodeLength() );
List inclusions = new ArrayList();
collectContexts( V_INCLUSIONS, tu, inclusions );
for( int i = 0; i < inclusions.size(); ++i )
int size = collectContexts( V_INCLUSIONS, tu, null, 0 );
if( size == 0 ) return EMPTY_CHAR_ARRAY;
_Context [] inclusions = new _Context[size];
collectContexts( V_INCLUSIONS, tu, inclusions, 0 );
for( int i = 0; i < size; ++i )
{
_Inclusion inc = (_Inclusion) inclusions.get(i);
_Inclusion inc = (_Inclusion) inclusions[i];
if( readerCompatable( nodeLocation, inc.reader, name ) )
return CharArrayUtils.extract( inc.reader.buffer, nodeLocation.getNodeOffset(), nodeLocation.getNodeLength() );
}
@ -1081,4 +1270,11 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog {
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.IScannerPreprocessorLog#encounterPoundIfndef(int, int, boolean)
*/
public void encounterPoundIfndef(int startOffset, int endOffset, boolean taken) {
currentContext.addSubContext( new _Ifndef( currentContext, startOffset, endOffset, taken ) );
}
}

View file

@ -254,4 +254,52 @@ public class Scanner2 extends BaseScanner {
return super.popContext();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processIfdef(int, int, boolean, boolean)
*/
protected void processIfdef(int startPos, int endPos, boolean positive, boolean taken) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processIf(int, int, boolean)
*/
protected void processIf(int startPos, int endPos, boolean taken) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processElsif(int, int, boolean)
*/
protected void processElsif(int startPos, int endPos, boolean taken) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processElse(int, int, boolean)
*/
protected void processElse(int startPos, int endPos, boolean taken) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processUndef(int, int)
*/
protected void processUndef(int pos, int endPos) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processError(int, int)
*/
protected void processError(int startPos, int endPos) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processEndif(int, int)
*/
protected void processEndif(int pos, int i) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner2.BaseScanner#processPragma(int, int)
*/
protected void processPragma(int startPos, int endPos) {
}
}