diff --git a/Libraries/LibJS/AST.cpp b/Libraries/LibJS/AST.cpp index 52a1912599e..76cd372bb46 100644 --- a/Libraries/LibJS/AST.cpp +++ b/Libraries/LibJS/AST.cpp @@ -191,11 +191,11 @@ ThrowCompletionOr ClassMethod::class_element_evaluatio break; case ClassMethod::Kind::Getter: set_function_name("get"sv); - TRY(target.define_property_or_throw(property_key, { .get = &method_function, .enumerable = true, .configurable = true })); + TRY(target.define_property_or_throw(property_key, { .get = &method_function, .enumerable = false, .configurable = true })); break; case ClassMethod::Kind::Setter: set_function_name("set"sv); - TRY(target.define_property_or_throw(property_key, { .set = &method_function, .enumerable = true, .configurable = true })); + TRY(target.define_property_or_throw(property_key, { .set = &method_function, .enumerable = false, .configurable = true })); break; default: VERIFY_NOT_REACHED(); diff --git a/Libraries/LibJS/Tests/classes/class-accessor-enumerable.js b/Libraries/LibJS/Tests/classes/class-accessor-enumerable.js new file mode 100644 index 00000000000..7a29e7518df --- /dev/null +++ b/Libraries/LibJS/Tests/classes/class-accessor-enumerable.js @@ -0,0 +1,12 @@ +test("class accessor should be non-enumerable", () => { + class C { + get x() { + return 1; + } + set x(v) {} + } + + const desc = Object.getOwnPropertyDescriptor(C.prototype, "x"); + expect(desc.enumerable).toBeFalse(); + expect(Object.keys(C.prototype).includes("x")).toBeFalse(); +});