mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 19:17:44 +00:00
LibJS: Fix .length attributes of various native functions
Namely the Proxy revocation, Promise resolving, Promise then/catch finally, and Promise GetCapabilitiesExecutor functions. They were all missing an explicit 'Attribute::Configurable' argument and therefore incorrectly used the default attributes (writable, enumerable, configurable).
This commit is contained in:
parent
631d36fd98
commit
d1c109be96
4 changed files with 6 additions and 5 deletions
|
@ -105,7 +105,7 @@ JS_DEFINE_NATIVE_FUNCTION(PromisePrototype::finally)
|
|||
});
|
||||
return promise->invoke(vm.names.then.as_string(), value_thunk);
|
||||
});
|
||||
then_finally_function->define_property(vm.names.length, Value(1));
|
||||
then_finally_function->define_property(vm.names.length, Value(1), Attribute::Configurable);
|
||||
|
||||
// 27.2.5.3.2 Catch Finally Functions, https://tc39.es/ecma262/#sec-catchfinallyfunctions
|
||||
auto* catch_finally_function = NativeFunction::create(global_object, "", [constructor_handle = make_handle(constructor), on_finally_handle = make_handle(&on_finally.as_function())](auto& vm, auto& global_object) -> Value {
|
||||
|
@ -124,7 +124,7 @@ JS_DEFINE_NATIVE_FUNCTION(PromisePrototype::finally)
|
|||
});
|
||||
return promise->invoke(vm.names.then.as_string(), thrower);
|
||||
});
|
||||
catch_finally_function->define_property(vm.names.length, Value(1));
|
||||
catch_finally_function->define_property(vm.names.length, Value(1), Attribute::Configurable);
|
||||
|
||||
then_finally = Value(then_finally_function);
|
||||
catch_finally = Value(catch_finally_function);
|
||||
|
|
|
@ -25,6 +25,7 @@ PromiseCapability new_promise_capability(GlobalObject& global_object, Value cons
|
|||
Value reject { js_undefined() };
|
||||
} promise_capability_functions;
|
||||
|
||||
// 27.2.1.5.1 GetCapabilitiesExecutor Functions, https://tc39.es/ecma262/#sec-getcapabilitiesexecutor-functions
|
||||
auto* executor = NativeFunction::create(global_object, "", [&promise_capability_functions](auto& vm, auto& global_object) -> Value {
|
||||
auto resolve = vm.argument(0);
|
||||
auto reject = vm.argument(1);
|
||||
|
@ -41,7 +42,7 @@ PromiseCapability new_promise_capability(GlobalObject& global_object, Value cons
|
|||
promise_capability_functions.reject = reject;
|
||||
return js_undefined();
|
||||
});
|
||||
executor->define_property(vm.names.length, Value(2));
|
||||
executor->define_property(vm.names.length, Value(2), Attribute::Configurable);
|
||||
|
||||
MarkedValueList arguments(vm.heap());
|
||||
arguments.append(executor);
|
||||
|
|
|
@ -27,7 +27,7 @@ PromiseResolvingFunction::PromiseResolvingFunction(Promise& promise, AlreadyReso
|
|||
void PromiseResolvingFunction::initialize(GlobalObject& global_object)
|
||||
{
|
||||
Base::initialize(global_object);
|
||||
define_property(vm().names.length, Value(1));
|
||||
define_property(vm().names.length, Value(1), Attribute::Configurable);
|
||||
}
|
||||
|
||||
Value PromiseResolvingFunction::call()
|
||||
|
|
|
@ -79,7 +79,7 @@ JS_DEFINE_NATIVE_FUNCTION(ProxyConstructor::revocable)
|
|||
proxy.revoke();
|
||||
return js_undefined();
|
||||
});
|
||||
revoker->define_property(vm.names.length, Value(0));
|
||||
revoker->define_property(vm.names.length, Value(0), Attribute::Configurable);
|
||||
|
||||
auto* result = Object::create(global_object, global_object.object_prototype());
|
||||
result->define_property(vm.names.proxy, proxy);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue