diff options
author | Nathan Ridge | 2014-03-09 06:43:12 +0000 |
---|---|---|
committer | Sergey Prigogin | 2014-03-09 23:46:19 +0000 |
commit | b930b2d66a6b64d9c71a284f74ae451e31519519 (patch) | |
tree | 1a0afc7b7cef8c13f98ddaae8fb85df569164aa3 | |
parent | 83d0b2be3e17f6a01c551a28fbe759cfb995d2d1 (diff) | |
download | org.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>
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; } /** |