mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-20 18:12:53 +00:00
LibJS: Make PrimitiveString::deprecated_string() infallible
Work towards #20449.
This commit is contained in:
parent
c084269e5f
commit
09547ec975
Notes:
sideshowbarker
2024-07-16 20:08:14 +09:00
Author: https://github.com/awesomekling
Commit: 09547ec975
Pull-request: https://github.com/SerenityOS/serenity/pull/20451
Reviewed-by: https://github.com/trflynn89
17 changed files with 42 additions and 43 deletions
|
@ -68,14 +68,14 @@ TESTJS_GLOBAL_FUNCTION(mark_as_garbage, markAsGarbage)
|
||||||
return execution_context->lexical_environment != nullptr;
|
return execution_context->lexical_environment != nullptr;
|
||||||
});
|
});
|
||||||
if (!outer_environment.has_value())
|
if (!outer_environment.has_value())
|
||||||
return vm.throw_completion<JS::ReferenceError>(JS::ErrorType::UnknownIdentifier, TRY(variable_name.deprecated_string()));
|
return vm.throw_completion<JS::ReferenceError>(JS::ErrorType::UnknownIdentifier, variable_name.deprecated_string());
|
||||||
|
|
||||||
auto reference = TRY(vm.resolve_binding(TRY(variable_name.deprecated_string()), outer_environment.value()->lexical_environment));
|
auto reference = TRY(vm.resolve_binding(variable_name.deprecated_string(), outer_environment.value()->lexical_environment));
|
||||||
|
|
||||||
auto value = TRY(reference.get_value(vm));
|
auto value = TRY(reference.get_value(vm));
|
||||||
|
|
||||||
if (!can_be_held_weakly(value))
|
if (!can_be_held_weakly(value))
|
||||||
return vm.throw_completion<JS::TypeError>(JS::ErrorType::CannotBeHeldWeakly, DeprecatedString::formatted("Variable with name {}", TRY(variable_name.deprecated_string())));
|
return vm.throw_completion<JS::TypeError>(JS::ErrorType::CannotBeHeldWeakly, DeprecatedString::formatted("Variable with name {}", variable_name.deprecated_string()));
|
||||||
|
|
||||||
vm.heap().uproot_cell(&value.as_cell());
|
vm.heap().uproot_cell(&value.as_cell());
|
||||||
TRY(reference.delete_(vm));
|
TRY(reference.delete_(vm));
|
||||||
|
|
|
@ -196,7 +196,7 @@ JS_DEFINE_NATIVE_FUNCTION(SheetGlobalObject::get_real_cell_contents)
|
||||||
auto name_value = vm.argument(0);
|
auto name_value = vm.argument(0);
|
||||||
if (!name_value.is_string())
|
if (!name_value.is_string())
|
||||||
return vm.throw_completion<JS::TypeError>("Expected a String argument to get_real_cell_contents()"sv);
|
return vm.throw_completion<JS::TypeError>("Expected a String argument to get_real_cell_contents()"sv);
|
||||||
auto position = sheet_object.m_sheet.parse_cell_name(TRY(name_value.as_string().deprecated_string()));
|
auto position = sheet_object.m_sheet.parse_cell_name(name_value.as_string().deprecated_string());
|
||||||
if (!position.has_value())
|
if (!position.has_value())
|
||||||
return vm.throw_completion<JS::TypeError>("Invalid cell name"sv);
|
return vm.throw_completion<JS::TypeError>("Invalid cell name"sv);
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ JS_DEFINE_NATIVE_FUNCTION(SheetGlobalObject::set_real_cell_contents)
|
||||||
auto name_value = vm.argument(0);
|
auto name_value = vm.argument(0);
|
||||||
if (!name_value.is_string())
|
if (!name_value.is_string())
|
||||||
return vm.throw_completion<JS::TypeError>("Expected the first argument of set_real_cell_contents() to be a String"sv);
|
return vm.throw_completion<JS::TypeError>("Expected the first argument of set_real_cell_contents() to be a String"sv);
|
||||||
auto position = sheet_object.m_sheet.parse_cell_name(TRY(name_value.as_string().deprecated_string()));
|
auto position = sheet_object.m_sheet.parse_cell_name(name_value.as_string().deprecated_string());
|
||||||
if (!position.has_value())
|
if (!position.has_value())
|
||||||
return vm.throw_completion<JS::TypeError>("Invalid cell name"sv);
|
return vm.throw_completion<JS::TypeError>("Invalid cell name"sv);
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ JS_DEFINE_NATIVE_FUNCTION(SheetGlobalObject::set_real_cell_contents)
|
||||||
return vm.throw_completion<JS::TypeError>("Expected the second argument of set_real_cell_contents() to be a String"sv);
|
return vm.throw_completion<JS::TypeError>("Expected the second argument of set_real_cell_contents() to be a String"sv);
|
||||||
|
|
||||||
auto& cell = sheet_object.m_sheet.ensure(position.value());
|
auto& cell = sheet_object.m_sheet.ensure(position.value());
|
||||||
auto new_contents = TRY(new_contents_value.as_string().deprecated_string());
|
auto new_contents = new_contents_value.as_string().deprecated_string();
|
||||||
cell.set_data(new_contents);
|
cell.set_data(new_contents);
|
||||||
return JS::js_null();
|
return JS::js_null();
|
||||||
}
|
}
|
||||||
|
@ -255,7 +255,7 @@ JS_DEFINE_NATIVE_FUNCTION(SheetGlobalObject::parse_cell_name)
|
||||||
auto name_value = vm.argument(0);
|
auto name_value = vm.argument(0);
|
||||||
if (!name_value.is_string())
|
if (!name_value.is_string())
|
||||||
return vm.throw_completion<JS::TypeError>("Expected a String argument to parse_cell_name()"sv);
|
return vm.throw_completion<JS::TypeError>("Expected a String argument to parse_cell_name()"sv);
|
||||||
auto position = sheet_object.m_sheet.parse_cell_name(TRY(name_value.as_string().deprecated_string()));
|
auto position = sheet_object.m_sheet.parse_cell_name(name_value.as_string().deprecated_string());
|
||||||
if (!position.has_value())
|
if (!position.has_value())
|
||||||
return JS::js_undefined();
|
return JS::js_undefined();
|
||||||
|
|
||||||
|
@ -301,7 +301,7 @@ JS_DEFINE_NATIVE_FUNCTION(SheetGlobalObject::column_index)
|
||||||
if (!column_name.is_string())
|
if (!column_name.is_string())
|
||||||
return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "String");
|
return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "String");
|
||||||
|
|
||||||
auto column_name_str = TRY(column_name.as_string().deprecated_string());
|
auto column_name_str = column_name.as_string().deprecated_string();
|
||||||
|
|
||||||
auto this_object = TRY(vm.this_value().to_object(vm));
|
auto this_object = TRY(vm.this_value().to_object(vm));
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ JS_DEFINE_NATIVE_FUNCTION(SheetGlobalObject::column_arithmetic)
|
||||||
if (!column_name.is_string())
|
if (!column_name.is_string())
|
||||||
return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "String");
|
return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "String");
|
||||||
|
|
||||||
auto column_name_str = TRY(column_name.as_string().deprecated_string());
|
auto column_name_str = column_name.as_string().deprecated_string();
|
||||||
|
|
||||||
auto offset = TRY(vm.argument(1).to_number(vm));
|
auto offset = TRY(vm.argument(1).to_number(vm));
|
||||||
auto offset_number = static_cast<i32>(offset.as_double());
|
auto offset_number = static_cast<i32>(offset.as_double());
|
||||||
|
@ -354,7 +354,7 @@ JS_DEFINE_NATIVE_FUNCTION(SheetGlobalObject::get_column_bound)
|
||||||
if (!column_name.is_string())
|
if (!column_name.is_string())
|
||||||
return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "String");
|
return vm.throw_completion<JS::TypeError>(JS::ErrorType::NotAnObjectOfType, "String");
|
||||||
|
|
||||||
auto column_name_str = TRY(column_name.as_string().deprecated_string());
|
auto column_name_str = column_name.as_string().deprecated_string();
|
||||||
auto this_object = TRY(vm.this_value().to_object(vm));
|
auto this_object = TRY(vm.this_value().to_object(vm));
|
||||||
|
|
||||||
if (!is<SheetGlobalObject>(*this_object))
|
if (!is<SheetGlobalObject>(*this_object))
|
||||||
|
@ -406,7 +406,7 @@ JS_DEFINE_NATIVE_FUNCTION(WorkbookObject::sheet)
|
||||||
auto& workbook = workbook_object.m_workbook;
|
auto& workbook = workbook_object.m_workbook;
|
||||||
|
|
||||||
if (name_value.is_string()) {
|
if (name_value.is_string()) {
|
||||||
auto name = TRY(name_value.as_string().deprecated_string());
|
auto name = name_value.as_string().deprecated_string();
|
||||||
for (auto& sheet : workbook.sheets()) {
|
for (auto& sheet : workbook.sheets()) {
|
||||||
if (sheet->name() == name)
|
if (sheet->name() == name)
|
||||||
return JS::Value(&sheet->global_object());
|
return JS::Value(&sheet->global_object());
|
||||||
|
|
|
@ -20,7 +20,7 @@ ThrowCompletionOr<Value> IsHTMLDDA::call()
|
||||||
auto& vm = this->vm();
|
auto& vm = this->vm();
|
||||||
if (vm.argument_count() == 0)
|
if (vm.argument_count() == 0)
|
||||||
return js_null();
|
return js_null();
|
||||||
if (vm.argument(0).is_string() && TRY(vm.argument(0).as_string().deprecated_string()).is_empty())
|
if (vm.argument(0).is_string() && vm.argument(0).as_string().is_empty())
|
||||||
return js_null();
|
return js_null();
|
||||||
// Not sure if this really matters, INTERPRETING.md simply says:
|
// Not sure if this really matters, INTERPRETING.md simply says:
|
||||||
// * IsHTMLDDA - (present only in implementations that can provide it) an object that:
|
// * IsHTMLDDA - (present only in implementations that can provide it) an object that:
|
||||||
|
|
|
@ -595,7 +595,7 @@ ThrowCompletionOr<Value> perform_eval(VM& vm, Value x, CallerMode strict_caller,
|
||||||
.in_class_field_initializer = in_class_field_initializer,
|
.in_class_field_initializer = in_class_field_initializer,
|
||||||
};
|
};
|
||||||
|
|
||||||
Parser parser { Lexer { TRY(code_string.deprecated_string()) }, Program::Type::Script, move(initial_state) };
|
Parser parser { Lexer { code_string.deprecated_string() }, Program::Type::Script, move(initial_state) };
|
||||||
auto program = parser.parse_program(strict_caller == CallerMode::Strict);
|
auto program = parser.parse_program(strict_caller == CallerMode::Strict);
|
||||||
|
|
||||||
// b. If script is a List of errors, throw a SyntaxError exception.
|
// b. If script is a List of errors, throw a SyntaxError exception.
|
||||||
|
@ -1545,7 +1545,7 @@ ThrowCompletionOr<Value> perform_import_call(VM& vm, Value specifier, Value opti
|
||||||
// 4. If supportedAssertions contains key, then
|
// 4. If supportedAssertions contains key, then
|
||||||
if (supported_assertions.contains_slow(property_key.to_string())) {
|
if (supported_assertions.contains_slow(property_key.to_string())) {
|
||||||
// a. Append { [[Key]]: key, [[Value]]: value } to assertions.
|
// a. Append { [[Key]]: key, [[Value]]: value } to assertions.
|
||||||
assertions.empend(property_key.to_string(), TRY(value.as_string().deprecated_string()));
|
assertions.empend(property_key.to_string(), value.as_string().deprecated_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -246,7 +246,7 @@ ThrowCompletionOr<NonnullGCPtr<Object>> DateConstructor::construct(FunctionObjec
|
||||||
if (primitive.is_string()) {
|
if (primitive.is_string()) {
|
||||||
// 1. Assert: The next step never returns an abrupt completion because Type(v) is String.
|
// 1. Assert: The next step never returns an abrupt completion because Type(v) is String.
|
||||||
// 2. Let tv be the result of parsing v as a date, in exactly the same manner as for the parse method (21.4.3.2).
|
// 2. Let tv be the result of parsing v as a date, in exactly the same manner as for the parse method (21.4.3.2).
|
||||||
time_value = parse_date_string(TRY(primitive.as_string().deprecated_string()));
|
time_value = parse_date_string(primitive.as_string().deprecated_string());
|
||||||
}
|
}
|
||||||
// iii. Else,
|
// iii. Else,
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -1247,7 +1247,7 @@ JS_DEFINE_NATIVE_FUNCTION(DatePrototype::symbol_to_primitive)
|
||||||
auto hint_value = vm.argument(0);
|
auto hint_value = vm.argument(0);
|
||||||
if (!hint_value.is_string())
|
if (!hint_value.is_string())
|
||||||
return vm.throw_completion<TypeError>(ErrorType::InvalidHint, TRY_OR_THROW_OOM(vm, hint_value.to_string_without_side_effects()));
|
return vm.throw_completion<TypeError>(ErrorType::InvalidHint, TRY_OR_THROW_OOM(vm, hint_value.to_string_without_side_effects()));
|
||||||
auto hint = TRY(hint_value.as_string().deprecated_string());
|
auto hint = hint_value.as_string().deprecated_string();
|
||||||
Value::PreferredType try_first;
|
Value::PreferredType try_first;
|
||||||
if (hint == "string" || hint == "default")
|
if (hint == "string" || hint == "default")
|
||||||
try_first = Value::PreferredType::String;
|
try_first = Value::PreferredType::String;
|
||||||
|
|
|
@ -63,7 +63,7 @@ ThrowCompletionOr<DeprecatedString> JSONObject::stringify_impl(VM& vm, Value val
|
||||||
auto replacer_value = TRY(replacer_object.get(i));
|
auto replacer_value = TRY(replacer_object.get(i));
|
||||||
DeprecatedString item;
|
DeprecatedString item;
|
||||||
if (replacer_value.is_string()) {
|
if (replacer_value.is_string()) {
|
||||||
item = TRY(replacer_value.as_string().deprecated_string());
|
item = replacer_value.as_string().deprecated_string();
|
||||||
} else if (replacer_value.is_number()) {
|
} else if (replacer_value.is_number()) {
|
||||||
item = MUST(replacer_value.to_deprecated_string(vm));
|
item = MUST(replacer_value.to_deprecated_string(vm));
|
||||||
} else if (replacer_value.is_object()) {
|
} else if (replacer_value.is_object()) {
|
||||||
|
@ -93,7 +93,7 @@ ThrowCompletionOr<DeprecatedString> JSONObject::stringify_impl(VM& vm, Value val
|
||||||
space_mv = min(10, space_mv);
|
space_mv = min(10, space_mv);
|
||||||
state.gap = space_mv < 1 ? DeprecatedString::empty() : DeprecatedString::repeated(' ', space_mv);
|
state.gap = space_mv < 1 ? DeprecatedString::empty() : DeprecatedString::repeated(' ', space_mv);
|
||||||
} else if (space.is_string()) {
|
} else if (space.is_string()) {
|
||||||
auto string = TRY(space.as_string().deprecated_string());
|
auto string = space.as_string().deprecated_string();
|
||||||
if (string.length() <= 10)
|
if (string.length() <= 10)
|
||||||
state.gap = string;
|
state.gap = string;
|
||||||
else
|
else
|
||||||
|
@ -185,7 +185,7 @@ ThrowCompletionOr<DeprecatedString> JSONObject::serialize_json_property(VM& vm,
|
||||||
|
|
||||||
// 8. If Type(value) is String, return QuoteJSONString(value).
|
// 8. If Type(value) is String, return QuoteJSONString(value).
|
||||||
if (value.is_string())
|
if (value.is_string())
|
||||||
return quote_json_string(TRY(value.as_string().deprecated_string()));
|
return quote_json_string(value.as_string().deprecated_string());
|
||||||
|
|
||||||
// 9. If Type(value) is Number, then
|
// 9. If Type(value) is Number, then
|
||||||
if (value.is_number()) {
|
if (value.is_number()) {
|
||||||
|
@ -250,7 +250,7 @@ ThrowCompletionOr<DeprecatedString> JSONObject::serialize_json_object(VM& vm, St
|
||||||
} else {
|
} else {
|
||||||
auto property_list = TRY(object.enumerable_own_property_names(PropertyKind::Key));
|
auto property_list = TRY(object.enumerable_own_property_names(PropertyKind::Key));
|
||||||
for (auto& property : property_list)
|
for (auto& property : property_list)
|
||||||
TRY(process_property(TRY(property.as_string().deprecated_string())));
|
TRY(process_property(property.as_string().deprecated_string()));
|
||||||
}
|
}
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
if (property_strings.is_empty()) {
|
if (property_strings.is_empty()) {
|
||||||
|
@ -487,7 +487,7 @@ ThrowCompletionOr<Value> JSONObject::internalize_json_property(VM& vm, Object* h
|
||||||
} else {
|
} else {
|
||||||
auto property_list = TRY(value_object.enumerable_own_property_names(Object::PropertyKind::Key));
|
auto property_list = TRY(value_object.enumerable_own_property_names(Object::PropertyKind::Key));
|
||||||
for (auto& property_key : property_list)
|
for (auto& property_key : property_list)
|
||||||
TRY(process_property(TRY(property_key.as_string().deprecated_string())));
|
TRY(process_property(property_key.as_string().deprecated_string()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1335,7 +1335,7 @@ Optional<Completion> Object::enumerate_object_properties(Function<Optional<Compl
|
||||||
for (auto& key : own_keys) {
|
for (auto& key : own_keys) {
|
||||||
if (!key.is_string())
|
if (!key.is_string())
|
||||||
continue;
|
continue;
|
||||||
DeprecatedFlyString property_key = TRY(key.as_string().deprecated_string());
|
DeprecatedFlyString property_key = key.as_string().deprecated_string();
|
||||||
if (visited.contains(property_key))
|
if (visited.contains(property_key))
|
||||||
continue;
|
continue;
|
||||||
auto descriptor = TRY(target->internal_get_own_property(property_key));
|
auto descriptor = TRY(target->internal_get_own_property(property_key));
|
||||||
|
|
|
@ -188,7 +188,7 @@ JS_DEFINE_NATIVE_FUNCTION(ObjectPrototype::to_string)
|
||||||
if (!to_string_tag.is_string())
|
if (!to_string_tag.is_string())
|
||||||
tag = move(builtin_tag);
|
tag = move(builtin_tag);
|
||||||
else
|
else
|
||||||
tag = TRY(to_string_tag.as_string().deprecated_string());
|
tag = to_string_tag.as_string().deprecated_string();
|
||||||
|
|
||||||
// 17. Return the string-concatenation of "[object ", tag, and "]".
|
// 17. Return the string-concatenation of "[object ", tag, and "]".
|
||||||
return PrimitiveString::create(vm, DeprecatedString::formatted("[object {}]", tag));
|
return PrimitiveString::create(vm, DeprecatedString::formatted("[object {}]", tag));
|
||||||
|
|
|
@ -96,7 +96,7 @@ StringView PrimitiveString::utf8_string_view() const
|
||||||
return m_utf8_string->bytes_as_string_view();
|
return m_utf8_string->bytes_as_string_view();
|
||||||
}
|
}
|
||||||
|
|
||||||
ThrowCompletionOr<DeprecatedString> PrimitiveString::deprecated_string() const
|
DeprecatedString PrimitiveString::deprecated_string() const
|
||||||
{
|
{
|
||||||
resolve_rope_if_needed(EncodingPreference::UTF8);
|
resolve_rope_if_needed(EncodingPreference::UTF8);
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ public:
|
||||||
[[nodiscard]] StringView utf8_string_view() const;
|
[[nodiscard]] StringView utf8_string_view() const;
|
||||||
bool has_utf8_string() const { return m_utf8_string.has_value(); }
|
bool has_utf8_string() const { return m_utf8_string.has_value(); }
|
||||||
|
|
||||||
ThrowCompletionOr<DeprecatedString> deprecated_string() const;
|
[[nodiscard]] DeprecatedString deprecated_string() const;
|
||||||
bool has_deprecated_string() const { return m_deprecated_string.has_value(); }
|
bool has_deprecated_string() const { return m_deprecated_string.has_value(); }
|
||||||
|
|
||||||
[[nodiscard]] Utf16String utf16_string() const;
|
[[nodiscard]] Utf16String utf16_string() const;
|
||||||
|
|
|
@ -87,7 +87,7 @@ ThrowCompletionOr<void> copy_name_and_length(VM& vm, FunctionObject& function, F
|
||||||
target_name = PrimitiveString::create(vm, String {});
|
target_name = PrimitiveString::create(vm, String {});
|
||||||
|
|
||||||
// 8. Perform SetFunctionName(F, targetName, prefix).
|
// 8. Perform SetFunctionName(F, targetName, prefix).
|
||||||
function.set_function_name({ TRY(target_name.as_string().deprecated_string()) }, move(prefix));
|
function.set_function_name({ target_name.as_string().deprecated_string() }, move(prefix));
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ JS_DEFINE_NATIVE_FUNCTION(ShadowRealmPrototype::evaluate)
|
||||||
auto& eval_realm = object->shadow_realm();
|
auto& eval_realm = object->shadow_realm();
|
||||||
|
|
||||||
// 6. Return ? PerformShadowRealmEval(sourceText, callerRealm, evalRealm).
|
// 6. Return ? PerformShadowRealmEval(sourceText, callerRealm, evalRealm).
|
||||||
return perform_shadow_realm_eval(vm, TRY(source_text.as_string().deprecated_string()), *caller_realm, eval_realm);
|
return perform_shadow_realm_eval(vm, source_text.as_string().deprecated_string(), *caller_realm, eval_realm);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3.4.2 ShadowRealm.prototype.importValue ( specifier, exportName ), https://tc39.es/proposal-shadowrealm/#sec-shadowrealm.prototype.importvalue
|
// 3.4.2 ShadowRealm.prototype.importValue ( specifier, exportName ), https://tc39.es/proposal-shadowrealm/#sec-shadowrealm.prototype.importvalue
|
||||||
|
@ -79,7 +79,7 @@ JS_DEFINE_NATIVE_FUNCTION(ShadowRealmPrototype::import_value)
|
||||||
auto& eval_context = object->execution_context();
|
auto& eval_context = object->execution_context();
|
||||||
|
|
||||||
// 8. Return ? ShadowRealmImportValue(specifierString, exportNameString, callerRealm, evalRealm, evalContext).
|
// 8. Return ? ShadowRealmImportValue(specifierString, exportNameString, callerRealm, evalRealm, evalContext).
|
||||||
return shadow_realm_import_value(vm, move(specifier_string), TRY(export_name.as_string().deprecated_string()), *caller_realm, eval_realm, eval_context);
|
return shadow_realm_import_value(vm, move(specifier_string), export_name.as_string().deprecated_string(), *caller_realm, eval_realm, eval_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -784,7 +784,7 @@ ThrowCompletionOr<double> resolve_iso_month(VM& vm, Object const& fields)
|
||||||
|
|
||||||
// 6. Assert: Type(monthCode) is String.
|
// 6. Assert: Type(monthCode) is String.
|
||||||
VERIFY(month_code.is_string());
|
VERIFY(month_code.is_string());
|
||||||
auto month_code_string = TRY(month_code.as_string().deprecated_string());
|
auto month_code_string = month_code.as_string().deprecated_string();
|
||||||
|
|
||||||
// 7. If the length of monthCode is not 3, throw a RangeError exception.
|
// 7. If the length of monthCode is not 3, throw a RangeError exception.
|
||||||
auto month_length = month_code_string.length();
|
auto month_length = month_code_string.length();
|
||||||
|
@ -960,7 +960,7 @@ ThrowCompletionOr<Object*> default_merge_calendar_fields(VM& vm, Object const& f
|
||||||
// 3. For each element key of fieldsKeys, do
|
// 3. For each element key of fieldsKeys, do
|
||||||
for (auto& key : fields_keys) {
|
for (auto& key : fields_keys) {
|
||||||
// a. If key is not "month" or "monthCode", then
|
// a. If key is not "month" or "monthCode", then
|
||||||
if (!TRY(key.as_string().deprecated_string()).is_one_of(vm.names.month.as_string(), vm.names.monthCode.as_string())) {
|
if (!key.as_string().deprecated_string().is_one_of(vm.names.month.as_string(), vm.names.monthCode.as_string())) {
|
||||||
auto property_key = MUST(PropertyKey::from_value(vm, key));
|
auto property_key = MUST(PropertyKey::from_value(vm, key));
|
||||||
|
|
||||||
// i. Let propValue be ? Get(fields, key).
|
// i. Let propValue be ? Get(fields, key).
|
||||||
|
@ -994,7 +994,7 @@ ThrowCompletionOr<Object*> default_merge_calendar_fields(VM& vm, Object const& f
|
||||||
}
|
}
|
||||||
|
|
||||||
// See comment above.
|
// See comment above.
|
||||||
additional_fields_keys_contains_month_or_month_code_property |= TRY(key.as_string().deprecated_string()) == vm.names.month.as_string() || TRY(key.as_string().deprecated_string()) == vm.names.monthCode.as_string();
|
additional_fields_keys_contains_month_or_month_code_property |= key.as_string().deprecated_string() == vm.names.month.as_string() || key.as_string().deprecated_string() == vm.names.monthCode.as_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. If additionalFieldsKeys does not contain either "month" or "monthCode", then
|
// 6. If additionalFieldsKeys does not contain either "month" or "monthCode", then
|
||||||
|
|
|
@ -711,7 +711,7 @@ ThrowCompletionOr<Value> Value::to_number(VM& vm) const
|
||||||
return Value(as_bool() ? 1 : 0);
|
return Value(as_bool() ? 1 : 0);
|
||||||
// 6. If argument is a String, return StringToNumber(argument).
|
// 6. If argument is a String, return StringToNumber(argument).
|
||||||
case STRING_TAG:
|
case STRING_TAG:
|
||||||
return string_to_number(TRY(as_string().deprecated_string()));
|
return string_to_number(as_string().deprecated_string());
|
||||||
// 7. Assert: argument is an Object.
|
// 7. Assert: argument is an Object.
|
||||||
case OBJECT_TAG: {
|
case OBJECT_TAG: {
|
||||||
// 8. Let primValue be ? ToPrimitive(argument, number).
|
// 8. Let primValue be ? ToPrimitive(argument, number).
|
||||||
|
@ -765,7 +765,7 @@ ThrowCompletionOr<NonnullGCPtr<BigInt>> Value::to_bigint(VM& vm) const
|
||||||
return primitive.as_bigint();
|
return primitive.as_bigint();
|
||||||
case STRING_TAG: {
|
case STRING_TAG: {
|
||||||
// 1. Let n be ! StringToBigInt(prim).
|
// 1. Let n be ! StringToBigInt(prim).
|
||||||
auto bigint = string_to_bigint(vm, TRY(primitive.as_string().deprecated_string()));
|
auto bigint = string_to_bigint(vm, primitive.as_string().deprecated_string());
|
||||||
|
|
||||||
// 2. If n is undefined, throw a SyntaxError exception.
|
// 2. If n is undefined, throw a SyntaxError exception.
|
||||||
if (!bigint.has_value())
|
if (!bigint.has_value())
|
||||||
|
@ -2205,8 +2205,7 @@ bool same_value_non_number(Value lhs, Value rhs)
|
||||||
// 5. If x is a String, then
|
// 5. If x is a String, then
|
||||||
if (lhs.is_string()) {
|
if (lhs.is_string()) {
|
||||||
// a. If x and y are exactly the same sequence of code units (same length and same code units at corresponding indices), return true; otherwise, return false.
|
// a. If x and y are exactly the same sequence of code units (same length and same code units at corresponding indices), return true; otherwise, return false.
|
||||||
// FIXME: Propagate this error.
|
return lhs.as_string().deprecated_string() == rhs.as_string().deprecated_string();
|
||||||
return MUST(lhs.as_string().deprecated_string()) == MUST(rhs.as_string().deprecated_string());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. If x is undefined, return true.
|
// 3. If x is undefined, return true.
|
||||||
|
@ -2287,7 +2286,7 @@ ThrowCompletionOr<bool> is_loosely_equal(VM& vm, Value lhs, Value rhs)
|
||||||
// 7. If Type(x) is BigInt and Type(y) is String, then
|
// 7. If Type(x) is BigInt and Type(y) is String, then
|
||||||
if (lhs.is_bigint() && rhs.is_string()) {
|
if (lhs.is_bigint() && rhs.is_string()) {
|
||||||
// a. Let n be StringToBigInt(y).
|
// a. Let n be StringToBigInt(y).
|
||||||
auto bigint = string_to_bigint(vm, TRY(rhs.as_string().deprecated_string()));
|
auto bigint = string_to_bigint(vm, rhs.as_string().deprecated_string());
|
||||||
|
|
||||||
// b. If n is undefined, return false.
|
// b. If n is undefined, return false.
|
||||||
if (!bigint.has_value())
|
if (!bigint.has_value())
|
||||||
|
@ -2368,8 +2367,8 @@ ThrowCompletionOr<TriState> is_less_than(VM& vm, Value lhs, Value rhs, bool left
|
||||||
|
|
||||||
// 3. If px is a String and py is a String, then
|
// 3. If px is a String and py is a String, then
|
||||||
if (x_primitive.is_string() && y_primitive.is_string()) {
|
if (x_primitive.is_string() && y_primitive.is_string()) {
|
||||||
auto x_string = TRY(x_primitive.as_string().deprecated_string());
|
auto x_string = x_primitive.as_string().deprecated_string();
|
||||||
auto y_string = TRY(y_primitive.as_string().deprecated_string());
|
auto y_string = y_primitive.as_string().deprecated_string();
|
||||||
|
|
||||||
Utf8View x_code_points { x_string };
|
Utf8View x_code_points { x_string };
|
||||||
Utf8View y_code_points { y_string };
|
Utf8View y_code_points { y_string };
|
||||||
|
@ -2404,7 +2403,7 @@ ThrowCompletionOr<TriState> is_less_than(VM& vm, Value lhs, Value rhs, bool left
|
||||||
// a. If px is a BigInt and py is a String, then
|
// a. If px is a BigInt and py is a String, then
|
||||||
if (x_primitive.is_bigint() && y_primitive.is_string()) {
|
if (x_primitive.is_bigint() && y_primitive.is_string()) {
|
||||||
// i. Let ny be StringToBigInt(py).
|
// i. Let ny be StringToBigInt(py).
|
||||||
auto y_bigint = string_to_bigint(vm, TRY(y_primitive.as_string().deprecated_string()));
|
auto y_bigint = string_to_bigint(vm, y_primitive.as_string().deprecated_string());
|
||||||
|
|
||||||
// ii. If ny is undefined, return undefined.
|
// ii. If ny is undefined, return undefined.
|
||||||
if (!y_bigint.has_value())
|
if (!y_bigint.has_value())
|
||||||
|
@ -2419,7 +2418,7 @@ ThrowCompletionOr<TriState> is_less_than(VM& vm, Value lhs, Value rhs, bool left
|
||||||
// b. If px is a String and py is a BigInt, then
|
// b. If px is a String and py is a BigInt, then
|
||||||
if (x_primitive.is_string() && y_primitive.is_bigint()) {
|
if (x_primitive.is_string() && y_primitive.is_bigint()) {
|
||||||
// i. Let nx be StringToBigInt(px).
|
// i. Let nx be StringToBigInt(px).
|
||||||
auto x_bigint = string_to_bigint(vm, TRY(x_primitive.as_string().deprecated_string()));
|
auto x_bigint = string_to_bigint(vm, x_primitive.as_string().deprecated_string());
|
||||||
|
|
||||||
// ii. If nx is undefined, return undefined.
|
// ii. If nx is undefined, return undefined.
|
||||||
if (!x_bigint.has_value())
|
if (!x_bigint.has_value())
|
||||||
|
|
|
@ -19,7 +19,7 @@ struct ValueTraits : public Traits<Value> {
|
||||||
VERIFY(!value.is_empty());
|
VERIFY(!value.is_empty());
|
||||||
if (value.is_string()) {
|
if (value.is_string()) {
|
||||||
// FIXME: Propagate this error.
|
// FIXME: Propagate this error.
|
||||||
return value.as_string().deprecated_string().release_value().hash();
|
return value.as_string().deprecated_string().hash();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.is_bigint())
|
if (value.is_bigint())
|
||||||
|
|
|
@ -99,7 +99,7 @@ static ErrorOr<JsonValue, ExecuteScriptResultType> internal_json_clone_algorithm
|
||||||
if (value.is_number())
|
if (value.is_number())
|
||||||
return JsonValue { value.as_double() };
|
return JsonValue { value.as_double() };
|
||||||
if (value.is_string())
|
if (value.is_string())
|
||||||
return JsonValue { TRY_OR_JS_ERROR(value.as_string().deprecated_string()) };
|
return JsonValue { value.as_string().deprecated_string() };
|
||||||
|
|
||||||
// NOTE: BigInt and Symbol not mentioned anywhere in the WebDriver spec, as it references ES5.
|
// NOTE: BigInt and Symbol not mentioned anywhere in the WebDriver spec, as it references ES5.
|
||||||
// It assumes that all primitives are handled above, and the value is an object for the remaining steps.
|
// It assumes that all primitives are handled above, and the value is an object for the remaining steps.
|
||||||
|
@ -130,7 +130,7 @@ static ErrorOr<JsonValue, ExecuteScriptResultType> internal_json_clone_algorithm
|
||||||
auto to_json_result = TRY_OR_JS_ERROR(to_json.as_function().internal_call(value, JS::MarkedVector<JS::Value> { vm.heap() }));
|
auto to_json_result = TRY_OR_JS_ERROR(to_json.as_function().internal_call(value, JS::MarkedVector<JS::Value> { vm.heap() }));
|
||||||
if (!to_json_result.is_string())
|
if (!to_json_result.is_string())
|
||||||
return ExecuteScriptResultType::JavaScriptError;
|
return ExecuteScriptResultType::JavaScriptError;
|
||||||
return TRY_OR_JS_ERROR(to_json_result.as_string().deprecated_string());
|
return to_json_result.as_string().deprecated_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -> Otherwise
|
// -> Otherwise
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue