Reviewers: Sven Panne,
Description:
Fix parseInt's octal parsing behavior (ECMA-262 Annex E 15.1.2.2).
[email protected]
BUG=v8:1645
TEST=test262, parse-int-float.js
Please review this at https://chromiumcodereview.appspot.com/10836151/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/conversions-inl.h
M test/mjsunit/parse-int-float.js
M test/test262/test262.status
Index: src/conversions-inl.h
diff --git a/src/conversions-inl.h b/src/conversions-inl.h
index
bf2232562e7946f2636d4ae8fcbcdda149a9551c..e272fe6c08d8dfa8f326a12ac0e84e7c81b4d1e1
100644
--- a/src/conversions-inl.h
+++ b/src/conversions-inl.h
@@ -268,6 +268,7 @@ double InternalStringToInt(UnicodeCache* unicode_cache,
if (radix == 0) {
// Radix detection.
+ radix = 10;
if (*current == '0') {
++current;
if (current == end) return SignedZero(negative);
@@ -276,11 +277,8 @@ double InternalStringToInt(UnicodeCache* unicode_cache,
++current;
if (current == end) return JunkStringValue();
} else {
- radix = 8;
leading_zero = true;
}
- } else {
- radix = 10;
}
} else if (radix == 16) {
if (*current == '0') {
Index: test/mjsunit/parse-int-float.js
diff --git a/test/mjsunit/parse-int-float.js
b/test/mjsunit/parse-int-float.js
index
2e4f6484370f2329213dd53ea5e85f8d7fabc7da..5a9b6f33ccb59aea61ab7e080a8c2abec5b8389e
100644
--- a/test/mjsunit/parse-int-float.js
+++ b/test/mjsunit/parse-int-float.js
@@ -29,10 +29,10 @@ assertEquals(0, parseInt('0'));
assertEquals(0, parseInt(' 0'));
assertEquals(0, parseInt(' 0 '));
-assertEquals(63, parseInt('077'));
-assertEquals(63, parseInt(' 077'));
-assertEquals(63, parseInt(' 077 '));
-assertEquals(-63, parseInt(' -077'));
+assertEquals(77, parseInt('077'));
+assertEquals(77, parseInt(' 077'));
+assertEquals(77, parseInt(' 077 '));
+assertEquals(-77, parseInt(' -077'));
assertEquals(3, parseInt('11', 2));
assertEquals(4, parseInt('11', 3));
Index: test/test262/test262.status
diff --git a/test/test262/test262.status b/test/test262/test262.status
index
f564f61dbc98cd0496745ffafad6226dfb371a89..fc7c4d0c7536aea74dfbf7d2539713b10f6e7682
100644
--- a/test/test262/test262.status
+++ b/test/test262/test262.status
@@ -41,10 +41,6 @@ S15.12.2_A1: FAIL
##################### DELIBERATE INCOMPATIBILITIES #####################
-# We deliberately treat arguments to parseInt() with a leading zero as
-# octal numbers in order to not break the web.
-S15.1.2.2_A5.1_T1: FAIL_OK
-
# This tests precision of Math.tan and Math.sin. The implementation for
those
# trigonometric functions are platform/compiler dependent. Furthermore,
the
# expectation values by far deviates from the actual result given by an
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev