| Index: test/mjsunit/es6/classes-subclass-builtins.js
|
| diff --git a/test/mjsunit/es6/classes-subclass-builtins.js b/test/mjsunit/es6/classes-subclass-builtins.js
|
| index 5ecca0ed986f4824573a11f6044007ea4b1e5dc3..db0604249b8c0c69d3e00bd71c6665c08da28c93 100644
|
| --- a/test/mjsunit/es6/classes-subclass-builtins.js
|
| +++ b/test/mjsunit/es6/classes-subclass-builtins.js
|
| @@ -3,7 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| // Flags: --allow-natives-syntax --harmony-reflect --harmony-regexp-subclass
|
| -// Flags: --expose-gc
|
| +// Flags: --expose-gc --strong-mode
|
|
|
| "use strict";
|
|
|
| @@ -78,26 +78,52 @@ function checkPrototypeChain(object, constructors) {
|
| constructor(...args) {
|
| assertFalse(new.target === undefined);
|
| super(...args);
|
| + // Strong functions are not extensible, so don't add fields.
|
| + if (args[args.length - 1].indexOf("use strong") >= 0) return;
|
| this.a = 42;
|
| this.d = 4.2;
|
| this.o = {foo:153};
|
| }
|
| }
|
| -
|
| - var o = new A("this.foo = 113;");
|
| - assertTrue(o instanceof Object);
|
| - assertTrue(o instanceof Function);
|
| - assertTrue(o instanceof A);
|
| - assertEquals("function", typeof o);
|
| - checkPrototypeChain(o, [A, Function, Object]);
|
| - assertEquals(42, o.a);
|
| - assertEquals(4.2, o.d);
|
| - assertEquals(153, o.o.foo);
|
| - var oo = new o();
|
| + var sloppy_func = new A("");
|
| + var strict_func = new A("'use strict';");
|
| + assertNull(sloppy_func.caller);
|
| + assertThrows("strict_f.caller");
|
| + assertNull(Object.getOwnPropertyDescriptor(sloppy_func, "caller").value);
|
| + assertEquals(undefined, Object.getOwnPropertyDescriptor(strict_func, "caller"));
|
| +
|
| + var sloppy_func = new A("this.foo = 113;");
|
| + assertTrue(undefined !== sloppy_func.prototype);
|
| + sloppy_func.prototype.bar = 377;
|
| + assertTrue(sloppy_func instanceof Object);
|
| + assertTrue(sloppy_func instanceof Function);
|
| + assertTrue(sloppy_func instanceof A);
|
| + assertEquals("function", typeof sloppy_func);
|
| + checkPrototypeChain(sloppy_func, [A, Function, Object]);
|
| + assertEquals(42, sloppy_func.a);
|
| + assertEquals(4.2, sloppy_func.d);
|
| + assertEquals(153, sloppy_func.o.foo);
|
| + var oo = new sloppy_func();
|
| assertEquals(113, oo.foo);
|
| + assertEquals(377, oo.bar);
|
|
|
| - var o1 = new A("return 312;");
|
| - assertTrue(%HaveSameMap(o, o1));
|
| + var sloppy_func1 = new A("return 312;");
|
| + assertTrue(%HaveSameMap(sloppy_func, sloppy_func1));
|
| +
|
| +
|
| + var strict_func = new A("'use strict'; this.foo = 113;");
|
| + assertFalse(%HaveSameMap(strict_func, sloppy_func));
|
| +
|
| + var strict_func1 = new A("'use strict'; return 312;");
|
| + assertTrue(%HaveSameMap(strict_func, strict_func1));
|
| +
|
| +
|
| + var strong_func = new A("'use strong'; this.foo = 113");
|
| + assertFalse(%HaveSameMap(strong_func, sloppy_func));
|
| + assertFalse(%HaveSameMap(strong_func, strict_func));
|
| +
|
| + var strong_func1 = new A("'use strong'; return 312;");
|
| + assertTrue(%HaveSameMap(strong_func, strong_func1));
|
|
|
| gc();
|
| })();
|
|
|