Skip to main content
summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAndrew Niefer2006-09-06 02:51:33 +0000
committerAndrew Niefer2006-09-06 02:51:33 +0000
commitc491aa669227c0123f3b3d2c18e1bb6ce668adfb (patch)
tree86980cf754d523829417d6d18d82b9ce904236d4 /core
parent711ca92667c9bc513189e88fb41b8546fec0b23c (diff)
downloadorg.eclipse.cdt-c491aa669227c0123f3b3d2c18e1bb6ce668adfb.tar.gz
org.eclipse.cdt-c491aa669227c0123f3b3d2c18e1bb6ce668adfb.tar.xz
org.eclipse.cdt-c491aa669227c0123f3b3d2c18e1bb6ce668adfb.zip
bug 156137 - Expression Evaluator does not handle %
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner2/Scanner2Test.java11
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java15
2 files changed, 20 insertions, 6 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 6886d67b22c..221f87d82de 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
@@ -2414,4 +2414,15 @@ public class Scanner2Test extends BaseScanner2Test
initializeScanner(buffer.toString(), ParserLanguage.CPP);
fullyTokenize();
}
+
+ public void testBug156137() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("#if (3 % 2 == 1) \n");
+ buffer.append("C \n");
+ buffer.append("#endif \n");
+
+ initializeScanner(buffer.toString());
+ validateIdentifier("C");
+ validateEOF();
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java
index 3aaa945acb3..df8d7f32325 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java
@@ -382,7 +382,7 @@ abstract class BaseScanner implements IScanner {
private long multiplicativeExpression() throws EvalException {
long r1 = unaryExpression();
- for (int t = LA(); t == tMULT || t == tDIV; t = LA()) {
+ for (int t = LA(); t == tMULT || t == tDIV || t == tMOD; t = LA()) {
int position = pos; // for IProblem /0 below, need position
// before
// consume()
@@ -390,9 +390,12 @@ abstract class BaseScanner implements IScanner {
long r2 = unaryExpression();
if (t == tMULT)
r1 = r1 * r2;
- else if (r2 != 0)// t == tDIV;
- r1 = r1 / r2;
- else {
+ else if (r2 != 0) {
+ if (t == tDIV)
+ r1 = r1 / r2;
+ else
+ r1 = r1 % r2; //tMOD
+ } else {
handleProblem(IProblem.SCANNER_DIVIDE_BY_ZERO, position);
throw new EvalException("Divide by 0 encountered"); //$NON-NLS-1$
}
@@ -2640,12 +2643,12 @@ abstract class BaseScanner implements IScanner {
definitions,
getLineNumber(bufferPos[bufferStackPos]),
getCurrentFilename()) == 0) {
- processIf(pos, bufferPos[bufferStackPos], true);
+ processIf(pos, bufferPos[bufferStackPos], false);
skipOverConditionalCode(true);
if (isLimitReached())
handleInvalidCompletion();
} else {
- processIf(pos, bufferPos[bufferStackPos], false);
+ processIf(pos, bufferPos[bufferStackPos], true);
}
return;
case ppElse:

Back to the top