Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Ridge2014-03-09 06:43:12 +0000
committerSergey Prigogin2014-03-09 23:46:19 +0000
commitb930b2d66a6b64d9c71a284f74ae451e31519519 (patch)
tree1a0afc7b7cef8c13f98ddaae8fb85df569164aa3
parent83d0b2be3e17f6a01c551a28fbe759cfb995d2d1 (diff)
downloadorg.eclipse.cdt-b930b2d66a6b64d9c71a284f74ae451e31519519.tar.gz
org.eclipse.cdt-b930b2d66a6b64d9c71a284f74ae451e31519519.tar.xz
org.eclipse.cdt-b930b2d66a6b64d9c71a284f74ae451e31519519.zip
Bug 429361 - 'u8' token after #ifdef
Change-Id: Idc780473ca6356397f6466adff7ad0ee92a23fd0 Signed-off-by: Nathan Ridge <zeratul976@hotmail.com> Reviewed-on: https://git.eclipse.org/r/23087 Reviewed-by: Sergey Prigogin <eclipse.sprigogin@gmail.com> IP-Clean: Sergey Prigogin <eclipse.sprigogin@gmail.com> Tested-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Lexer.java21
2 files changed, 23 insertions, 7 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
index e72d2f8efc2..cdc8b9357ab 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
@@ -10572,4 +10572,13 @@ public class AST2CPPTests extends AST2TestBase {
public void testParenthesizedReferenceArgument_424898() throws Exception {
parseAndCheckBindings();
}
+
+ // typedef unsigned char u8;
+ //
+ // #ifndef X
+ // u8 var;
+ // #endif
+ public void testU8TokenAfterIfdef_429361() throws Exception {
+ parseAndCheckBindings();
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Lexer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Lexer.java
index 90c2925af9f..d7e6782e9ac 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Lexer.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Lexer.java
@@ -90,10 +90,17 @@ final public class Lexer implements ITokenSequence {
private Token fLastToken;
// For the few cases where we have to lookahead more than one character
+ private int fMarkPhase3Offset;
+ private int fMarkPhase3EndOffset;
+ private int fMarkPhase3PrefetchedChar;
+
+ // To store the entire state. Note that we don't reuse the variables
+ // used for saving the phase3 because calls to markPhase3() and
+ // restorePhase3() can occur in between calls to saveState() and
+ // restoreState().
private int fMarkOffset;
private int fMarkEndOffset;
private int fMarkPrefetchedChar;
- // To store the entire state.
private boolean fMarkInsideIncludeDirective;
private Token fMarkToken;
private Token fMarkLastToken;
@@ -1006,18 +1013,18 @@ final public class Lexer implements ITokenSequence {
* with a long prefix.
*/
private void markPhase3() {
- fMarkOffset= fOffset;
- fMarkEndOffset= fEndOffset;
- fMarkPrefetchedChar= fCharPhase3;
+ fMarkPhase3Offset= fOffset;
+ fMarkPhase3EndOffset= fEndOffset;
+ fMarkPhase3PrefetchedChar= fCharPhase3;
}
/**
* Restores a previously saved state of phase3.
*/
private void restorePhase3() {
- fOffset= fMarkOffset;
- fEndOffset= fMarkEndOffset;
- fCharPhase3= fMarkPrefetchedChar;
+ fOffset= fMarkPhase3Offset;
+ fEndOffset= fMarkPhase3EndOffset;
+ fCharPhase3= fMarkPhase3PrefetchedChar;
}
/**

Back to the top