Revision: 5045
Author: [email protected]
Date: Mon Jul 12 08:29:25 2010
Log: Remove the special error message for overflows when using
Function.prototype.apply. This avoids having more than one error
message for stack overflow situations which makes testing a pain.
Review URL: http://codereview.chromium.org/2967003
http://code.google.com/p/v8/source/detail?r=5045
Modified:
/branches/bleeding_edge/src/messages.js
/branches/bleeding_edge/src/runtime.js
/branches/bleeding_edge/test/mjsunit/apply.js
=======================================
--- /branches/bleeding_edge/src/messages.js Mon Jul 12 06:17:27 2010
+++ /branches/bleeding_edge/src/messages.js Mon Jul 12 08:29:25 2010
@@ -181,7 +181,6 @@
// RangeError
invalid_array_length: "Invalid array length",
stack_overflow: "Maximum call stack size exceeded",
- apply_overflow: "Function.prototype.apply cannot
support %0 arguments",
// SyntaxError
unable_to_parse: "Parse error",
duplicate_regexp_flag: "Duplicate RegExp flag %0",
=======================================
--- /branches/bleeding_edge/src/runtime.js Mon Jun 28 23:47:19 2010
+++ /branches/bleeding_edge/src/runtime.js Mon Jul 12 08:29:25 2010
@@ -431,7 +431,7 @@
// big enough, but sanity check the value to avoid overflow when
// multiplying with pointer size.
if (length > 0x800000) {
- throw %MakeRangeError('apply_overflow', [length]);
+ throw %MakeRangeError('stack_overflow', []);
}
if (!IS_FUNCTION(this)) {
@@ -450,7 +450,7 @@
function APPLY_OVERFLOW(length) {
- throw %MakeRangeError('apply_overflow', [length]);
+ throw %MakeRangeError('stack_overflow', []);
}
=======================================
--- /branches/bleeding_edge/test/mjsunit/apply.js Tue Jun 22 15:20:58 2010
+++ /branches/bleeding_edge/test/mjsunit/apply.js Mon Jul 12 08:29:25 2010
@@ -94,7 +94,7 @@
}
return doo;
}
-
+
assertEquals("42foofishhorse", f.apply(this, arr), "apply to this");
function s() {
@@ -111,8 +111,6 @@
assertEquals(345, this);
return arguments.length + arguments[arguments.length - 1];
}
-
-var stack_corner_case_failure = false;
for (var j = 1; j < 0x40000000; j <<= 1) {
try {
@@ -120,20 +118,7 @@
a[j - 1] = 42;
assertEquals(42 + j, al.apply(345, a));
} catch (e) {
- if (e.toString().indexOf("Maximum call stack size exceeded") != -1) {
- // For some combinations of build settings, it may be the case that
the
- // stack here is just tall enough to contain the array whose size is
- // specified by j but is not tall enough to contain the activation
- // record for the apply call. Allow one such corner case through,
- // checking that the length check will do the right thing for an
array
- // the next size up.
- assertEquals(false, stack_corner_case_failure);
- stack_corner_case_failure = true;
- continue;
- }
- assertTrue(e.toString().indexOf("Function.prototype.apply") != -1,
- "exception does not contain Function.prototype.apply: " +
- e.toString());
+ assertTrue(e.toString().indexOf("Maximum call stack size exceeded") !=
-1);
for (; j < 0x40000000; j <<= 1) {
var caught = false;
try {
@@ -143,9 +128,7 @@
assertUnreachable("Apply of array with length " + a.length +
" should have thrown");
} catch (e) {
- assertTrue(e.toString().indexOf("Function.prototype.apply") != -1,
- "exception does not contain Function.prototype.apply ["
+
- "length = " + j + "]: " + e.toString());
+ assertTrue(e.toString().indexOf("Maximum call stack size
exceeded") != -1);
caught = true;
}
assertTrue(caught, "exception not caught");
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev