Reviewers: danno,
Message:
ptal
Description:
Port r9116 to the 3.5 branch.
Please review this at http://codereview.chromium.org/8271028/
SVN Base: https://v8.googlecode.com/svn/branches/3.5
Affected files:
M src/v8natives.js
M src/version.cc
M test/mjsunit/parse-int-float.js
Index: src/v8natives.js
diff --git a/src/v8natives.js b/src/v8natives.js
index
035fd2e2be11bc11679e936031377cb2699c82f4..982e18e4d5564cc6874e215eaf86b6d94bf699ec
100644
--- a/src/v8natives.js
+++ b/src/v8natives.js
@@ -106,13 +106,16 @@ function GlobalParseInt(string, radix) {
// 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);
Index: src/version.cc
diff --git a/src/version.cc b/src/version.cc
index
5898a26b9855add51eb28c120e1bb4823226b82b..d4ce63a736523e2d0f0d34e8d5a3daf5fafff9da
100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -35,7 +35,7 @@
#define MAJOR_VERSION 3
#define MINOR_VERSION 5
#define BUILD_NUMBER 10
-#define PATCH_LEVEL 18
+#define PATCH_LEVEL 19
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
#define IS_CANDIDATE_VERSION 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
a4f09df9b4a24d6ff7ffdc30316183760fa7bde8..2e4f6484370f2329213dd53ea5e85f8d7fabc7da
100644
--- a/test/mjsunit/parse-int-float.js
+++ b/test/mjsunit/parse-int-float.js
@@ -100,4 +100,17 @@ assertTrue(isNaN(parseFloat(0/0)));
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