diff options
Diffstat (limited to 'Userland/Libraries/LibJS/Runtime/Intl')
31 files changed, 123 insertions, 68 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp index de552b5f7e..595c8686f9 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/AbstractOperations.cpp @@ -186,6 +186,7 @@ bool is_well_formed_unit_identifier(StringView unit_identifier) ThrowCompletionOr<Vector<String>> canonicalize_locale_list(GlobalObject& global_object, Value locales) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. If locales is undefined, then if (locales.is_undefined()) { @@ -200,7 +201,7 @@ ThrowCompletionOr<Vector<String>> canonicalize_locale_list(GlobalObject& global_ // 3. If Type(locales) is String or Type(locales) is Object and locales has an [[InitializedLocale]] internal slot, then if (locales.is_string() || (locales.is_object() && is<Locale>(locales.as_object()))) { // a. Let O be CreateArrayFromList(« locales »). - object = Array::create_from(global_object, { locales }); + object = Array::create_from(realm, { locales }); } // 4. Else, else { @@ -568,6 +569,7 @@ Vector<String> best_fit_supported_locales(Vector<String> const& requested_locale ThrowCompletionOr<Array*> supported_locales(GlobalObject& global_object, Vector<String> const& requested_locales, Value options) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Set options to ? CoerceOptionsToObject(options). auto* options_object = TRY(coerce_options_to_object(global_object, options)); @@ -589,16 +591,18 @@ ThrowCompletionOr<Array*> supported_locales(GlobalObject& global_object, Vector< } // 5. Return CreateArrayFromList(supportedLocales). - return Array::create_from<String>(global_object, supported_locales, [&vm](auto& locale) { return js_string(vm, locale); }); + return Array::create_from<String>(realm, supported_locales, [&vm](auto& locale) { return js_string(vm, locale); }); } // 9.2.12 CoerceOptionsToObject ( options ), https://tc39.es/ecma402/#sec-coerceoptionstoobject ThrowCompletionOr<Object*> coerce_options_to_object(GlobalObject& global_object, Value options) { + auto& realm = *global_object.associated_realm(); + // 1. If options is undefined, then if (options.is_undefined()) { // a. Return OrdinaryObjectCreate(null). - return Object::create(global_object, nullptr); + return Object::create(realm, nullptr); } // 2. Return ? ToObject(options). diff --git a/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.cpp b/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.cpp index fa945f3034..0c77d01bf4 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.cpp @@ -11,10 +11,9 @@ namespace JS::Intl { -CollatorCompareFunction* CollatorCompareFunction::create(GlobalObject& global_object, Collator& collator) +CollatorCompareFunction* CollatorCompareFunction::create(Realm& realm, Collator& collator) { - auto& realm = *global_object.associated_realm(); - return global_object.heap().allocate<CollatorCompareFunction>(global_object, realm, collator); + return realm.heap().allocate<CollatorCompareFunction>(realm.global_object(), realm, collator); } CollatorCompareFunction::CollatorCompareFunction(Realm& realm, Collator& collator) diff --git a/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.h b/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.h index 98a39b7a91..0bab632a37 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/CollatorCompareFunction.h @@ -14,7 +14,7 @@ class CollatorCompareFunction : public NativeFunction { JS_OBJECT(CollatorCompareFunction, NativeFunction); public: - static CollatorCompareFunction* create(GlobalObject&, Collator&); + static CollatorCompareFunction* create(Realm&, Collator&); CollatorCompareFunction(Realm&, Collator&); virtual void initialize(Realm&) override; diff --git a/Userland/Libraries/LibJS/Runtime/Intl/CollatorPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/CollatorPrototype.cpp index 4d575a3378..499269b1af 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/CollatorPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/CollatorPrototype.cpp @@ -34,6 +34,8 @@ void CollatorPrototype::initialize(Realm& realm) // 10.3.3 get Intl.Collator.prototype.compare, https://tc39.es/ecma402/#sec-intl.collator.prototype.compare JS_DEFINE_NATIVE_FUNCTION(CollatorPrototype::compare_getter) { + auto& realm = *global_object.associated_realm(); + // 1. Let collator be the this value. // 2. Perform ? RequireInternalSlot(collator, [[InitializedCollator]]). auto* collator = TRY(typed_this_object(global_object)); @@ -42,7 +44,7 @@ JS_DEFINE_NATIVE_FUNCTION(CollatorPrototype::compare_getter) if (!collator->bound_compare()) { // a. Let F be a new built-in function object as defined in 10.3.3.1. // b. Set F.[[Collator]] to collator. - auto* function = CollatorCompareFunction::create(global_object, *collator); + auto* function = CollatorCompareFunction::create(realm, *collator); // c. Set collator.[[BoundCompare]] to F. collator->set_bound_compare(function); @@ -55,12 +57,14 @@ JS_DEFINE_NATIVE_FUNCTION(CollatorPrototype::compare_getter) // 10.3.4 Intl.Collator.prototype.resolvedOptions ( ), https://tc39.es/ecma402/#sec-intl.collator.prototype.resolvedoptions JS_DEFINE_NATIVE_FUNCTION(CollatorPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let collator be the this value. // 2. Perform ? RequireInternalSlot(collator, [[InitializedCollator]]). auto* collator = TRY(typed_this_object(global_object)); // 3. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 4. For each row of Table 3, except the header row, in table order, do // a. Let p be the Property value of the current row. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp index 20a17cafb6..0d4b0cd844 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp @@ -67,6 +67,7 @@ StringView DateTimeFormat::style_to_string(Style style) ThrowCompletionOr<Object*> to_date_time_options(GlobalObject& global_object, Value options_value, OptionRequired required, OptionDefaults defaults) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. If options is undefined, let options be null; otherwise let options be ? ToObject(options). Object* options = nullptr; @@ -74,7 +75,7 @@ ThrowCompletionOr<Object*> to_date_time_options(GlobalObject& global_object, Val options = TRY(options_value.to_object(global_object)); // 2. Let options be OrdinaryObjectCreate(options). - options = Object::create(global_object, options); + options = Object::create(realm, options); // 3. Let needDefaults be true. bool needs_defaults = true; @@ -532,6 +533,7 @@ static Optional<StringView> resolve_day_period(StringView locale, StringView cal ThrowCompletionOr<Vector<PatternPartition>> format_date_time_pattern(GlobalObject& global_object, DateTimeFormat& date_time_format, Vector<PatternPartition> pattern_parts, double time, Unicode::CalendarPattern const* range_format_options) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let x be TimeClip(x). time = time_clip(time); @@ -550,7 +552,7 @@ ThrowCompletionOr<Vector<PatternPartition>> format_date_time_pattern(GlobalObjec }; // 4. Let nfOptions be OrdinaryObjectCreate(null). - auto* number_format_options = Object::create(global_object, nullptr); + auto* number_format_options = Object::create(realm, nullptr); // 5. Perform ! CreateDataPropertyOrThrow(nfOptions, "useGrouping", false). MUST(number_format_options->create_data_property_or_throw(vm.names.useGrouping, Value(false))); @@ -559,7 +561,7 @@ ThrowCompletionOr<Vector<PatternPartition>> format_date_time_pattern(GlobalObjec auto* number_format = TRY(construct_number_format(number_format_options)); // 7. Let nf2Options be OrdinaryObjectCreate(null). - auto* number_format_options2 = Object::create(global_object, nullptr); + auto* number_format_options2 = Object::create(realm, nullptr); // 8. Perform ! CreateDataPropertyOrThrow(nf2Options, "minimumIntegerDigits", 2). MUST(number_format_options2->create_data_property_or_throw(vm.names.minimumIntegerDigits, Value(2))); @@ -579,7 +581,7 @@ ThrowCompletionOr<Vector<PatternPartition>> format_date_time_pattern(GlobalObjec fractional_second_digits = date_time_format.fractional_second_digits(); // a. Let nf3Options be OrdinaryObjectCreate(null). - auto* number_format_options3 = Object::create(global_object, nullptr); + auto* number_format_options3 = Object::create(realm, nullptr); // b. Perform ! CreateDataPropertyOrThrow(nf3Options, "minimumIntegerDigits", fractionalSecondDigits). MUST(number_format_options3->create_data_property_or_throw(vm.names.minimumIntegerDigits, Value(*fractional_second_digits))); @@ -848,12 +850,13 @@ ThrowCompletionOr<String> format_date_time(GlobalObject& global_object, DateTime ThrowCompletionOr<Array*> format_date_time_to_parts(GlobalObject& global_object, DateTimeFormat& date_time_format, double time) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let parts be ? PartitionDateTimePattern(dateTimeFormat, x). auto parts = TRY(partition_date_time_pattern(global_object, date_time_format, time)); // 2. Let result be ! ArrayCreate(0). - auto* result = MUST(Array::create(global_object, 0)); + auto* result = MUST(Array::create(realm, 0)); // 3. Let n be 0. size_t n = 0; @@ -861,7 +864,7 @@ ThrowCompletionOr<Array*> format_date_time_to_parts(GlobalObject& global_object, // 4. For each Record { [[Type]], [[Value]] } part in parts, do for (auto& part : parts) { // a. Let O be OrdinaryObjectCreate(%Object.prototype%). - auto* object = Object::create(global_object, global_object.object_prototype()); + auto* object = Object::create(realm, global_object.object_prototype()); // b. Perform ! CreateDataPropertyOrThrow(O, "type", part.[[Type]]). MUST(object->create_data_property_or_throw(vm.names.type, js_string(vm, part.type))); @@ -1164,12 +1167,13 @@ ThrowCompletionOr<String> format_date_time_range(GlobalObject& global_object, Da ThrowCompletionOr<Array*> format_date_time_range_to_parts(GlobalObject& global_object, DateTimeFormat& date_time_format, double start, double end) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let parts be ? PartitionDateTimeRangePattern(dateTimeFormat, x, y). auto parts = TRY(partition_date_time_range_pattern(global_object, date_time_format, start, end)); // 2. Let result be ! ArrayCreate(0). - auto* result = MUST(Array::create(global_object, 0)); + auto* result = MUST(Array::create(realm, 0)); // 3. Let n be 0. size_t n = 0; @@ -1177,7 +1181,7 @@ ThrowCompletionOr<Array*> format_date_time_range_to_parts(GlobalObject& global_o // 4. For each Record { [[Type]], [[Value]], [[Source]] } part in parts, do for (auto& part : parts) { // a. Let O be OrdinaryObjectCreate(%ObjectPrototype%). - auto* object = Object::create(global_object, global_object.object_prototype()); + auto* object = Object::create(realm, global_object.object_prototype()); // b. Perform ! CreateDataPropertyOrThrow(O, "type", part.[[Type]]). MUST(object->create_data_property_or_throw(vm.names.type, js_string(vm, part.type))); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.cpp index 1d285b1844..d78d110f5e 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.cpp @@ -14,9 +14,9 @@ namespace JS::Intl { // 11.5.5 DateTime Format Functions, https://tc39.es/ecma402/#sec-datetime-format-functions -DateTimeFormatFunction* DateTimeFormatFunction::create(GlobalObject& global_object, DateTimeFormat& date_time_format) +DateTimeFormatFunction* DateTimeFormatFunction::create(Realm& realm, DateTimeFormat& date_time_format) { - return global_object.heap().allocate<DateTimeFormatFunction>(global_object, date_time_format, *global_object.function_prototype()); + return realm.heap().allocate<DateTimeFormatFunction>(realm.global_object(), date_time_format, *realm.global_object().function_prototype()); } DateTimeFormatFunction::DateTimeFormatFunction(DateTimeFormat& date_time_format, Object& prototype) diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.h b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.h index ab7f4be5ef..ece66beeec 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatFunction.h @@ -16,7 +16,7 @@ class DateTimeFormatFunction final : public NativeFunction { JS_OBJECT(DateTimeFormatFunction, NativeFunction); public: - static DateTimeFormatFunction* create(GlobalObject&, DateTimeFormat&); + static DateTimeFormatFunction* create(Realm&, DateTimeFormat&); explicit DateTimeFormatFunction(DateTimeFormat&, Object& prototype); virtual ~DateTimeFormatFunction() override = default; diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatPrototype.cpp index 6e1e3e14e1..afd5ab026f 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormatPrototype.cpp @@ -40,6 +40,8 @@ void DateTimeFormatPrototype::initialize(Realm& realm) // 11.3.3 get Intl.DateTimeFormat.prototype.format, https://tc39.es/ecma402/#sec-intl.datetimeformat.prototype.format JS_DEFINE_NATIVE_FUNCTION(DateTimeFormatPrototype::format) { + auto& realm = *global_object.associated_realm(); + // 1. Let dtf be the this value. // 2. If the implementation supports the normative optional constructor mode of 4.3 Note 1, then // a. Set dtf to ? UnwrapDateTimeFormat(dtf). @@ -50,7 +52,7 @@ JS_DEFINE_NATIVE_FUNCTION(DateTimeFormatPrototype::format) if (!date_time_format->bound_format()) { // a. Let F be a new built-in function object as defined in DateTime Format Functions (11.1.6). // b. Set F.[[DateTimeFormat]] to dtf. - auto* bound_format = DateTimeFormatFunction::create(global_object, *date_time_format); + auto* bound_format = DateTimeFormatFunction::create(realm, *date_time_format); // c. Set dtf.[[BoundFormat]] to F. date_time_format->set_bound_format(bound_format); @@ -142,6 +144,8 @@ JS_DEFINE_NATIVE_FUNCTION(DateTimeFormatPrototype::format_range_to_parts) // 11.3.7 Intl.DateTimeFormat.prototype.resolvedOptions ( ), https://tc39.es/ecma402/#sec-intl.datetimeformat.prototype.resolvedoptions JS_DEFINE_NATIVE_FUNCTION(DateTimeFormatPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let dtf be the this value. // 2. If the implementation supports the normative optional constructor mode of 4.3 Note 1, then // a. Set dtf to ? UnwrapDateTimeFormat(dtf). @@ -149,7 +153,7 @@ JS_DEFINE_NATIVE_FUNCTION(DateTimeFormatPrototype::resolved_options) auto* date_time_format = TRY(typed_this_object(global_object)); // 4. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 5. For each row of Table 5, except the header row, in table order, do // a. Let p be the Property value of the current row. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DisplayNamesPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DisplayNamesPrototype.cpp index 2db9146d7c..b845cf9cfd 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DisplayNamesPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DisplayNamesPrototype.cpp @@ -124,12 +124,14 @@ JS_DEFINE_NATIVE_FUNCTION(DisplayNamesPrototype::of) // 12.3.4 Intl.DisplayNames.prototype.resolvedOptions ( ), https://tc39.es/ecma402/#sec-Intl.DisplayNames.prototype.resolvedOptions JS_DEFINE_NATIVE_FUNCTION(DisplayNamesPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let displayNames be this value. // 2. Perform ? RequireInternalSlot(displayNames, [[InitializedDisplayNames]]). auto* display_names = TRY(typed_this_object(global_object)); // 3. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 4. For each row of Table 8, except the header row, in table order, do // a. Let p be the Property value of the current row. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DurationFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DurationFormat.cpp index 7cfa919050..d552a28b39 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DurationFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DurationFormat.cpp @@ -311,6 +311,7 @@ static String convert_number_format_pattern_to_duration_format_template(Unicode: ThrowCompletionOr<Vector<PatternPartition>> partition_duration_format_pattern(GlobalObject& global_object, DurationFormat const& duration_format, Temporal::DurationRecord const& duration) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let result be a new empty List. Vector<PatternPartition> result; @@ -349,7 +350,7 @@ ThrowCompletionOr<Vector<PatternPartition>> partition_duration_format_pattern(Gl } // h. Let nfOpts be ! OrdinaryObjectCreate(null). - auto* number_format_options = Object::create(global_object, nullptr); + auto* number_format_options = Object::create(realm, nullptr); // i. Let value be 0. auto value = Value(0); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/DurationFormatPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/DurationFormatPrototype.cpp index 917504ca48..9c180474a3 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/DurationFormatPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/DurationFormatPrototype.cpp @@ -64,6 +64,8 @@ JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::format) // 1.4.4 Intl.DurationFormat.prototype.formatToParts ( duration ), https://tc39.es/proposal-intl-duration-format/#sec-Intl.DurationFormat.prototype.formatToParts JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::format_to_parts) { + auto& realm = *global_object.associated_realm(); + // 1. Let df be this value. // 2. Perform ? RequireInternalSlot(df, [[InitializedDurationFormat]]). auto* duration_format = TRY(typed_this_object(global_object)); @@ -79,7 +81,7 @@ JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::format_to_parts) auto formatted = TRY(partition_duration_format_pattern(global_object, *duration_format, record)); // 6. Let result be ! ArrayCreate(0). - auto* result = MUST(Array::create(global_object, 0)); + auto* result = MUST(Array::create(realm, 0)); // 7. Let n be 0. // 8. For each element part in formatted, in List order, do @@ -87,7 +89,7 @@ JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::format_to_parts) auto const& part = formatted[n]; // a. Let obj be ! OrdinaryObjectCreate(%ObjectPrototype%). - auto* object = Object::create(global_object, global_object.object_prototype()); + auto* object = Object::create(realm, global_object.object_prototype()); // b. Perform ! CreateDataPropertyOrThrow(obj, "type", part.[[Type]]). MUST(object->create_data_property_or_throw(vm.names.type, js_string(vm, part.type))); @@ -108,12 +110,14 @@ JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::format_to_parts) // 1.4.5 Intl.DurationFormat.prototype.resolvedOptions ( ), https://tc39.es/proposal-intl-duration-format/#sec-Intl.DurationFormat.prototype.resolvedOptions JS_DEFINE_NATIVE_FUNCTION(DurationFormatPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let df be the this value. // 2. Perform ? RequireInternalSlot(df, [[InitializedDurationFormat]]). auto* duration_format = TRY(typed_this_object(global_object)); // 3. Let options be ! OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 4. For each row of Table 2, except the header row, in table order, do // a. Let p be the Property value of the current row. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/Intl.cpp b/Userland/Libraries/LibJS/Runtime/Intl/Intl.cpp index fd10e5f021..8e829afbb6 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/Intl.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/Intl.cpp @@ -61,6 +61,8 @@ void Intl::initialize(Realm& realm) // 8.3.1 Intl.getCanonicalLocales ( locales ), https://tc39.es/ecma402/#sec-intl.getcanonicallocales JS_DEFINE_NATIVE_FUNCTION(Intl::get_canonical_locales) { + auto& realm = *global_object.associated_realm(); + auto locales = vm.argument(0); // 1. Let ll be ? CanonicalizeLocaleList(locales). @@ -72,7 +74,7 @@ JS_DEFINE_NATIVE_FUNCTION(Intl::get_canonical_locales) marked_locale_list.append(js_string(vm, move(locale))); // 2. Return CreateArrayFromList(ll). - return Array::create_from(global_object, marked_locale_list); + return Array::create_from(realm, marked_locale_list); } // 1.4.4 AvailableTimeZones (), https://tc39.es/proposal-intl-enumeration/#sec-availablecurrencies @@ -107,6 +109,8 @@ static Vector<StringView> available_time_zones() // 2.2.2 Intl.supportedValuesOf ( key ), https://tc39.es/proposal-intl-enumeration/#sec-intl.supportedvaluesof JS_DEFINE_NATIVE_FUNCTION(Intl::supported_values_of) { + auto& realm = *global_object.associated_realm(); + // 1. Let key be ? ToString(key). auto key = TRY(vm.argument(0).to_string(global_object)); @@ -151,7 +155,7 @@ JS_DEFINE_NATIVE_FUNCTION(Intl::supported_values_of) } // 9. Return CreateArrayFromList( list ). - return Array::create_from<StringView>(global_object, list, [&](auto value) { return js_string(vm, value); }); + return Array::create_from<StringView>(realm, list, [&](auto value) { return js_string(vm, value); }); } } diff --git a/Userland/Libraries/LibJS/Runtime/Intl/ListFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/ListFormat.cpp index 794e703eca..48991142c2 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/ListFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/ListFormat.cpp @@ -204,12 +204,13 @@ String format_list(ListFormat const& list_format, Vector<String> const& list) Array* format_list_to_parts(GlobalObject& global_object, ListFormat const& list_format, Vector<String> const& list) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let parts be ! CreatePartsFromList(listFormat, list). auto parts = create_parts_from_list(list_format, list); // 2. Let result be ! ArrayCreate(0). - auto* result = MUST(Array::create(global_object, 0)); + auto* result = MUST(Array::create(realm, 0)); // 3. Let n be 0. size_t n = 0; @@ -217,7 +218,7 @@ Array* format_list_to_parts(GlobalObject& global_object, ListFormat const& list_ // 4. For each Record { [[Type]], [[Value]] } part in parts, do for (auto& part : parts) { // a. Let O be OrdinaryObjectCreate(%Object.prototype%). - auto* object = Object::create(global_object, global_object.object_prototype()); + auto* object = Object::create(realm, global_object.object_prototype()); // b. Perform ! CreateDataPropertyOrThrow(O, "type", part.[[Type]]). MUST(object->create_data_property_or_throw(vm.names.type, js_string(vm, part.type))); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/ListFormatPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/ListFormatPrototype.cpp index e6776a6486..c08abda4ac 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/ListFormatPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/ListFormatPrototype.cpp @@ -69,12 +69,14 @@ JS_DEFINE_NATIVE_FUNCTION(ListFormatPrototype::format_to_parts) // 13.3.5 Intl.ListFormat.prototype.resolvedOptions ( ), https://tc39.es/ecma402/#sec-Intl.ListFormat.prototype.resolvedoptions JS_DEFINE_NATIVE_FUNCTION(ListFormatPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let lf be the this value. // 2. Perform ? RequireInternalSlot(lf, [[InitializedListFormat]]). auto* list_format = TRY(typed_this_object(global_object)); // 3. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 4. For each row of Table 10, except the header row, in table order, do // a. Let p be the Property value of the current row. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp b/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp index 1d26a62edd..d5bb9c6e6b 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/Locale.cpp @@ -14,9 +14,9 @@ namespace JS::Intl { -Locale* Locale::create(GlobalObject& global_object, Unicode::LocaleID const& locale_id) +Locale* Locale::create(Realm& realm, Unicode::LocaleID const& locale_id) { - return global_object.heap().allocate<Locale>(global_object, locale_id, *global_object.intl_locale_prototype()); + return realm.heap().allocate<Locale>(realm.global_object(), locale_id, *realm.global_object().intl_locale_prototype()); } // 14 Locale Objects, https://tc39.es/ecma402/#locale-objects @@ -58,6 +58,7 @@ Locale::Locale(Unicode::LocaleID const& locale_id, Object& prototype) static Array* create_array_from_list_or_restricted(GlobalObject& global_object, Vector<StringView> list, Optional<String> restricted) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. If restricted is not undefined, then if (restricted.has_value()) { @@ -66,7 +67,7 @@ static Array* create_array_from_list_or_restricted(GlobalObject& global_object, } // 2. Return ! CreateArrayFromList( list ). - return Array::create_from<StringView>(global_object, list, [&vm](auto value) { + return Array::create_from<StringView>(realm, list, [&vm](auto value) { return js_string(vm, value); }); } @@ -152,6 +153,7 @@ Array* numbering_systems_of_locale(GlobalObject& global_object, Locale const& lo Array* time_zones_of_locale(GlobalObject& global_object, StringView region) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let locale be loc.[[Locale]]. // 2. Assert: locale matches the unicode_locale_id production. @@ -162,7 +164,7 @@ Array* time_zones_of_locale(GlobalObject& global_object, StringView region) quick_sort(list); // 5. Return ! CreateArrayFromList( list ). - return Array::create_from<StringView>(global_object, list, [&vm](auto value) { + return Array::create_from<StringView>(realm, list, [&vm](auto value) { return js_string(vm, value); }); } diff --git a/Userland/Libraries/LibJS/Runtime/Intl/Locale.h b/Userland/Libraries/LibJS/Runtime/Intl/Locale.h index 70017ae1ce..32d230e439 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/Locale.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/Locale.h @@ -21,7 +21,7 @@ class Locale final : public Object { JS_OBJECT(Locale, Object); public: - static Locale* create(GlobalObject&, Unicode::LocaleID const&); + static Locale* create(Realm&, Unicode::LocaleID const&); static constexpr auto relevant_extension_keys() { diff --git a/Userland/Libraries/LibJS/Runtime/Intl/LocalePrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/LocalePrototype.cpp index da3420463b..8686c4141b 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/LocalePrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/LocalePrototype.cpp @@ -55,6 +55,8 @@ void LocalePrototype::initialize(Realm& realm) // 14.3.3 Intl.Locale.prototype.maximize ( ), https://tc39.es/ecma402/#sec-Intl.Locale.prototype.maximize JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::maximize) { + auto& realm = *global_object.associated_realm(); + // 1. Let loc be the this value. // 2. Perform ? RequireInternalSlot(loc, [[InitializedLocale]]). auto* locale_object = TRY(typed_this_object(global_object)); @@ -67,12 +69,14 @@ JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::maximize) locale->language_id = maximal.release_value(); // 4. Return ! Construct(%Locale%, maximal). - return Locale::create(global_object, *locale); + return Locale::create(realm, *locale); } // 14.3.4 Intl.Locale.prototype.minimize ( ), https://tc39.es/ecma402/#sec-Intl.Locale.prototype.minimize JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::minimize) { + auto& realm = *global_object.associated_realm(); + // 1. Let loc be the this value. // 2. Perform ? RequireInternalSlot(loc, [[InitializedLocale]]). auto* locale_object = TRY(typed_this_object(global_object)); @@ -85,7 +89,7 @@ JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::minimize) locale->language_id = minimal.release_value(); // 4. Return ! Construct(%Locale%, minimal). - return Locale::create(global_object, *locale); + return Locale::create(realm, *locale); } // 14.3.5 Intl.Locale.prototype.toString ( ), https://tc39.es/ecma402/#sec-Intl.Locale.prototype.toString @@ -247,12 +251,14 @@ JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::time_zones) // 1.4.21 get Intl.Locale.prototype.textInfo, https://tc39.es/proposal-intl-locale-info/#sec-Intl.Locale.prototype.textInfo JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::text_info) { + auto& realm = *global_object.associated_realm(); + // 1. Let loc be the this value. // 2. Perform ? RequireInternalSlot(loc, [[InitializedLocale]]). auto* locale_object = TRY(typed_this_object(global_object)); // 3. Let info be ! ObjectCreate(%Object.prototype%). - auto* info = Object::create(global_object, global_object.object_prototype()); + auto* info = Object::create(realm, global_object.object_prototype()); // 4. Let dir be ! CharacterDirectionOfLocale(loc). auto direction = character_direction_of_locale(*locale_object); @@ -267,18 +273,20 @@ JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::text_info) // 1.4.22 get Intl.Locale.prototype.weekInfo, https://tc39.es/proposal-intl-locale-info/#sec-Intl.Locale.prototype.weekInfo JS_DEFINE_NATIVE_FUNCTION(LocalePrototype::week_info) { + auto& realm = *global_object.associated_realm(); + // 1. Let loc be the this value. // 2. Perform ? RequireInternalSlot(loc, [[InitializedLocale]]). [[maybe_unused]] auto* locale_object = TRY(typed_this_object(global_object)); // 3. Let info be ! ObjectCreate(%Object.prototype%). - auto* info = Object::create(global_object, global_object.object_prototype()); + auto* info = Object::create(realm, global_object.object_prototype()); // 4. Let wi be ! WeekInfoOfLocale(loc). auto week_info = week_info_of_locale(*locale_object); // 5. Let we be ! CreateArrayFromList( wi.[[Weekend]] ). - auto weekend = Array::create_from<u8>(global_object, week_info.weekend, [](auto day) { return Value(day); }); + auto weekend = Array::create_from<u8>(realm, week_info.weekend, [](auto day) { return Value(day); }); // 6. Perform ! CreateDataPropertyOrThrow(info, "firstDay", wi.[[FirstDay]]). MUST(info->create_data_property_or_throw(vm.names.firstDay, Value(week_info.first_day))); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormat.cpp index f407b91cd3..71d0a4210d 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormat.cpp @@ -910,13 +910,14 @@ String format_numeric(GlobalObject& global_object, NumberFormat& number_format, Array* format_numeric_to_parts(GlobalObject& global_object, NumberFormat& number_format, MathematicalValue number) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let parts be ? PartitionNumberPattern(numberFormat, x). // Note: Our implementation of PartitionNumberPattern does not throw. auto parts = partition_number_pattern(global_object, number_format, move(number)); // 2. Let result be ! ArrayCreate(0). - auto* result = MUST(Array::create(global_object, 0)); + auto* result = MUST(Array::create(realm, 0)); // 3. Let n be 0. size_t n = 0; @@ -924,7 +925,7 @@ Array* format_numeric_to_parts(GlobalObject& global_object, NumberFormat& number // 4. For each Record { [[Type]], [[Value]] } part in parts, do for (auto& part : parts) { // a. Let O be OrdinaryObjectCreate(%Object.prototype%). - auto* object = Object::create(global_object, global_object.object_prototype()); + auto* object = Object::create(realm, global_object.object_prototype()); // b. Perform ! CreateDataPropertyOrThrow(O, "type", part.[[Type]]). MUST(object->create_data_property_or_throw(vm.names.type, js_string(vm, part.type))); @@ -1827,12 +1828,13 @@ ThrowCompletionOr<String> format_numeric_range(GlobalObject& global_object, Numb ThrowCompletionOr<Array*> format_numeric_range_to_parts(GlobalObject& global_object, NumberFormat& number_format, MathematicalValue start, MathematicalValue end) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let parts be ? PartitionNumberRangePattern(numberFormat, x, y). auto parts = TRY(partition_number_range_pattern(global_object, number_format, move(start), move(end))); // 2. Let result be ! ArrayCreate(0). - auto* result = MUST(Array::create(global_object, 0)); + auto* result = MUST(Array::create(realm, 0)); // 3. Let n be 0. size_t n = 0; @@ -1840,7 +1842,7 @@ ThrowCompletionOr<Array*> format_numeric_range_to_parts(GlobalObject& global_obj // 4. For each Record { [[Type]], [[Value]] } part in parts, do for (auto& part : parts) { // a. Let O be OrdinaryObjectCreate(%Object.prototype%). - auto* object = Object::create(global_object, global_object.object_prototype()); + auto* object = Object::create(realm, global_object.object_prototype()); // b. Perform ! CreateDataPropertyOrThrow(O, "type", part.[[Type]]). MUST(object->create_data_property_or_throw(vm.names.type, js_string(vm, part.type))); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.cpp b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.cpp index f19a60cd23..01d758ea1b 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.cpp @@ -12,9 +12,9 @@ namespace JS::Intl { // 15.5.2 Number Format Functions, https://tc39.es/ecma402/#sec-number-format-functions // 1.1.4 Number Format Functions, https://tc39.es/proposal-intl-numberformat-v3/out/numberformat/proposed.html#sec-number-format-functions -NumberFormatFunction* NumberFormatFunction::create(GlobalObject& global_object, NumberFormat& number_format) +NumberFormatFunction* NumberFormatFunction::create(Realm& realm, NumberFormat& number_format) { - return global_object.heap().allocate<NumberFormatFunction>(global_object, number_format, *global_object.function_prototype()); + return realm.heap().allocate<NumberFormatFunction>(realm.global_object(), number_format, *realm.global_object().function_prototype()); } NumberFormatFunction::NumberFormatFunction(NumberFormat& number_format, Object& prototype) diff --git a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.h b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.h index 80971c8d6f..d562ca5c07 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatFunction.h @@ -16,7 +16,7 @@ class NumberFormatFunction final : public NativeFunction { JS_OBJECT(NumberFormatFunction, NativeFunction); public: - static NumberFormatFunction* create(GlobalObject&, NumberFormat&); + static NumberFormatFunction* create(Realm&, NumberFormat&); explicit NumberFormatFunction(NumberFormat&, Object& prototype); virtual ~NumberFormatFunction() override = default; diff --git a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatPrototype.cpp index 34b4e15032..70b8cdef48 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/NumberFormatPrototype.cpp @@ -40,6 +40,8 @@ void NumberFormatPrototype::initialize(Realm& realm) // 15.3.3 get Intl.NumberFormat.prototype.format, https://tc39.es/ecma402/#sec-intl.numberformat.prototype.format JS_DEFINE_NATIVE_FUNCTION(NumberFormatPrototype::format) { + auto& realm = *global_object.associated_realm(); + // 1. Let nf be the this value. // 2. If the implementation supports the normative optional constructor mode of 4.3 Note 1, then // a. Set nf to ? UnwrapNumberFormat(nf). @@ -50,7 +52,7 @@ JS_DEFINE_NATIVE_FUNCTION(NumberFormatPrototype::format) if (!number_format->bound_format()) { // a. Let F be a new built-in function object as defined in Number Format Functions (15.1.4). // b. Set F.[[NumberFormat]] to nf. - auto* bound_format = NumberFormatFunction::create(global_object, *number_format); + auto* bound_format = NumberFormatFunction::create(realm, *number_format); // c. Set nf.[[BoundFormat]] to F. number_format->set_bound_format(bound_format); @@ -134,6 +136,8 @@ JS_DEFINE_NATIVE_FUNCTION(NumberFormatPrototype::format_range_to_parts) // 15.3.5 Intl.NumberFormat.prototype.resolvedOptions ( ), https://tc39.es/ecma402/#sec-intl.numberformat.prototype.resolvedoptions JS_DEFINE_NATIVE_FUNCTION(NumberFormatPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let nf be the this value. // 2. If the implementation supports the normative optional constructor mode of 4.3 Note 1, then // a. Set nf to ? UnwrapNumberFormat(nf). @@ -141,7 +145,7 @@ JS_DEFINE_NATIVE_FUNCTION(NumberFormatPrototype::resolved_options) auto* number_format = TRY(typed_this_object(global_object)); // 4. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 5. For each row of Table 11, except the header row, in table order, do // a. Let p be the Property value of the current row. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/PluralRulesPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/PluralRulesPrototype.cpp index 2b1e306440..25b556027f 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/PluralRulesPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/PluralRulesPrototype.cpp @@ -79,12 +79,14 @@ JS_DEFINE_NATIVE_FUNCTION(PluralRulesPrototype::select_range) // 1.4.5 Intl.PluralRules.prototype.resolvedOptions ( ), https://tc39.es/proposal-intl-numberformat-v3/out/pluralrules/proposed.html#sec-intl.pluralrules.prototype.resolvedoptions JS_DEFINE_NATIVE_FUNCTION(PluralRulesPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let pr be the this value. // 2. Perform ? RequireInternalSlot(pr, [[InitializedPluralRules]]). auto* plural_rules = TRY(typed_this_object(global_object)); // 3. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 4. For each row of Table 13, except the header row, in table order, do // a. Let p be the Property value of the current row. @@ -106,7 +108,7 @@ JS_DEFINE_NATIVE_FUNCTION(PluralRulesPrototype::resolved_options) // 5. Let pluralCategories be a List of Strings containing all possible results of PluralRuleSelect for the selected locale pr.[[Locale]]. auto available_categories = Unicode::available_plural_categories(plural_rules->locale(), plural_rules->type()); - auto* plural_categories = Array::create_from<Unicode::PluralCategory>(global_object, available_categories, [&](auto category) { + auto* plural_categories = Array::create_from<Unicode::PluralCategory>(realm, available_categories, [&](auto category) { return js_string(vm, Unicode::plural_category_to_string(category)); }); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp b/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp index 61d88f587c..cf0e50d88f 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormat.cpp @@ -248,12 +248,13 @@ ThrowCompletionOr<String> format_relative_time(GlobalObject& global_object, Rela ThrowCompletionOr<Array*> format_relative_time_to_parts(GlobalObject& global_object, RelativeTimeFormat& relative_time_format, double value, StringView unit) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let parts be ? PartitionRelativeTimePattern(relativeTimeFormat, value, unit). auto parts = TRY(partition_relative_time_pattern(global_object, relative_time_format, value, unit)); // 2. Let result be ! ArrayCreate(0). - auto* result = MUST(Array::create(global_object, 0)); + auto* result = MUST(Array::create(realm, 0)); // 3. Let n be 0. size_t n = 0; @@ -261,7 +262,7 @@ ThrowCompletionOr<Array*> format_relative_time_to_parts(GlobalObject& global_obj // 4. For each Record { [[Type]], [[Value]], [[Unit]] } part in parts, do for (auto& part : parts) { // a. Let O be OrdinaryObjectCreate(%Object.prototype%). - auto* object = Object::create(global_object, global_object.object_prototype()); + auto* object = Object::create(realm, global_object.object_prototype()); // b. Perform ! CreateDataPropertyOrThrow(O, "type", part.[[Type]]). MUST(object->create_data_property_or_throw(vm.names.type, js_string(vm, part.type))); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormatPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormatPrototype.cpp index abf43ee9f9..2b3c1a6bcc 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormatPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/RelativeTimeFormatPrototype.cpp @@ -69,12 +69,14 @@ JS_DEFINE_NATIVE_FUNCTION(RelativeTimeFormatPrototype::format_to_parts) // 17.3.5 Intl.RelativeTimeFormat.prototype.resolvedOptions ( ), https://tc39.es/ecma402/#sec-intl.relativetimeformat.prototype.resolvedoptions JS_DEFINE_NATIVE_FUNCTION(RelativeTimeFormatPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let relativeTimeFormat be the this value. // 2. Perform ? RequireInternalSlot(relativeTimeFormat, [[InitializedRelativeTimeFormat]]). auto* relative_time_format = TRY(typed_this_object(global_object)); // 3. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 4. For each row of Table 15, except the header row, in table order, do // a. Let p be the Property value of the current row. diff --git a/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.cpp b/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.cpp index 2089b5dcdc..1095226566 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.cpp @@ -11,16 +11,15 @@ namespace JS::Intl { // 18.6.1 CreateSegmentIterator ( segmenter, string ), https://tc39.es/ecma402/#sec-createsegmentsobject -SegmentIterator* SegmentIterator::create(GlobalObject& global_object, Segmenter& segmenter, Utf16View const& string, Segments const& segments) +SegmentIterator* SegmentIterator::create(Realm& realm, Segmenter& segmenter, Utf16View const& string, Segments const& segments) { - auto& realm = *global_object.associated_realm(); // 1. Let internalSlotsList be « [[IteratingSegmenter]], [[IteratedString]], [[IteratedStringNextSegmentCodeUnitIndex]] ». // 2. Let iterator be OrdinaryObjectCreate(%SegmentIteratorPrototype%, internalSlotsList). // 3. Set iterator.[[IteratingSegmenter]] to segmenter. // 4. Set iterator.[[IteratedString]] to string. // 5. Set iterator.[[IteratedStringNextSegmentCodeUnitIndex]] to 0. // 6. Return iterator. - return global_object.heap().allocate<SegmentIterator>(global_object, realm, segmenter, move(string), segments); + return realm.heap().allocate<SegmentIterator>(realm.global_object(), realm, segmenter, move(string), segments); } // 18.6 Segment Iterator Objects, https://tc39.es/ecma402/#sec-segment-iterator-objects diff --git a/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.h b/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.h index 1a4aee5d14..02906050cd 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/SegmentIterator.h @@ -16,7 +16,7 @@ class SegmentIterator final : public Object { JS_OBJECT(SegmentIterator, Object); public: - static SegmentIterator* create(GlobalObject&, Segmenter&, Utf16View const&, Segments const&); + static SegmentIterator* create(Realm&, Segmenter&, Utf16View const&, Segments const&); SegmentIterator(Realm&, Segmenter&, Utf16View const&, Segments const&); virtual ~SegmentIterator() override = default; diff --git a/Userland/Libraries/LibJS/Runtime/Intl/Segmenter.cpp b/Userland/Libraries/LibJS/Runtime/Intl/Segmenter.cpp index 5acd0e6dfd..f2db15fa0a 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/Segmenter.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/Segmenter.cpp @@ -48,6 +48,7 @@ StringView Segmenter::segmenter_granularity_string() const Object* create_segment_data_object(GlobalObject& global_object, Segmenter const& segmenter, Utf16View const& string, double start_index, double end_index) { auto& vm = global_object.vm(); + auto& realm = *global_object.associated_realm(); // 1. Let len be the length of string. auto length = string.length_in_code_units(); @@ -62,7 +63,7 @@ Object* create_segment_data_object(GlobalObject& global_object, Segmenter const& VERIFY(start_index < end_index); // 5. Let result be OrdinaryObjectCreate(%Object.prototype%). - auto* result = Object::create(global_object, global_object.object_prototype()); + auto* result = Object::create(realm, global_object.object_prototype()); // 6. Let segment be the substring of string from startIndex to endIndex. auto segment = string.substring_view(start_index, end_index - start_index); diff --git a/Userland/Libraries/LibJS/Runtime/Intl/SegmenterPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/SegmenterPrototype.cpp index f13448445f..b42733cb01 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/SegmenterPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/SegmenterPrototype.cpp @@ -34,12 +34,14 @@ void SegmenterPrototype::initialize(Realm& realm) // 18.3.4 Intl.Segmenter.prototype.resolvedOptions ( ), https://tc39.es/ecma402/#sec-intl.segmenter.prototype.resolvedoptions JS_DEFINE_NATIVE_FUNCTION(SegmenterPrototype::resolved_options) { + auto& realm = *global_object.associated_realm(); + // 1. Let segmenter be the this value. // 2. Perform ? RequireInternalSlot(segmenter, [[InitializedSegmenter]]). auto* segmenter = TRY(typed_this_object(global_object)); // 3. Let options be OrdinaryObjectCreate(%Object.prototype%). - auto* options = Object::create(global_object, global_object.object_prototype()); + auto* options = Object::create(realm, global_object.object_prototype()); // 4. For each row of Table 16, except the header row, in table order, do // a. Let p be the Property value of the current row. @@ -56,6 +58,8 @@ JS_DEFINE_NATIVE_FUNCTION(SegmenterPrototype::resolved_options) // 18.3.3 Intl.Segmenter.prototype.segment ( string ), https://tc39.es/ecma402/#sec-intl.segmenter.prototype.segment JS_DEFINE_NATIVE_FUNCTION(SegmenterPrototype::segment) { + auto& realm = *global_object.associated_realm(); + // 1. Let segmenter be the this value. // 2. Perform ? RequireInternalSlot(segmenter, [[InitializedSegmenter]]). auto* segmenter = TRY(typed_this_object(global_object)); @@ -64,7 +68,7 @@ JS_DEFINE_NATIVE_FUNCTION(SegmenterPrototype::segment) auto string = TRY(vm.argument(0).to_utf16_string(global_object)); // 4. Return ! CreateSegmentsObject(segmenter, string). - return Segments::create(global_object, *segmenter, move(string)); + return Segments::create(realm, *segmenter, move(string)); } } diff --git a/Userland/Libraries/LibJS/Runtime/Intl/Segments.cpp b/Userland/Libraries/LibJS/Runtime/Intl/Segments.cpp index 1eab2f191b..ce3590ab5a 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/Segments.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/Segments.cpp @@ -11,15 +11,14 @@ namespace JS::Intl { // 18.5.1 CreateSegmentsObject ( segmenter, string ), https://tc39.es/ecma402/#sec-createsegmentsobject -Segments* Segments::create(GlobalObject& global_object, Segmenter& segmenter, Utf16String string) +Segments* Segments::create(Realm& realm, Segmenter& segmenter, Utf16String string) { - auto& realm = *global_object.associated_realm(); // 1. Let internalSlotsList be « [[SegmentsSegmenter]], [[SegmentsString]] ». // 2. Let segments be OrdinaryObjectCreate(%SegmentsPrototype%, internalSlotsList). // 3. Set segments.[[SegmentsSegmenter]] to segmenter. // 4. Set segments.[[SegmentsString]] to string. // 5. Return segments. - return global_object.heap().allocate<Segments>(global_object, realm, segmenter, move(string)); + return realm.heap().allocate<Segments>(realm.global_object(), realm, segmenter, move(string)); } // 18.5 Segments Objects, https://tc39.es/ecma402/#sec-segments-objects diff --git a/Userland/Libraries/LibJS/Runtime/Intl/Segments.h b/Userland/Libraries/LibJS/Runtime/Intl/Segments.h index 5696d3089a..251d132ad4 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/Segments.h +++ b/Userland/Libraries/LibJS/Runtime/Intl/Segments.h @@ -16,7 +16,7 @@ class Segments final : public Object { JS_OBJECT(Segments, Object); public: - static Segments* create(GlobalObject&, Segmenter&, Utf16String); + static Segments* create(Realm&, Segmenter&, Utf16String); Segments(Realm&, Segmenter&, Utf16String); virtual ~Segments() override = default; diff --git a/Userland/Libraries/LibJS/Runtime/Intl/SegmentsPrototype.cpp b/Userland/Libraries/LibJS/Runtime/Intl/SegmentsPrototype.cpp index 8d1353601d..117ef331ff 100644 --- a/Userland/Libraries/LibJS/Runtime/Intl/SegmentsPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/Intl/SegmentsPrototype.cpp @@ -64,6 +64,8 @@ JS_DEFINE_NATIVE_FUNCTION(SegmentsPrototype::containing) // 18.5.2.2 %SegmentsPrototype% [ @@iterator ] ( ), https://tc39.es/ecma402/#sec-%segmentsprototype%-@@iterator JS_DEFINE_NATIVE_FUNCTION(SegmentsPrototype::symbol_iterator) { + auto& realm = *global_object.associated_realm(); + // 1. Let segments be the this value. // 2. Perform ? RequireInternalSlot(segments, [[SegmentsSegmenter]]). auto* segments = TRY(typed_this_object(global_object)); @@ -75,7 +77,7 @@ JS_DEFINE_NATIVE_FUNCTION(SegmentsPrototype::symbol_iterator) auto string = segments->segments_string(); // 5. Return ! CreateSegmentIterator(segmenter, string). - return SegmentIterator::create(global_object, segmenter, string, *segments); + return SegmentIterator::create(realm, segmenter, string, *segments); } } |