[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] [FIXED] 75532 [Scanner] Wrong compare if the two declarations are in other number system
|
Here's a patch for the following:
[FIXED] 75532 [Scanner] Wrong compare
if the two declarations are in other number system
Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada
Index: parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java,v
retrieving revision 1.9
diff -u -r1.9 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java 6 Oct 2004 20:15:10 -0000 1.9
+++ parser/org/eclipse/cdt/internal/core/parser/scanner2/ExpressionEvaluator.java 7 Oct 2004 17:14:25 -0000
@@ -459,11 +459,11 @@
continue;
} else if (isHex) {
if (c >= 'a' && c <= 'f') {
- tokenValue *= 16;
+ tokenValue = (tokenValue == 0 ? 10 : (tokenValue * 16) + 10);
tokenValue += c - 'a';
continue;
} else if (c >= 'A' && c <= 'F') {
- tokenValue *= 16;
+ tokenValue = (tokenValue == 0 ? 10 : (tokenValue * 16) + 10);
tokenValue += c - 'A';
continue;
}
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.127
diff -u -r1.127 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 5 Oct 2004 18:16:04 -0000 1.127
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java 7 Oct 2004 17:12:44 -0000
@@ -14,6 +14,7 @@
import java.io.Writer;
import java.util.Iterator;
+import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
@@ -2240,6 +2241,27 @@
assertTrue( typeIds.hasNext() );
IASTTypeId typeId = (IASTTypeId) typeIds.next();
assertEquals( typeId.getTypeOrClassName(), "Thrown" );
+ }
+
+ public void testBug75532() throws Exception
+ {
+ try {
+ Writer writer = new StringWriter();
+ writer.write( "#if 2147483647 == 0x7fffffff\n");
+ writer.write( "#error This was equal, but not for the eclipse.\n");
+ writer.write( "#endif\n");
+ parse( writer.toString() );
+
+ assertTrue(false);
+ } catch (ParserException pe) {
+ // expected IProblem
+ } finally {
+ assertTrue( callback.getProblems().hasNext() );
+ Object ipo = callback.getProblems().next();
+ assertTrue( ipo instanceof IProblem );
+ IProblem ip = (IProblem)callback.getProblems().next();
+ assertTrue(ip.getArguments().indexOf("This was equal, but not for the eclipse") > 0);
+ }
}
}