mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-02 14:19:48 +00:00
LibJS: Cache the shape for normal ECMAScriptFunctionObject prototypes
Instead of creating a unique new prototype shape every time a function object is instantiated, we now keep one cached with the intrinsics. This avoids a whole lot of shape allocations, reducing GC pressure.
This commit is contained in:
parent
795471ce31
commit
749cf2d1b5
Notes:
github-actions[bot]
2024-09-26 18:24:37 +00:00
Author: https://github.com/awesomekling
Commit: 749cf2d1b5
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1541
3 changed files with 15 additions and 2 deletions
|
@ -354,8 +354,8 @@ void ECMAScriptFunctionObject::initialize(Realm& realm)
|
|||
Object* prototype = nullptr;
|
||||
switch (m_kind) {
|
||||
case FunctionKind::Normal:
|
||||
prototype = Object::create_prototype(realm, realm.intrinsics().object_prototype());
|
||||
MUST(prototype->define_property_or_throw(vm.names.constructor, { .value = this, .writable = true, .enumerable = false, .configurable = true }));
|
||||
prototype = Object::create_with_premade_shape(realm.intrinsics().new_function_object_prototype_shape());
|
||||
prototype->put_direct(realm.intrinsics().new_function_object_prototype_constructor_offset(), this);
|
||||
break;
|
||||
case FunctionKind::Generator:
|
||||
// prototype is "g1.prototype" in figure-2 (https://tc39.es/ecma262/img/figure-2.png)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue