mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
fix for bug 68229 - problems with IToken.getNext() around places where subscanners are used
This commit is contained in:
parent
6b68d31e47
commit
d75195c520
2 changed files with 52 additions and 2 deletions
|
@ -1680,4 +1680,40 @@ public class ScannerTestCase extends BaseScannerTest
|
||||||
validateEOF();
|
validateEOF();
|
||||||
assertEquals( ((Scanner)scanner).getBranchTracker().getDepth(), 0 );
|
assertEquals( ((Scanner)scanner).getBranchTracker().getDepth(), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void test68229() throws Exception{
|
||||||
|
Writer writer = new StringWriter();
|
||||||
|
writer.write( "#define COUNT 0 \n" ); //$NON-NLS-1$
|
||||||
|
writer.write( "1 \n" ); //$NON-NLS-1$
|
||||||
|
writer.write( "#if COUNT \n" ); //$NON-NLS-1$
|
||||||
|
writer.write( " 2 \n" ); //$NON-NLS-1$
|
||||||
|
writer.write( "#endif \n" ); //$NON-NLS-1$
|
||||||
|
writer.write( "3 \n" ); //$NON-NLS-1$
|
||||||
|
|
||||||
|
initializeScanner( writer.toString() );
|
||||||
|
|
||||||
|
IToken t1 = scanner.nextToken();
|
||||||
|
IToken t3 = scanner.nextToken();
|
||||||
|
|
||||||
|
assertEquals( t1.getImage(), "1" ); //$NON-NLS-1$
|
||||||
|
assertEquals( t3.getImage(), "3" ); //$NON-NLS-1$
|
||||||
|
assertEquals( t1.getNext(), t3 );
|
||||||
|
validateEOF();
|
||||||
|
|
||||||
|
writer = new StringWriter();
|
||||||
|
writer.write( "#define FOO( x ) x \n" ); //$NON-NLS-1$
|
||||||
|
writer.write( "1 FOO( 2 ) 3 \n" ); //$NON-NLS-1$
|
||||||
|
|
||||||
|
initializeScanner( writer.toString() );
|
||||||
|
t1 = scanner.nextToken();
|
||||||
|
IToken t2 = scanner.nextToken();
|
||||||
|
t3 = scanner.nextToken();
|
||||||
|
validateEOF();
|
||||||
|
|
||||||
|
assertEquals( t1.getImage(), "1" ); //$NON-NLS-1$
|
||||||
|
assertEquals( t2.getImage(), "2" ); //$NON-NLS-1$
|
||||||
|
assertEquals( t3.getImage(), "3" ); //$NON-NLS-1$
|
||||||
|
|
||||||
|
assertEquals( t1.getNext(), t2 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2554,7 +2554,7 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
// TODO John HELP! something has changed. If I turn this to true, My tests finish early (but the JUnits pass!)
|
// TODO John HELP! something has changed. If I turn this to true, My tests finish early (but the JUnits pass!)
|
||||||
IScannerContext context = new ScannerContextTopString(expression, EXPRESSION, ';', true);
|
IScannerContext context = new ScannerContextTopString(expression, EXPRESSION, ';', true);
|
||||||
contextStack.cs_push(context);
|
contextStack.cs_push(context);
|
||||||
|
IToken previousToken = currentToken;
|
||||||
ISourceElementRequestor savedRequestor = requestor;
|
ISourceElementRequestor savedRequestor = requestor;
|
||||||
IParserLogService savedLog = log;
|
IParserLogService savedLog = log;
|
||||||
log = NULL_LOG_SERVICE;
|
log = NULL_LOG_SERVICE;
|
||||||
|
@ -2581,6 +2581,9 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
} catch (EndOfFileException e) {
|
} catch (EndOfFileException e) {
|
||||||
return false;
|
return false;
|
||||||
} finally {
|
} finally {
|
||||||
|
currentToken = previousToken;
|
||||||
|
if( currentToken != null )
|
||||||
|
currentToken.setNext( null );
|
||||||
contextStack.cs_pop();
|
contextStack.cs_pop();
|
||||||
requestor = savedRequestor;
|
requestor = savedRequestor;
|
||||||
passOnToClient = savedPassOnToClient;
|
passOnToClient = savedPassOnToClient;
|
||||||
|
@ -2712,6 +2715,7 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
throw INCLUSION_PARSE_EXCEPTION ;
|
throw INCLUSION_PARSE_EXCEPTION ;
|
||||||
|
|
||||||
ISourceElementRequestor savedRequestor = requestor;
|
ISourceElementRequestor savedRequestor = requestor;
|
||||||
|
IToken previousToken = currentToken;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IScannerContext context = new ScannerContextTopString( includeLine, "INCLUDE", true ); //$NON-NLS-1$
|
IScannerContext context = new ScannerContextTopString( includeLine, "INCLUDE", true ); //$NON-NLS-1$
|
||||||
|
@ -2785,6 +2789,9 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
{
|
{
|
||||||
throw INCLUSION_PARSE_EXCEPTION ;
|
throw INCLUSION_PARSE_EXCEPTION ;
|
||||||
} finally {
|
} finally {
|
||||||
|
currentToken = previousToken;
|
||||||
|
if( currentToken != null )
|
||||||
|
currentToken.setNext( null );
|
||||||
contextStack.cs_pop();
|
contextStack.cs_pop();
|
||||||
requestor = savedRequestor;
|
requestor = savedRequestor;
|
||||||
disableMacroExpansion = false;
|
disableMacroExpansion = false;
|
||||||
|
@ -2886,6 +2893,7 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
contextStack.cs_push(context);
|
contextStack.cs_push(context);
|
||||||
ISourceElementRequestor savedRequestor = requestor;
|
ISourceElementRequestor savedRequestor = requestor;
|
||||||
IParserLogService savedLog = log;
|
IParserLogService savedLog = log;
|
||||||
|
IToken previousToken = currentToken;
|
||||||
|
|
||||||
setTokenizingMacroReplacementList( true );
|
setTokenizingMacroReplacementList( true );
|
||||||
disableMacroExpansion = true;
|
disableMacroExpansion = true;
|
||||||
|
@ -2959,6 +2967,9 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
currentToken = previousToken;
|
||||||
|
if( currentToken != null )
|
||||||
|
currentToken.setNext( null );
|
||||||
contextStack.cs_pop();
|
contextStack.cs_pop();
|
||||||
setTokenizingMacroReplacementList( false );
|
setTokenizingMacroReplacementList( false );
|
||||||
requestor = savedRequestor;
|
requestor = savedRequestor;
|
||||||
|
@ -3193,7 +3204,7 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
IParserLogService savedLog = log;
|
IParserLogService savedLog = log;
|
||||||
log = NULL_LOG_SERVICE;
|
log = NULL_LOG_SERVICE;
|
||||||
requestor = NULL_REQUESTOR;
|
requestor = NULL_REQUESTOR;
|
||||||
|
IToken previousToken = currentToken;
|
||||||
|
|
||||||
Vector parameterValues = new Vector();
|
Vector parameterValues = new Vector();
|
||||||
for (int i = 0; i < parameters.size(); i++) {
|
for (int i = 0; i < parameters.size(); i++) {
|
||||||
|
@ -3244,6 +3255,9 @@ public final class Scanner implements IScanner, IScannerData {
|
||||||
parameterValues.add(strBuff2.toString());
|
parameterValues.add(strBuff2.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
currentToken = previousToken;
|
||||||
|
if( currentToken != null )
|
||||||
|
currentToken.setNext( null );
|
||||||
setThrowExceptionOnBadCharacterRead(true);
|
setThrowExceptionOnBadCharacterRead(true);
|
||||||
requestor = savedRequestor;
|
requestor = savedRequestor;
|
||||||
log = savedLog;
|
log = savedLog;
|
||||||
|
|
Loading…
Add table
Reference in a new issue