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 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5045 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
43e28a6fea
commit
f6e049b0ce
@ -181,7 +181,6 @@ function FormatMessage(message) {
|
||||
// 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",
|
||||
|
@ -431,7 +431,7 @@ function APPLY_PREPARE(args) {
|
||||
// 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_PREPARE(args) {
|
||||
|
||||
|
||||
function APPLY_OVERFLOW(length) {
|
||||
throw %MakeRangeError('apply_overflow', [length]);
|
||||
throw %MakeRangeError('stack_overflow', []);
|
||||
}
|
||||
|
||||
|
||||
|
@ -112,28 +112,13 @@ function al() {
|
||||
return arguments.length + arguments[arguments.length - 1];
|
||||
}
|
||||
|
||||
var stack_corner_case_failure = false;
|
||||
|
||||
for (var j = 1; j < 0x40000000; j <<= 1) {
|
||||
try {
|
||||
var a = new Array(j);
|
||||
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 @@ for (var j = 1; j < 0x40000000; j <<= 1) {
|
||||
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");
|
||||
|
Loading…
Reference in New Issue
Block a user