From 13c394816415f0f6e838ea3f39fb22c576a3809f Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 23 Aug 2007 12:35:17 +0000 Subject: [PATCH] Fix and Testcase for 185120, handling of constants with suffix 'ul'. --- .../cdt/core/parser/tests/scanner2/Scanner2Test.java | 12 ++++++++++++ .../core/parser/scanner2/ExpressionEvaluator.java | 8 +++++++- 2 files changed, 19 insertions(+), 1 deletion(-) 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 edbcfac0746..c3366b0967b 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 @@ -2665,4 +2665,16 @@ public class Scanner2Test extends BaseScanner2Test validateToken( IToken.tRPAREN ); validateChar( "s" ); } + + public void testBug185120() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("#define TEST_DEFINE 1UL\n"); + buffer.append("#if TEST_DEFINE != 1UL\n"); + buffer.append("-\n"); + buffer.append("#else\n"); + buffer.append("+\n"); + buffer.append("#endif\n"); + initializeScanner( buffer.toString() ); + validateToken( IToken.tPLUS ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java index 0dd6408838e..705574c3cd0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java @@ -618,7 +618,13 @@ public class ExpressionEvaluator { // end of number if (c == 'L' || c == 'l' || c == 'U' || c == 'u') { // eat the long/unsigned - ++bufferPos[bufferStackPos]; + int pos= ++bufferPos[bufferStackPos]; + if (pos < limit) { + c= buffer[pos]; + if (c == 'L' || c == 'l' || c == 'U' || c == 'u') { + ++bufferPos[bufferStackPos]; + } + } } // done