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$
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue