mirror of
https://github.com/RGBCube/serenity
synced 2025-05-25 16:25:08 +00:00
LibJS: Throw error in Object::to_string() if string conversion fails
This commit is contained in:
parent
95abcc3722
commit
2c6e7dbd07
2 changed files with 14 additions and 3 deletions
|
@ -360,7 +360,13 @@ Value Object::to_string() const
|
||||||
&& to_string_property.is_object()
|
&& to_string_property.is_object()
|
||||||
&& to_string_property.as_object().is_function()) {
|
&& to_string_property.as_object().is_function()) {
|
||||||
auto& to_string_function = static_cast<Function&>(to_string_property.as_object());
|
auto& to_string_function = static_cast<Function&>(to_string_property.as_object());
|
||||||
return const_cast<Object*>(this)->interpreter().call(to_string_function, const_cast<Object*>(this));
|
auto& interpreter = const_cast<Object*>(this)->interpreter();
|
||||||
|
auto string_value = interpreter.call(to_string_function, const_cast<Object*>(this));
|
||||||
|
if (!string_value.is_string())
|
||||||
|
interpreter.throw_exception<TypeError>("Cannot convert object to string");
|
||||||
|
if (interpreter.exception())
|
||||||
|
return {};
|
||||||
|
return string_value;
|
||||||
}
|
}
|
||||||
return js_string(heap(), String::format("[object %s]", class_name()));
|
return js_string(heap(), String::format("[object %s]", class_name()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,8 +69,13 @@ String Value::to_string() const
|
||||||
return String::format("%.4f", as_double());
|
return String::format("%.4f", as_double());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_object())
|
if (is_object()) {
|
||||||
return as_object().to_primitive(Object::PreferredType::String).to_string();
|
auto primitive_value = as_object().to_primitive(Object::PreferredType::String);
|
||||||
|
// FIXME: Maybe we should pass in the Interpreter& and call interpreter.exception() instead?
|
||||||
|
if (primitive_value.is_empty())
|
||||||
|
return {};
|
||||||
|
return primitive_value.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
if (is_string())
|
if (is_string())
|
||||||
return m_value.as_string->string();
|
return m_value.as_string->string();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue