| Index: test/mjsunit/regress/regress-5902.js
|
| diff --git a/test/mjsunit/regress/regress-5902.js b/test/mjsunit/regress/regress-5902.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6925bf312c0af087482ff3d5b30ff06f829fd2fe
|
| --- /dev/null
|
| +++ b/test/mjsunit/regress/regress-5902.js
|
| @@ -0,0 +1,63 @@
|
| +// Copyright 2017 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: --allow-natives-syntax
|
| +
|
| +var log = [];
|
| +
|
| +function check(predicate, item) {
|
| + if (!predicate) log.push(item);
|
| +}
|
| +
|
| +var global = this;
|
| +
|
| +Object.getOwnPropertyNames(global).forEach(function(name) {
|
| + // Only check for global properties with uppercase names.
|
| + if (name[0] != name[0].toUpperCase()) return;
|
| +
|
| + var obj = global[name];
|
| +
|
| + // Skip non-receivers.
|
| + if (! % IsJSReceiver(obj)) return;
|
| +
|
| + // Skip non-natives.
|
| + if (!obj.toString().includes('native')) return;
|
| +
|
| + // Construct an instance.
|
| + try {
|
| + new obj();
|
| + } catch (e) {
|
| + }
|
| +
|
| + // Check the object.
|
| + check(% HasFastProperties(obj), `${name}`);
|
| +
|
| + // Check the constructor.
|
| + var constructor = obj.constructor;
|
| + if (! % IsJSReceiver(constructor)) return;
|
| + check(% HasFastProperties(constructor), `${name}.constructor`);
|
| +
|
| + // Check the prototype.
|
| + var prototype = obj.prototype;
|
| + if (! % IsJSReceiver(prototype)) return;
|
| + check(% HasFastProperties(prototype), `${name}.prototype`);
|
| +
|
| + // Check the prototype.constructor.
|
| + var prototype_constructor = prototype.constructor;
|
| + if (! % IsJSReceiver(prototype_constructor)) return;
|
| + check(
|
| + % HasFastProperties(prototype_constructor),
|
| + `${name}.prototype.constructor`);
|
| +});
|
| +
|
| +// This is the current set of dictionary mode objects.
|
| +// Remove items as we fix them. See issue 5902.
|
| +assertEquals(
|
| + [
|
| + 'RegExp', 'RegExp.prototype.constructor', 'Error.prototype',
|
| + 'EvalError.prototype', 'RangeError.prototype', 'ReferenceError.prototype',
|
| + 'SyntaxError.prototype', 'TypeError.prototype', 'URIError.prototype',
|
| + 'Map', 'Map.prototype.constructor', 'Set', 'Set.prototype.constructor'
|
| + ],
|
| + log);
|
|
|