From 4880a8922f34bc93210b0db86cd3cb3b4bcdcd8f Mon Sep 17 00:00:00 2001 From: jasonwilliams Date: Tue, 20 Aug 2024 21:52:38 +0100 Subject: [PATCH] Update to use const generics over runtime param --- core/engine/src/builtins/array/mod.rs | 2 +- core/engine/src/builtins/array_buffer/mod.rs | 2 +- .../src/builtins/array_buffer/shared.rs | 2 +- .../engine/src/builtins/async_function/mod.rs | 2 +- .../builtins/async_generator_function/mod.rs | 2 +- core/engine/src/builtins/bigint/mod.rs | 2 +- core/engine/src/builtins/boolean/mod.rs | 2 +- core/engine/src/builtins/builder.rs | 22 +++++++++++-------- core/engine/src/builtins/dataview/mod.rs | 2 +- core/engine/src/builtins/date/mod.rs | 2 +- core/engine/src/builtins/error/aggregate.rs | 2 +- core/engine/src/builtins/error/eval.rs | 2 +- core/engine/src/builtins/error/mod.rs | 2 +- core/engine/src/builtins/error/range.rs | 2 +- core/engine/src/builtins/error/reference.rs | 2 +- core/engine/src/builtins/error/syntax.rs | 2 +- core/engine/src/builtins/error/type.rs | 2 +- core/engine/src/builtins/error/uri.rs | 2 +- core/engine/src/builtins/function/mod.rs | 2 +- .../src/builtins/generator_function/mod.rs | 2 +- core/engine/src/builtins/intl/collator/mod.rs | 2 +- .../src/builtins/intl/date_time_format.rs | 2 +- .../src/builtins/intl/list_format/mod.rs | 2 +- core/engine/src/builtins/intl/locale/mod.rs | 2 +- .../src/builtins/intl/number_format/mod.rs | 2 +- .../src/builtins/intl/plural_rules/mod.rs | 2 +- .../engine/src/builtins/intl/segmenter/mod.rs | 2 +- core/engine/src/builtins/map/mod.rs | 2 +- core/engine/src/builtins/number/mod.rs | 2 +- core/engine/src/builtins/object/mod.rs | 2 +- core/engine/src/builtins/promise/mod.rs | 2 +- core/engine/src/builtins/proxy/mod.rs | 2 +- core/engine/src/builtins/regexp/mod.rs | 2 +- core/engine/src/builtins/set/mod.rs | 2 +- core/engine/src/builtins/string/mod.rs | 2 +- core/engine/src/builtins/symbol/mod.rs | 2 +- .../src/builtins/temporal/duration/mod.rs | 2 +- .../src/builtins/temporal/instant/mod.rs | 2 +- .../src/builtins/temporal/plain_date/mod.rs | 2 +- .../builtins/temporal/plain_date_time/mod.rs | 2 +- .../builtins/temporal/plain_month_day/mod.rs | 2 +- .../src/builtins/temporal/plain_time/mod.rs | 2 +- .../builtins/temporal/plain_year_month/mod.rs | 2 +- .../builtins/temporal/zoned_date_time/mod.rs | 2 +- .../src/builtins/typed_array/builtin.rs | 2 +- core/engine/src/builtins/typed_array/mod.rs | 2 +- core/engine/src/builtins/weak/weak_ref.rs | 2 +- core/engine/src/builtins/weak_map/mod.rs | 2 +- core/engine/src/builtins/weak_set/mod.rs | 2 +- .../engine/src/object/shape/property_table.rs | 7 ++++++ .../src/object/shape/shared_shape/mod.rs | 2 +- 51 files changed, 69 insertions(+), 58 deletions(-) diff --git a/core/engine/src/builtins/array/mod.rs b/core/engine/src/builtins/array/mod.rs index 8ebae9957f2..aec7e87c453 100644 --- a/core/engine/src/builtins/array/mod.rs +++ b/core/engine/src/builtins/array/mod.rs @@ -108,7 +108,7 @@ impl IntrinsicObject for Array { let unscopables_object = Self::unscopables_object(); - BuiltInBuilder::from_standard_constructor::(realm, 41, 5) + BuiltInBuilder::from_standard_constructor::(realm) // Static Methods .static_method(Self::from, js_string!("from"), 1) .static_method(Self::is_array, js_string!("isArray"), 1) diff --git a/core/engine/src/builtins/array_buffer/mod.rs b/core/engine/src/builtins/array_buffer/mod.rs index 5a2a5c84fa1..6457cd7ece7 100644 --- a/core/engine/src/builtins/array_buffer/mod.rs +++ b/core/engine/src/builtins/array_buffer/mod.rs @@ -312,7 +312,7 @@ impl IntrinsicObject for ArrayBuffer { .name(js_string!("get detached")) .build(); - let builder = BuiltInBuilder::from_standard_constructor::(realm, 9, 2) + let builder = BuiltInBuilder::from_standard_constructor::(realm) .static_accessor( JsSymbol::species(), Some(get_species), diff --git a/core/engine/src/builtins/array_buffer/shared.rs b/core/engine/src/builtins/array_buffer/shared.rs index 857953b40fa..749a738245b 100644 --- a/core/engine/src/builtins/array_buffer/shared.rs +++ b/core/engine/src/builtins/array_buffer/shared.rs @@ -109,7 +109,7 @@ impl IntrinsicObject for SharedArrayBuffer { .name(js_string!("get maxByteLength")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 6, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_accessor( JsSymbol::species(), Some(get_species), diff --git a/core/engine/src/builtins/async_function/mod.rs b/core/engine/src/builtins/async_function/mod.rs index 4ce1166f835..715a2174676 100644 --- a/core/engine/src/builtins/async_function/mod.rs +++ b/core/engine/src/builtins/async_function/mod.rs @@ -28,7 +28,7 @@ impl IntrinsicObject for AsyncFunction { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 1, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().function().constructor()) .inherits(Some( realm.intrinsics().constructors().function().prototype(), diff --git a/core/engine/src/builtins/async_generator_function/mod.rs b/core/engine/src/builtins/async_generator_function/mod.rs index 9779dbe6d8d..063bc26bacd 100644 --- a/core/engine/src/builtins/async_generator_function/mod.rs +++ b/core/engine/src/builtins/async_generator_function/mod.rs @@ -28,7 +28,7 @@ impl IntrinsicObject for AsyncGeneratorFunction { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .inherits(Some( realm.intrinsics().constructors().function().prototype(), )) diff --git a/core/engine/src/builtins/bigint/mod.rs b/core/engine/src/builtins/bigint/mod.rs index 08e85a502ce..51969870121 100644 --- a/core/engine/src/builtins/bigint/mod.rs +++ b/core/engine/src/builtins/bigint/mod.rs @@ -41,7 +41,7 @@ impl IntrinsicObject for BigInt { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 3, 2) + BuiltInBuilder::from_standard_constructor::(realm) .method(Self::to_string, js_string!("toString"), 0) .method(Self::value_of, js_string!("valueOf"), 0) .static_method(Self::as_int_n, js_string!("asIntN"), 2) diff --git a/core/engine/src/builtins/boolean/mod.rs b/core/engine/src/builtins/boolean/mod.rs index b003d53f229..1d1b4076e49 100644 --- a/core/engine/src/builtins/boolean/mod.rs +++ b/core/engine/src/builtins/boolean/mod.rs @@ -34,7 +34,7 @@ impl IntrinsicObject for Boolean { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .method(Self::to_string, js_string!("toString"), 0) .method(Self::value_of, js_string!("valueOf"), 0) .build(); diff --git a/core/engine/src/builtins/builder.rs b/core/engine/src/builtins/builder.rs index 55615db8b10..7de7497114f 100644 --- a/core/engine/src/builtins/builder.rs +++ b/core/engine/src/builtins/builder.rs @@ -525,24 +525,28 @@ impl<'ctx> BuiltInBuilder<'ctx, OrdinaryObject> { impl<'ctx> BuiltInBuilder<'ctx, Callable> { /// Create a new builder for a constructor function setting the properties ahead of time for optimizations (less reallocations) - pub(crate) fn from_standard_constructor( + /// Const Generic `P` is the minimum storage capacity for the prototype's Property table. + /// Const Generic `SP` is the minimum storage capacity for the object's Static Property table. + pub(crate) fn from_standard_constructor< + SC: BuiltInConstructor, + const P: usize, + const SP: usize, + >( realm: &'ctx Realm, - // Sets the minimum storage capacity for the prototype's property table. - num_prototype_properties: usize, - // Sets the minimum storage capacity for the object's property table. - num_own_properties: usize, ) -> BuiltInConstructorWithPrototype<'ctx> { + // The number of properties that are always present in a standard constructor. See build method + const OWN_PROPS: usize = 3; let constructor = SC::STANDARD_CONSTRUCTOR(realm.intrinsics().constructors()); BuiltInConstructorWithPrototype { realm, function: SC::constructor, name: js_string!(SC::NAME), length: SC::LENGTH, - object_property_table: PropertyTableInner::with_capacity(num_own_properties), - object_storage: Vec::with_capacity(num_own_properties), + object_property_table: PropertyTableInner::with_capacity(SP + OWN_PROPS), + object_storage: Vec::with_capacity(SP + OWN_PROPS), object: constructor.constructor(), - prototype_property_table: PropertyTableInner::with_capacity(num_prototype_properties), - prototype_storage: Vec::with_capacity(num_prototype_properties), + prototype_property_table: PropertyTableInner::with_capacity(P), + prototype_storage: Vec::with_capacity(P), prototype: constructor.prototype(), __proto__: Some(realm.intrinsics().constructors().function().prototype()), inherits: Some(realm.intrinsics().constructors().object().prototype()), diff --git a/core/engine/src/builtins/dataview/mod.rs b/core/engine/src/builtins/dataview/mod.rs index ff4a853f0d2..2e3e00123a0 100644 --- a/core/engine/src/builtins/dataview/mod.rs +++ b/core/engine/src/builtins/dataview/mod.rs @@ -109,7 +109,7 @@ impl IntrinsicObject for DataView { .name(js_string!("get byteOffset")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 24, 0) + BuiltInBuilder::from_standard_constructor::(realm) .accessor( js_string!("buffer"), Some(get_buffer), diff --git a/core/engine/src/builtins/date/mod.rs b/core/engine/src/builtins/date/mod.rs index 5189f5deeb5..04d10784792 100644 --- a/core/engine/src/builtins/date/mod.rs +++ b/core/engine/src/builtins/date/mod.rs @@ -72,7 +72,7 @@ impl IntrinsicObject for Date { .length(1) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 47, 3) + BuiltInBuilder::from_standard_constructor::(realm) .static_method(Self::now, js_string!("now"), 0) .static_method(Self::parse, js_string!("parse"), 1) .static_method(Self::utc, js_string!("UTC"), 7) diff --git a/core/engine/src/builtins/error/aggregate.rs b/core/engine/src/builtins/error/aggregate.rs index 873c4b3c7de..9b711210429 100644 --- a/core/engine/src/builtins/error/aggregate.rs +++ b/core/engine/src/builtins/error/aggregate.rs @@ -33,7 +33,7 @@ impl IntrinsicObject for AggregateError { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().error().constructor()) .inherits(Some(realm.intrinsics().constructors().error().prototype())) .property(js_str!("name"), Self::NAME, attribute) diff --git a/core/engine/src/builtins/error/eval.rs b/core/engine/src/builtins/error/eval.rs index 8ab1636652e..663b6ab88b7 100644 --- a/core/engine/src/builtins/error/eval.rs +++ b/core/engine/src/builtins/error/eval.rs @@ -35,7 +35,7 @@ impl IntrinsicObject for EvalError { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().error().constructor()) .inherits(Some(realm.intrinsics().constructors().error().prototype())) .property(js_str!("name"), Self::NAME, attribute) diff --git a/core/engine/src/builtins/error/mod.rs b/core/engine/src/builtins/error/mod.rs index 8c197ef7aa5..b3fa7d4cb3e 100644 --- a/core/engine/src/builtins/error/mod.rs +++ b/core/engine/src/builtins/error/mod.rs @@ -136,7 +136,7 @@ impl IntrinsicObject for Error { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .property(js_string!("name"), Self::NAME, attribute) .property(js_string!("message"), js_string!(), attribute) .method(Self::to_string, js_string!("toString"), 0) diff --git a/core/engine/src/builtins/error/range.rs b/core/engine/src/builtins/error/range.rs index b646fc7271f..cb67bfc955c 100644 --- a/core/engine/src/builtins/error/range.rs +++ b/core/engine/src/builtins/error/range.rs @@ -33,7 +33,7 @@ impl IntrinsicObject for RangeError { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().error().constructor()) .inherits(Some(realm.intrinsics().constructors().error().prototype())) .property(js_str!("name"), Self::NAME, attribute) diff --git a/core/engine/src/builtins/error/reference.rs b/core/engine/src/builtins/error/reference.rs index b534c374da9..8c036fcad95 100644 --- a/core/engine/src/builtins/error/reference.rs +++ b/core/engine/src/builtins/error/reference.rs @@ -32,7 +32,7 @@ impl IntrinsicObject for ReferenceError { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().error().constructor()) .inherits(Some(realm.intrinsics().constructors().error().prototype())) .property(js_str!("name"), Self::NAME, attribute) diff --git a/core/engine/src/builtins/error/syntax.rs b/core/engine/src/builtins/error/syntax.rs index 3c4459bb2d0..aaebaf9c7e4 100644 --- a/core/engine/src/builtins/error/syntax.rs +++ b/core/engine/src/builtins/error/syntax.rs @@ -35,7 +35,7 @@ impl IntrinsicObject for SyntaxError { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().error().constructor()) .inherits(Some(realm.intrinsics().constructors().error().prototype())) .property(js_str!("name"), Self::NAME, attribute) diff --git a/core/engine/src/builtins/error/type.rs b/core/engine/src/builtins/error/type.rs index 976961cbe23..2261d32dc01 100644 --- a/core/engine/src/builtins/error/type.rs +++ b/core/engine/src/builtins/error/type.rs @@ -41,7 +41,7 @@ impl IntrinsicObject for TypeError { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().error().constructor()) .inherits(Some(realm.intrinsics().constructors().error().prototype())) .property(js_str!("name"), Self::NAME, attribute) diff --git a/core/engine/src/builtins/error/uri.rs b/core/engine/src/builtins/error/uri.rs index 2d38859dbcf..1bb88780def 100644 --- a/core/engine/src/builtins/error/uri.rs +++ b/core/engine/src/builtins/error/uri.rs @@ -34,7 +34,7 @@ impl IntrinsicObject for UriError { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); let attribute = Attribute::WRITABLE | Attribute::NON_ENUMERABLE | Attribute::CONFIGURABLE; - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .prototype(realm.intrinsics().constructors().error().constructor()) .inherits(Some(realm.intrinsics().constructors().error().prototype())) .property(js_str!("name"), Self::NAME, attribute) diff --git a/core/engine/src/builtins/function/mod.rs b/core/engine/src/builtins/function/mod.rs index 261ad1631d3..bc8eb0cb95d 100644 --- a/core/engine/src/builtins/function/mod.rs +++ b/core/engine/src/builtins/function/mod.rs @@ -317,7 +317,7 @@ impl IntrinsicObject for BuiltInFunctionObject { let throw_type_error = realm.intrinsics().objects().throw_type_error(); - BuiltInBuilder::from_standard_constructor::(realm, 7, 0) + BuiltInBuilder::from_standard_constructor::(realm) .method(Self::apply, js_string!("apply"), 2) .method(Self::bind, js_string!("bind"), 1) .method(Self::call, js_string!("call"), 1) diff --git a/core/engine/src/builtins/generator_function/mod.rs b/core/engine/src/builtins/generator_function/mod.rs index 8c4d7c1489b..252d163bdeb 100644 --- a/core/engine/src/builtins/generator_function/mod.rs +++ b/core/engine/src/builtins/generator_function/mod.rs @@ -33,7 +33,7 @@ impl IntrinsicObject for GeneratorFunction { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .inherits(Some( realm.intrinsics().constructors().function().prototype(), )) diff --git a/core/engine/src/builtins/intl/collator/mod.rs b/core/engine/src/builtins/intl/collator/mod.rs index bc27656ed30..cfea1339a3e 100644 --- a/core/engine/src/builtins/intl/collator/mod.rs +++ b/core/engine/src/builtins/intl/collator/mod.rs @@ -156,7 +156,7 @@ impl IntrinsicObject for Collator { .name(js_string!("get compare")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 3, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_method( Self::supported_locales_of, js_string!("supportedLocalesOf"), diff --git a/core/engine/src/builtins/intl/date_time_format.rs b/core/engine/src/builtins/intl/date_time_format.rs index 62c6b7e908c..bb5163755ae 100644 --- a/core/engine/src/builtins/intl/date_time_format.rs +++ b/core/engine/src/builtins/intl/date_time_format.rs @@ -68,7 +68,7 @@ impl IntrinsicObject for DateTimeFormat { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 0, 0).build(); + BuiltInBuilder::from_standard_constructor::(realm).build(); } fn get(intrinsics: &Intrinsics) -> JsObject { diff --git a/core/engine/src/builtins/intl/list_format/mod.rs b/core/engine/src/builtins/intl/list_format/mod.rs index 31630733692..d870c2e7a43 100644 --- a/core/engine/src/builtins/intl/list_format/mod.rs +++ b/core/engine/src/builtins/intl/list_format/mod.rs @@ -54,7 +54,7 @@ impl IntrinsicObject for ListFormat { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 4, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_method( Self::supported_locales_of, js_string!("supportedLocalesOf"), diff --git a/core/engine/src/builtins/intl/locale/mod.rs b/core/engine/src/builtins/intl/locale/mod.rs index e42b04e1ed7..6aa61ea1151 100644 --- a/core/engine/src/builtins/intl/locale/mod.rs +++ b/core/engine/src/builtins/intl/locale/mod.rs @@ -74,7 +74,7 @@ impl IntrinsicObject for Locale { .name(js_string!("get region")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 14, 0) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), js_string!("Intl.Locale"), diff --git a/core/engine/src/builtins/intl/number_format/mod.rs b/core/engine/src/builtins/intl/number_format/mod.rs index a8de6337e1e..228390659e4 100644 --- a/core/engine/src/builtins/intl/number_format/mod.rs +++ b/core/engine/src/builtins/intl/number_format/mod.rs @@ -141,7 +141,7 @@ impl IntrinsicObject for NumberFormat { .name(js_string!("get format")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 3, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_method( Self::supported_locales_of, js_string!("supportedLocalesOf"), diff --git a/core/engine/src/builtins/intl/plural_rules/mod.rs b/core/engine/src/builtins/intl/plural_rules/mod.rs index 19fccd4cb70..303a91d071e 100644 --- a/core/engine/src/builtins/intl/plural_rules/mod.rs +++ b/core/engine/src/builtins/intl/plural_rules/mod.rs @@ -55,7 +55,7 @@ impl IntrinsicObject for PluralRules { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 4, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_method( Self::supported_locales_of, js_string!("supportedLocalesOf"), diff --git a/core/engine/src/builtins/intl/segmenter/mod.rs b/core/engine/src/builtins/intl/segmenter/mod.rs index bac22f3367c..8835f2f35aa 100644 --- a/core/engine/src/builtins/intl/segmenter/mod.rs +++ b/core/engine/src/builtins/intl/segmenter/mod.rs @@ -92,7 +92,7 @@ impl IntrinsicObject for Segmenter { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 3, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_method( Self::supported_locales_of, js_string!("supportedLocalesOf"), diff --git a/core/engine/src/builtins/map/mod.rs b/core/engine/src/builtins/map/mod.rs index 5906d87b283..583aef109ec 100644 --- a/core/engine/src/builtins/map/mod.rs +++ b/core/engine/src/builtins/map/mod.rs @@ -55,7 +55,7 @@ impl IntrinsicObject for Map { .name(js_string!("entries")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 11, 2) + BuiltInBuilder::from_standard_constructor::(realm) .static_method(Self::group_by, js_string!("groupBy"), 2) .static_accessor( JsSymbol::species(), diff --git a/core/engine/src/builtins/number/mod.rs b/core/engine/src/builtins/number/mod.rs index ff633be9563..ac331c023fd 100644 --- a/core/engine/src/builtins/number/mod.rs +++ b/core/engine/src/builtins/number/mod.rs @@ -53,7 +53,7 @@ impl IntrinsicObject for Number { let attribute = Attribute::READONLY | Attribute::NON_ENUMERABLE | Attribute::PERMANENT; - BuiltInBuilder::from_standard_constructor::(realm, 6, 14) + BuiltInBuilder::from_standard_constructor::(realm) .static_property(js_string!("EPSILON"), f64::EPSILON, attribute) .static_property( js_string!("MAX_SAFE_INTEGER"), diff --git a/core/engine/src/builtins/object/mod.rs b/core/engine/src/builtins/object/mod.rs index bf2a62ddae6..b66fd7406bd 100644 --- a/core/engine/src/builtins/object/mod.rs +++ b/core/engine/src/builtins/object/mod.rs @@ -59,7 +59,7 @@ impl IntrinsicObject for OrdinaryObject { .name(js_string!("set __proto__")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 11, 23) + BuiltInBuilder::from_standard_constructor::(realm) .inherits(None) .accessor( js_string!("__proto__"), diff --git a/core/engine/src/builtins/promise/mod.rs b/core/engine/src/builtins/promise/mod.rs index 9cc85907982..c84aa243917 100644 --- a/core/engine/src/builtins/promise/mod.rs +++ b/core/engine/src/builtins/promise/mod.rs @@ -340,7 +340,7 @@ impl IntrinsicObject for Promise { .name(js_string!("get [Symbol.species]")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 4, 9) + BuiltInBuilder::from_standard_constructor::(realm) .static_method(Self::all, js_string!("all"), 1) .static_method(Self::all_settled, js_string!("allSettled"), 1) .static_method(Self::any, js_string!("any"), 1) diff --git a/core/engine/src/builtins/proxy/mod.rs b/core/engine/src/builtins/proxy/mod.rs index 68535c53fec..36572876352 100644 --- a/core/engine/src/builtins/proxy/mod.rs +++ b/core/engine/src/builtins/proxy/mod.rs @@ -90,7 +90,7 @@ impl IntrinsicObject for Proxy { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 0, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_method(Self::revocable, js_string!("revocable"), 2) .build_without_prototype(); } diff --git a/core/engine/src/builtins/regexp/mod.rs b/core/engine/src/builtins/regexp/mod.rs index 380d16e0a2e..764a065d8d9 100644 --- a/core/engine/src/builtins/regexp/mod.rs +++ b/core/engine/src/builtins/regexp/mod.rs @@ -88,7 +88,7 @@ impl IntrinsicObject for RegExp { let get_source = BuiltInBuilder::callable(realm, Self::get_source) .name(js_string!("get source")) .build(); - let regexp = BuiltInBuilder::from_standard_constructor::(realm, 19, 1) + let regexp = BuiltInBuilder::from_standard_constructor::(realm) .static_accessor( JsSymbol::species(), Some(get_species), diff --git a/core/engine/src/builtins/set/mod.rs b/core/engine/src/builtins/set/mod.rs index 590ec9d96e3..57e54b9b9d9 100644 --- a/core/engine/src/builtins/set/mod.rs +++ b/core/engine/src/builtins/set/mod.rs @@ -58,7 +58,7 @@ impl IntrinsicObject for Set { .name(js_string!("values")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 11, 1) + BuiltInBuilder::from_standard_constructor::(realm) .static_accessor( JsSymbol::species(), Some(get_species), diff --git a/core/engine/src/builtins/string/mod.rs b/core/engine/src/builtins/string/mod.rs index fcc0c4d786b..3118c4c743f 100644 --- a/core/engine/src/builtins/string/mod.rs +++ b/core/engine/src/builtins/string/mod.rs @@ -98,7 +98,7 @@ impl IntrinsicObject for String { let trim_right = trim_end.clone(); let attribute = Attribute::READONLY | Attribute::NON_ENUMERABLE | Attribute::PERMANENT; - let builder = BuiltInBuilder::from_standard_constructor::(realm, 36, 3) + let builder = BuiltInBuilder::from_standard_constructor::(realm) .property(js_string!("length"), 0, attribute) .property( js_string!("trimStart"), diff --git a/core/engine/src/builtins/symbol/mod.rs b/core/engine/src/builtins/symbol/mod.rs index 15d36d02846..27981519260 100644 --- a/core/engine/src/builtins/symbol/mod.rs +++ b/core/engine/src/builtins/symbol/mod.rs @@ -122,7 +122,7 @@ impl IntrinsicObject for Symbol { .name(js_string!("get description")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 5, 15) + BuiltInBuilder::from_standard_constructor::(realm) .static_method(Self::for_, js_string!("for"), 1) .static_method(Self::key_for, js_string!("keyFor"), 1) .static_property( diff --git a/core/engine/src/builtins/temporal/duration/mod.rs b/core/engine/src/builtins/temporal/duration/mod.rs index fe857a4ce3b..427001acd07 100644 --- a/core/engine/src/builtins/temporal/duration/mod.rs +++ b/core/engine/src/builtins/temporal/duration/mod.rs @@ -103,7 +103,7 @@ impl IntrinsicObject for Duration { .name(js_string!("get blank")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 22, 1) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::DURATION_TAG, diff --git a/core/engine/src/builtins/temporal/instant/mod.rs b/core/engine/src/builtins/temporal/instant/mod.rs index 315708e1a70..7f708727f2f 100644 --- a/core/engine/src/builtins/temporal/instant/mod.rs +++ b/core/engine/src/builtins/temporal/instant/mod.rs @@ -63,7 +63,7 @@ impl IntrinsicObject for Instant { .name(js_string!("get epochNanoseconds")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 13, 4) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::INSTANT_TAG, diff --git a/core/engine/src/builtins/temporal/plain_date/mod.rs b/core/engine/src/builtins/temporal/plain_date/mod.rs index d63e9fdc284..2e05481a703 100644 --- a/core/engine/src/builtins/temporal/plain_date/mod.rs +++ b/core/engine/src/builtins/temporal/plain_date/mod.rs @@ -123,7 +123,7 @@ impl IntrinsicObject for PlainDate { .name(js_string!("get inLeapYear")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 26, 2) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::PLAIN_DATE_TAG, diff --git a/core/engine/src/builtins/temporal/plain_date_time/mod.rs b/core/engine/src/builtins/temporal/plain_date_time/mod.rs index d038f500d4f..50fbe9df5c7 100644 --- a/core/engine/src/builtins/temporal/plain_date_time/mod.rs +++ b/core/engine/src/builtins/temporal/plain_date_time/mod.rs @@ -155,7 +155,7 @@ impl IntrinsicObject for PlainDateTime { .name(js_string!("get inLeapYear")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 29, 2) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::PLAIN_DATETIME_TAG, diff --git a/core/engine/src/builtins/temporal/plain_month_day/mod.rs b/core/engine/src/builtins/temporal/plain_month_day/mod.rs index 14a3fce2c75..f73336a857e 100644 --- a/core/engine/src/builtins/temporal/plain_month_day/mod.rs +++ b/core/engine/src/builtins/temporal/plain_month_day/mod.rs @@ -149,7 +149,7 @@ impl IntrinsicObject for PlainMonthDay { .name(js_string!("get calendarId")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 5, 1) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::PLAIN_MD_TAG, diff --git a/core/engine/src/builtins/temporal/plain_time/mod.rs b/core/engine/src/builtins/temporal/plain_time/mod.rs index 1ecb5bfbb99..2977791670f 100644 --- a/core/engine/src/builtins/temporal/plain_time/mod.rs +++ b/core/engine/src/builtins/temporal/plain_time/mod.rs @@ -66,7 +66,7 @@ impl IntrinsicObject for PlainTime { .name(js_string!("get nanosecond")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 15, 2) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::PLAIN_TIME_TAG, diff --git a/core/engine/src/builtins/temporal/plain_year_month/mod.rs b/core/engine/src/builtins/temporal/plain_year_month/mod.rs index 9a2c0a21595..76c57877f30 100644 --- a/core/engine/src/builtins/temporal/plain_year_month/mod.rs +++ b/core/engine/src/builtins/temporal/plain_year_month/mod.rs @@ -95,7 +95,7 @@ impl IntrinsicObject for PlainYearMonth { .name(js_string!("get inLeapYear")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 16, 1) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::PLAIN_YM_TAG, diff --git a/core/engine/src/builtins/temporal/zoned_date_time/mod.rs b/core/engine/src/builtins/temporal/zoned_date_time/mod.rs index 2f803a331a6..387ebef4a30 100644 --- a/core/engine/src/builtins/temporal/zoned_date_time/mod.rs +++ b/core/engine/src/builtins/temporal/zoned_date_time/mod.rs @@ -26,7 +26,7 @@ impl IntrinsicObject for ZonedDateTime { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 1, 0) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), StaticJsStrings::ZONED_DT_TAG, diff --git a/core/engine/src/builtins/typed_array/builtin.rs b/core/engine/src/builtins/typed_array/builtin.rs index abc61430e29..aeabd370cbc 100644 --- a/core/engine/src/builtins/typed_array/builtin.rs +++ b/core/engine/src/builtins/typed_array/builtin.rs @@ -66,7 +66,7 @@ impl IntrinsicObject for BuiltinTypedArray { .length(0) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 37, 3) + BuiltInBuilder::from_standard_constructor::(realm) .static_accessor( JsSymbol::species(), Some(get_species), diff --git a/core/engine/src/builtins/typed_array/mod.rs b/core/engine/src/builtins/typed_array/mod.rs index 0087dc29a6d..b59431718fc 100644 --- a/core/engine/src/builtins/typed_array/mod.rs +++ b/core/engine/src/builtins/typed_array/mod.rs @@ -57,7 +57,7 @@ impl IntrinsicObject for T { .name(js_string!("get [Symbol.species]")) .build(); - BuiltInBuilder::from_standard_constructor::(realm, 1, 2) + BuiltInBuilder::from_standard_constructor::(realm) .prototype( realm .intrinsics() diff --git a/core/engine/src/builtins/weak/weak_ref.rs b/core/engine/src/builtins/weak/weak_ref.rs index feebc7f497a..3756e4e7dd7 100644 --- a/core/engine/src/builtins/weak/weak_ref.rs +++ b/core/engine/src/builtins/weak/weak_ref.rs @@ -33,7 +33,7 @@ impl IntrinsicObject for WeakRef { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 2, 0) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), js_string!("WeakRef"), diff --git a/core/engine/src/builtins/weak_map/mod.rs b/core/engine/src/builtins/weak_map/mod.rs index 357f2b8ba29..88abbf2f6b0 100644 --- a/core/engine/src/builtins/weak_map/mod.rs +++ b/core/engine/src/builtins/weak_map/mod.rs @@ -37,7 +37,7 @@ impl IntrinsicObject for WeakMap { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 5, 0) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), Self::NAME, diff --git a/core/engine/src/builtins/weak_set/mod.rs b/core/engine/src/builtins/weak_set/mod.rs index 55693e19ccd..6da800d5bd4 100644 --- a/core/engine/src/builtins/weak_set/mod.rs +++ b/core/engine/src/builtins/weak_set/mod.rs @@ -34,7 +34,7 @@ impl IntrinsicObject for WeakSet { fn init(realm: &Realm) { let _timer = Profiler::global().start_event(std::any::type_name::(), "init"); - BuiltInBuilder::from_standard_constructor::(realm, 4, 0) + BuiltInBuilder::from_standard_constructor::(realm) .property( JsSymbol::to_string_tag(), Self::NAME, diff --git a/core/engine/src/object/shape/property_table.rs b/core/engine/src/object/shape/property_table.rs index 93ad46ba3fa..9aaa8f72dd1 100644 --- a/core/engine/src/object/shape/property_table.rs +++ b/core/engine/src/object/shape/property_table.rs @@ -80,6 +80,13 @@ pub(crate) struct PropertyTable { } impl PropertyTable { + /// Creates a new `PropertyTable` with the specified capacity. + pub(crate) fn with_capacity(capacity: usize) -> Self { + Self { + inner: Rc::new(RefCell::new(PropertyTableInner::with_capacity(capacity))), + } + } + /// Returns the inner representation of a [`PropertyTable`]. pub(super) fn inner(&self) -> &RefCell { &self.inner diff --git a/core/engine/src/object/shape/shared_shape/mod.rs b/core/engine/src/object/shape/shared_shape/mod.rs index b27b5f62005..333aa07c6d4 100644 --- a/core/engine/src/object/shape/shared_shape/mod.rs +++ b/core/engine/src/object/shape/shared_shape/mod.rs @@ -186,7 +186,7 @@ impl SharedShape { forward_transitions: ForwardTransition::default(), prototype: None, property_count: 0, - property_table: PropertyTable::default(), + property_table: PropertyTable::with_capacity(4), previous: None, flags: ShapeFlags::default(), transition_count: 0,