1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 06:45:43 +02:00

Fix recovery after not expanding a function macro

This commit is contained in:
Andrew Niefer 2004-10-27 19:01:46 +00:00
parent e875aee948
commit 28848655d5
2 changed files with 22 additions and 3 deletions

View file

@ -2252,5 +2252,18 @@ public class Scanner2Test extends BaseScanner2Test
validateIdentifier( "ooga" ); //$NON-NLS-1$ validateIdentifier( "ooga" ); //$NON-NLS-1$
validateEOF(); validateEOF();
} }
public void testUnExpandedFunctionMacros() throws Exception{
Writer writer = new StringWriter();
writer.write( "#define ETH(x) x \n" ); //$NON-NLS-1$
writer.write( "#define E ETH \n" ); //$NON-NLS-1$
writer.write( "ETH( c ), ETH, E; \n" ); //$NON-NLS-1$
initializeScanner( writer.toString() );
validateIdentifier( "c" ); //$NON-NLS-1$
validateToken( IToken.tCOMMA );
validateIdentifier("ETH"); //$NON-NLS-1$
validateToken( IToken.tCOMMA );
validateIdentifier("ETH"); //$NON-NLS-1$
validateToken( IToken.tSEMI );
validateEOF();
}
} }

View file

@ -2509,10 +2509,13 @@ public class Scanner2 implements IScanner, IScannerData {
idx = indexOfNextNonWhiteSpace( bufferStack[stackpPos], bufferPos[stackpPos], bufferLimit[stackpPos] ); idx = indexOfNextNonWhiteSpace( bufferStack[stackpPos], bufferPos[stackpPos], bufferLimit[stackpPos] );
if( idx >= bufferLimit[stackpPos] ) continue; if( idx >= bufferLimit[stackpPos] ) continue;
if( idx > 0 && bufferStack[stackpPos][idx] == '(' ) break; if( idx > 0 && bufferStack[stackpPos][idx] == '(' ) break;
bufferPos[bufferStackPos]--;
return null; return null;
} }
if( idx == -1 ) if( idx == -1 ){
bufferPos[bufferStackPos]--;
return null; return null;
}
MacroData data = (MacroData) bufferData[stackpPos+1]; MacroData data = (MacroData) bufferData[stackpPos+1];
for( int i = bufferStackPos; i > stackpPos; i-- ) for( int i = bufferStackPos; i > stackpPos; i-- )
@ -2523,11 +2526,14 @@ public class Scanner2 implements IScanner, IScannerData {
limit = bufferLimit[bufferStackPos]; limit = bufferLimit[bufferStackPos];
start = data.startOffset; start = data.startOffset;
} else { } else {
bufferPos[bufferStackPos]--;
return null; return null;
} }
} }
if( buffer[bufferPos[bufferStackPos]] != '(' ) if( buffer[bufferPos[bufferStackPos]] != '(' ){
bufferPos[bufferStackPos]--;
return null; return null;
}
char[][] arglist = macro.arglist; char[][] arglist = macro.arglist;
int currarg = -1; int currarg = -1;