Revision: 9630
Author:   [email protected]
Date:     Fri Oct 14 04:22:44 2011
Log:      Port r9116 to the 3.5 branch.

Review URL: http://codereview.chromium.org/8271028
http://code.google.com/p/v8/source/detail?r=9630

Modified:
 /branches/3.5/src/v8natives.js
 /branches/3.5/src/version.cc
 /branches/3.5/test/mjsunit/parse-int-float.js

=======================================
--- /branches/3.5/src/v8natives.js      Mon Aug 29 03:41:00 2011
+++ /branches/3.5/src/v8natives.js      Fri Oct 14 04:22:44 2011
@@ -106,13 +106,16 @@
       // Truncate number.
       return string | 0;
     }
+    string = TO_STRING_INLINE(string);
     radix = radix | 0;
   } else {
+    // The spec says ToString should be evaluated before ToInt32.
+    string = TO_STRING_INLINE(string);
     radix = TO_INT32(radix);
     if (!(radix == 0 || (2 <= radix && radix <= 36)))
       return $NaN;
   }
-  string = TO_STRING_INLINE(string);
+
   if (%_HasCachedArrayIndex(string) &&
       (radix == 0 || radix == 10)) {
     return %_GetCachedArrayIndex(string);
=======================================
--- /branches/3.5/src/version.cc        Fri Oct 14 03:53:23 2011
+++ /branches/3.5/src/version.cc        Fri Oct 14 04:22:44 2011
@@ -35,7 +35,7 @@
 #define MAJOR_VERSION     3
 #define MINOR_VERSION     5
 #define BUILD_NUMBER      10
-#define PATCH_LEVEL       19
+#define PATCH_LEVEL       20
 // Use 1 for candidates and 0 otherwise.
 // (Boolean macro values are not supported by all preprocessors.)
 #define IS_CANDIDATE_VERSION 0
=======================================
--- /branches/3.5/test/mjsunit/parse-int-float.js       Tue Apr  6 06:10:27 2010
+++ /branches/3.5/test/mjsunit/parse-int-float.js       Fri Oct 14 04:22:44 2011
@@ -100,4 +100,17 @@
 assertEquals(Infinity, parseFloat(1/0), "parseFloat Infinity");
 assertEquals(-Infinity, parseFloat(-1/0), "parseFloat -Infinity");

-
+var state;
+var throwingRadix = { valueOf: function() { state = "throwingRadix"; throw null; } }; +var throwingString = { toString: function() { state = "throwingString"; throw null; } };
+state = null;
+try { parseInt('123', throwingRadix); } catch (e) {}
+assertEquals(state, "throwingRadix");
+
+state = null;
+try { parseInt(throwingString, 10); } catch (e) {}
+assertEquals(state, "throwingString");
+
+state = null;
+try { parseInt(throwingString, throwingRadix); } catch (e) {}
+assertEquals(state, "throwingString");

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to