From ac316607ba14c101bf69a3d05eaafd253b833923 Mon Sep 17 00:00:00 2001 From: "Mark S. Miller" Date: Wed, 8 Oct 2025 08:30:40 -0700 Subject: [PATCH] [nonextensible-applies-to-private] Fix bugs (#4590) Fixes #4587 --- ...te-class-field-on-nonextensible-objects.js | 2 +- ...-field-on-nonextensible-return-override.js | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/test/language/statements/class/elements/private-class-field-on-nonextensible-objects.js b/test/language/statements/class/elements/private-class-field-on-nonextensible-objects.js index ada3868916..a87c9cd634 100644 --- a/test/language/statements/class/elements/private-class-field-on-nonextensible-objects.js +++ b/test/language/statements/class/elements/private-class-field-on-nonextensible-objects.js @@ -92,7 +92,7 @@ class ClassWithPrivateAccessor extends NonExtensibleBase { const a = new ClassWithPrivateAccessor(false); // extensible objects can be extended -assert.sameValue(m.publicAccessor, 42); +assert.sameValue(a.publicAccessor, 42); // where superclass prevented extensions & subclass extended assert.throws(TypeError, function () { diff --git a/test/language/statements/class/subclass/private-class-field-on-nonextensible-return-override.js b/test/language/statements/class/subclass/private-class-field-on-nonextensible-return-override.js index d8e7034a7d..de0623bb62 100644 --- a/test/language/statements/class/subclass/private-class-field-on-nonextensible-return-override.js +++ b/test/language/statements/class/subclass/private-class-field-on-nonextensible-return-override.js @@ -35,14 +35,14 @@ class ClassWithPrivateField extends TrojanBase { super(obj); this.#val = 42; } - val() { - return this.#val; + static val(obj) { + return obj.#val; } } const t = new ClassWithPrivateField({}); // extensible objects can be extended -assert.sameValue(t.val(), 42); +assert.sameValue(ClassWithPrivateField.val(t), 42); // where superclass prevented extensions & subclass extended assert.throws(TypeError, function () { @@ -59,15 +59,14 @@ class ClassWithPrivateMethod extends TrojanBase { #privateMethod() { return 42; }; - // public methods are on the prototype, so are ok. - publicMethod() { - return this.#privateMethod(); + static val(obj) { + return obj.#privateMethod(); } } const m = new ClassWithPrivateMethod({}); // extensible objects can be extended -assert.sameValue(m.publicMethod(), 42); +assert.sameValue(ClassWithPrivateMethod.val(m), 42); // where superclass prevented extensions & subclass extended assert.throws(TypeError, function () { @@ -84,15 +83,14 @@ class ClassWithPrivateAccessor extends TrojanBase { get #privateAccessor() { return 42; }; - // public accessors are on the prototype, so are ok. - get publicAccessor() { - return this.#privateAccessor; + static val(obj) { + return obj.#privateAccessor; } } const a = new ClassWithPrivateAccessor({}); // extensible objects can be extended -assert.sameValue(m.publicAccessor, 42); +assert.sameValue(ClassWithPrivateAccessor.val(a), 42); // where superclass prevented extensions & subclass extended assert.throws(TypeError, function () {