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

Reply via email to