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:
parent
e875aee948
commit
28848655d5
2 changed files with 22 additions and 3 deletions
|
@ -2252,5 +2252,18 @@ public class Scanner2Test extends BaseScanner2Test
|
|||
validateIdentifier( "ooga" ); //$NON-NLS-1$
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2509,10 +2509,13 @@ public class Scanner2 implements IScanner, IScannerData {
|
|||
idx = indexOfNextNonWhiteSpace( bufferStack[stackpPos], bufferPos[stackpPos], bufferLimit[stackpPos] );
|
||||
if( idx >= bufferLimit[stackpPos] ) continue;
|
||||
if( idx > 0 && bufferStack[stackpPos][idx] == '(' ) break;
|
||||
bufferPos[bufferStackPos]--;
|
||||
return null;
|
||||
}
|
||||
if( idx == -1 )
|
||||
if( idx == -1 ){
|
||||
bufferPos[bufferStackPos]--;
|
||||
return null;
|
||||
}
|
||||
|
||||
MacroData data = (MacroData) bufferData[stackpPos+1];
|
||||
for( int i = bufferStackPos; i > stackpPos; i-- )
|
||||
|
@ -2523,11 +2526,14 @@ public class Scanner2 implements IScanner, IScannerData {
|
|||
limit = bufferLimit[bufferStackPos];
|
||||
start = data.startOffset;
|
||||
} else {
|
||||
bufferPos[bufferStackPos]--;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if( buffer[bufferPos[bufferStackPos]] != '(' )
|
||||
if( buffer[bufferPos[bufferStackPos]] != '(' ){
|
||||
bufferPos[bufferStackPos]--;
|
||||
return null;
|
||||
}
|
||||
|
||||
char[][] arglist = macro.arglist;
|
||||
int currarg = -1;
|
||||
|
|
Loading…
Add table
Reference in a new issue