LibWeb: Don't override prototype on generated iterator prototypes

Generated iterator prototypes already have the IteratorPrototype as
their prototype, but we were incorrectly hijacking them and rerouting
to ObjectPrototype.

Regressed in cfe663435e.
This commit is contained in:
Andreas Kling 2023-06-08 07:07:40 +02:00
parent 3f1cc7125c
commit 7f90b0cab7
Notes: sideshowbarker 2024-07-17 05:01:20 +09:00
3 changed files with 19 additions and 19 deletions

View file

@ -3881,25 +3881,6 @@ JS::ThrowCompletionOr<void> @prototype_class@::initialize(JS::Realm& realm)
{
auto& vm = this->vm();
MUST_OR_THROW_OOM(Base::initialize(realm));
)~~~");
if (interface.prototype_base_class == "ObjectPrototype") {
generator.append(R"~~~(
set_prototype(realm.intrinsics().object_prototype());
)~~~");
} else {
generator.append(R"~~~(
set_prototype(&ensure_web_prototype<@prototype_base_class@>(realm, "@parent_name@"));
)~~~");
}
generator.append(R"~~~(
define_native_function(realm, vm.names.next, next, 0, JS::Attribute::Writable | JS::Attribute::Enumerable | JS::Attribute::Configurable);
define_direct_property(vm.well_known_symbol_to_string_tag(), MUST_OR_THROW_OOM(JS::PrimitiveString::create(vm, "Iterator"sv)), JS::Attribute::Configurable);

View file

@ -0,0 +1,6 @@
[object Iterator]
[object Iterator]
true
hello
1
[object Window]

View file

@ -0,0 +1,13 @@
<script src="include.js"></script>
<script>
test(() => {
let u = new URLSearchParams();
let iterator = u[Symbol.iterator]();
println(iterator);
println(iterator[Symbol.iterator]());
println(iterator === iterator[Symbol.iterator]());
println(iterator[Symbol.iterator].call("hello"));
println(iterator[Symbol.iterator].call(1));
println(iterator[Symbol.iterator].call(window));
});
</script>