Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2004-10-27 19:01:54 +0000
committerAndrew Niefer2004-10-27 19:01:54 +0000
commit9d731ab6c40a0e342130dd26ffb89677a7b54dc8 (patch)
treeb177c764a40c6696399abf640ca30ffe1d7e0373
parent36c71b647df43c58d7b7d14806e634c37c9ac358 (diff)
downloadorg.eclipse.cdt-9d731ab6c40a0e342130dd26ffb89677a7b54dc8.tar.gz
org.eclipse.cdt-9d731ab6c40a0e342130dd26ffb89677a7b54dc8.tar.xz
org.eclipse.cdt-9d731ab6c40a0e342130dd26ffb89677a7b54dc8.zip
Fix recovery after not expanding a function macro
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java15
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java10
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;

Back to the top