v8/test/mjsunit/regress/regress-crbug-823130.js
Jakob Kummerow 45a2d9c518 Fix "x is not iterable" error message consistency
Since 94ce16b704, when loading an iterator from null or undefined, we
generate the error message "x is not iterable" instead of the unwieldy
"Cannot read property 'Symbol(Symbol.iterator)' of undefined". However
Runtime::GetObjectProperty, which is used as slow path by LoadICs, did
not check for this case, leading to different messages being generated
depending on IC state.

Bug: chromium:823130
Change-Id: Ie98500b97efef401aac9880b9af47d58c3c2825d
Reviewed-on: https://chromium-review.googlesource.com/1042951
Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org>
Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#52974}
2018-05-03 23:13:21 +00:00

41 lines
741 B
JavaScript

// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --expose-gc
var __v_1 = new Array();
var __v_2 = 0x30;
var __v_4 = "abc";
var __v_3 = "def";
function __f_2(b) {
[...b];
}
__f_2([1]);
__f_2([3.3]);
__f_2([{}]);
var vars = [__v_1, __v_2, __v_3, __v_4];
for (var j = 0; j < vars.length && j < 7; j++) {
for (var k = j; k < vars.length && k < 7 + j; k++) {
var v1 = vars[j];
var e1, e2;
try {
__f_2(v1);
__f_2();
} catch (e) {
e1 = "" + e;
}
gc();
try {
__f_2(v1);
__f_2();
} catch (e) {
e2 = "" + e;
}
assertEquals(e1, e2);
}
}