diff options
author | Andrew Niefer | 2004-10-27 19:01:54 +0000 |
---|---|---|
committer | Andrew Niefer | 2004-10-27 19:01:54 +0000 |
commit | 9d731ab6c40a0e342130dd26ffb89677a7b54dc8 (patch) | |
tree | b177c764a40c6696399abf640ca30ffe1d7e0373 | |
parent | 36c71b647df43c58d7b7d14806e634c37c9ac358 (diff) | |
download | org.eclipse.cdt-9d731ab6c40a0e342130dd26ffb89677a7b54dc8.tar.gz org.eclipse.cdt-9d731ab6c40a0e342130dd26ffb89677a7b54dc8.tar.xz org.eclipse.cdt-9d731ab6c40a0e342130dd26ffb89677a7b54dc8.zip |
Fix recovery after not expanding a function macro
2 files changed, 22 insertions, 3 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java index 0ccdbe503cd..22cd2f7dad3 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java @@ -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(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index 042a41c108e..e98eee26ba7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -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; |