diff options
author | Andrew Niefer | 2006-09-06 02:51:33 +0000 |
---|---|---|
committer | Andrew Niefer | 2006-09-06 02:51:33 +0000 |
commit | c491aa669227c0123f3b3d2c18e1bb6ce668adfb (patch) | |
tree | 86980cf754d523829417d6d18d82b9ce904236d4 /core | |
parent | 711ca92667c9bc513189e88fb41b8546fec0b23c (diff) | |
download | org.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')
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: |