mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-07 00:29:15 +00:00
LibJS: Streamline CreateMappedArgumentsObject [[ParameterMap]] creation
Instead of using the more generic define_native_accessor() here, we poke directly at indexed property storage for the parameter map. We can also construct the NativeFunction objects directly, without giving them names like "get 0" etc, since these are not observable by userspace. Finally, by using default property attributes (not observable anyway), we get simple indexed storage instead of generic (hash map) storage.
This commit is contained in:
parent
5290dcf650
commit
669b1131ad
Notes:
github-actions[bot]
2025-04-20 16:44:41 +00:00
Author: https://github.com/awesomekling
Commit: 669b1131ad
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4408
1 changed files with 10 additions and 11 deletions
|
@ -1131,17 +1131,16 @@ Object* create_mapped_arguments_object(VM& vm, FunctionObject& function, Nonnull
|
|||
// 1. Let g be MakeArgGetter(name, env).
|
||||
// 2. Let p be MakeArgSetter(name, env).
|
||||
// 3. Perform ! map.[[DefineOwnProperty]](! ToString(𝔽(index)), PropertyDescriptor { [[Set]]: p, [[Get]]: g, [[Enumerable]]: false, [[Configurable]]: true }).
|
||||
object->parameter_map().define_native_accessor(
|
||||
realm,
|
||||
PropertyKey { index },
|
||||
[&environment, name](VM& vm) -> ThrowCompletionOr<Value> {
|
||||
return MUST(environment.get_binding_value(vm, name, false));
|
||||
},
|
||||
[&environment, name](VM& vm) {
|
||||
MUST(environment.set_mutable_binding(vm, name, vm.argument(0), false));
|
||||
return js_undefined();
|
||||
},
|
||||
Attribute::Configurable);
|
||||
object->parameter_map().indexed_properties().put(
|
||||
index,
|
||||
Accessor::create(vm,
|
||||
NativeFunction::create(realm, FlyString {}, [&environment, name](VM& vm) -> ThrowCompletionOr<Value> {
|
||||
return MUST(environment.get_binding_value(vm, name, false));
|
||||
}),
|
||||
NativeFunction::create(realm, FlyString {}, [&environment, name](VM& vm) {
|
||||
MUST(environment.set_mutable_binding(vm, name, vm.argument(0), false));
|
||||
return js_undefined();
|
||||
})));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue