mirror of
https://github.com/RGBCube/serenity
synced 2025-05-22 19:05:07 +00:00
LibJS: Add js_string(Interpreter&, String)
This commit is contained in:
parent
d8e944e899
commit
faac43597a
11 changed files with 33 additions and 26 deletions
|
@ -323,19 +323,19 @@ Value UnaryExpression::execute(Interpreter& interpreter) const
|
||||||
case UnaryOp::Typeof:
|
case UnaryOp::Typeof:
|
||||||
switch (lhs_result.type()) {
|
switch (lhs_result.type()) {
|
||||||
case Value::Type::Undefined:
|
case Value::Type::Undefined:
|
||||||
return js_string(interpreter.heap(), "undefined");
|
return js_string(interpreter, "undefined");
|
||||||
case Value::Type::Null:
|
case Value::Type::Null:
|
||||||
// yes, this is on purpose. yes, this is how javascript works.
|
// yes, this is on purpose. yes, this is how javascript works.
|
||||||
// yes, it's silly.
|
// yes, it's silly.
|
||||||
return js_string(interpreter.heap(), "object");
|
return js_string(interpreter, "object");
|
||||||
case Value::Type::Number:
|
case Value::Type::Number:
|
||||||
return js_string(interpreter.heap(), "number");
|
return js_string(interpreter, "number");
|
||||||
case Value::Type::String:
|
case Value::Type::String:
|
||||||
return js_string(interpreter.heap(), "string");
|
return js_string(interpreter, "string");
|
||||||
case Value::Type::Object:
|
case Value::Type::Object:
|
||||||
return js_string(interpreter.heap(), "object");
|
return js_string(interpreter, "object");
|
||||||
case Value::Type::Boolean:
|
case Value::Type::Boolean:
|
||||||
return js_string(interpreter.heap(), "boolean");
|
return js_string(interpreter, "boolean");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +806,7 @@ Value MemberExpression::execute(Interpreter& interpreter) const
|
||||||
|
|
||||||
Value StringLiteral::execute(Interpreter& interpreter) const
|
Value StringLiteral::execute(Interpreter& interpreter) const
|
||||||
{
|
{
|
||||||
return js_string(interpreter.heap(), m_value);
|
return js_string(interpreter, m_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Value NumericLiteral::execute(Interpreter&) const
|
Value NumericLiteral::execute(Interpreter&) const
|
||||||
|
|
|
@ -50,7 +50,7 @@ Value DateConstructor::call(Interpreter& interpreter)
|
||||||
auto date = construct(interpreter);
|
auto date = construct(interpreter);
|
||||||
if (!date.is_object())
|
if (!date.is_object())
|
||||||
return {};
|
return {};
|
||||||
return js_string(interpreter.heap(), static_cast<Date&>(date.as_object()).string());
|
return js_string(interpreter, static_cast<Date&>(date.as_object()).string());
|
||||||
}
|
}
|
||||||
|
|
||||||
Value DateConstructor::construct(Interpreter& interpreter)
|
Value DateConstructor::construct(Interpreter& interpreter)
|
||||||
|
|
|
@ -155,7 +155,7 @@ Value DatePrototype::to_date_string(Interpreter& interpreter)
|
||||||
if (!this_object)
|
if (!this_object)
|
||||||
return {};
|
return {};
|
||||||
auto string = this_object->date_string();
|
auto string = this_object->date_string();
|
||||||
return js_string(interpreter.heap(), move(string));
|
return js_string(interpreter, move(string));
|
||||||
}
|
}
|
||||||
|
|
||||||
Value DatePrototype::to_time_string(Interpreter& interpreter)
|
Value DatePrototype::to_time_string(Interpreter& interpreter)
|
||||||
|
@ -164,7 +164,7 @@ Value DatePrototype::to_time_string(Interpreter& interpreter)
|
||||||
if (!this_object)
|
if (!this_object)
|
||||||
return {};
|
return {};
|
||||||
auto string = this_object->time_string();
|
auto string = this_object->time_string();
|
||||||
return js_string(interpreter.heap(), move(string));
|
return js_string(interpreter, move(string));
|
||||||
}
|
}
|
||||||
|
|
||||||
Value DatePrototype::to_string(Interpreter& interpreter)
|
Value DatePrototype::to_string(Interpreter& interpreter)
|
||||||
|
@ -173,7 +173,7 @@ Value DatePrototype::to_string(Interpreter& interpreter)
|
||||||
if (!this_object)
|
if (!this_object)
|
||||||
return {};
|
return {};
|
||||||
auto string = this_object->string();
|
auto string = this_object->string();
|
||||||
return js_string(interpreter.heap(), move(string));
|
return js_string(interpreter, move(string));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ Value ErrorPrototype::name_getter(Interpreter& interpreter)
|
||||||
return {};
|
return {};
|
||||||
if (!this_object->is_error())
|
if (!this_object->is_error())
|
||||||
return interpreter.throw_exception<Error>("TypeError", "Not an Error object");
|
return interpreter.throw_exception<Error>("TypeError", "Not an Error object");
|
||||||
return js_string(interpreter.heap(), static_cast<const Error*>(this_object)->name());
|
return js_string(interpreter, static_cast<const Error*>(this_object)->name());
|
||||||
}
|
}
|
||||||
|
|
||||||
Value ErrorPrototype::message_getter(Interpreter& interpreter)
|
Value ErrorPrototype::message_getter(Interpreter& interpreter)
|
||||||
|
@ -62,7 +62,7 @@ Value ErrorPrototype::message_getter(Interpreter& interpreter)
|
||||||
return {};
|
return {};
|
||||||
if (!this_object->is_error())
|
if (!this_object->is_error())
|
||||||
return interpreter.throw_exception<Error>("TypeError", "Not an Error object");
|
return interpreter.throw_exception<Error>("TypeError", "Not an Error object");
|
||||||
return js_string(interpreter.heap(), static_cast<const Error*>(this_object)->message());
|
return js_string(interpreter, static_cast<const Error*>(this_object)->message());
|
||||||
}
|
}
|
||||||
|
|
||||||
Value ErrorPrototype::to_string(Interpreter& interpreter)
|
Value ErrorPrototype::to_string(Interpreter& interpreter)
|
||||||
|
@ -82,10 +82,10 @@ Value ErrorPrototype::to_string(Interpreter& interpreter)
|
||||||
message = object_message_property.value().to_string();
|
message = object_message_property.value().to_string();
|
||||||
|
|
||||||
if (name.length() == 0)
|
if (name.length() == 0)
|
||||||
return js_string(interpreter.heap(), message);
|
return js_string(interpreter, message);
|
||||||
if (message.length() == 0)
|
if (message.length() == 0)
|
||||||
return js_string(interpreter.heap(), name);
|
return js_string(interpreter, name);
|
||||||
return js_string(interpreter.heap(), String::format("%s: %s", name.characters(), message.characters()));
|
return js_string(interpreter, String::format("%s: %s", name.characters(), message.characters()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,10 +67,10 @@ Value ObjectConstructor::get_own_property_names(Interpreter& interpreter)
|
||||||
if (object->is_array()) {
|
if (object->is_array()) {
|
||||||
auto* array = static_cast<const Array*>(object);
|
auto* array = static_cast<const Array*>(object);
|
||||||
for (i32 i = 0; i < array->length(); ++i)
|
for (i32 i = 0; i < array->length(); ++i)
|
||||||
result->push(js_string(interpreter.heap(), String::number(i)));
|
result->push(js_string(interpreter, String::number(i)));
|
||||||
}
|
}
|
||||||
for (auto& it : object->shape().property_table())
|
for (auto& it : object->shape().property_table())
|
||||||
result->push(js_string(interpreter.heap(), it.key));
|
result->push(js_string(interpreter, it.key));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <LibJS/Heap/Heap.h>
|
#include <LibJS/Heap/Heap.h>
|
||||||
|
#include <LibJS/Interpreter.h>
|
||||||
#include <LibJS/Runtime/PrimitiveString.h>
|
#include <LibJS/Runtime/PrimitiveString.h>
|
||||||
|
|
||||||
namespace JS {
|
namespace JS {
|
||||||
|
@ -43,4 +44,9 @@ PrimitiveString* js_string(Heap& heap, String string)
|
||||||
return heap.allocate<PrimitiveString>(move(string));
|
return heap.allocate<PrimitiveString>(move(string));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PrimitiveString* js_string(Interpreter& interpreter, String string)
|
||||||
|
{
|
||||||
|
return js_string(interpreter.heap(), string);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,5 +45,6 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
PrimitiveString* js_string(Heap&, String);
|
PrimitiveString* js_string(Heap&, String);
|
||||||
|
PrimitiveString* js_string(Interpreter&, String);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,8 +59,8 @@ Value StringPrototype::char_at(Interpreter& interpreter)
|
||||||
ASSERT(this_object->is_string_object());
|
ASSERT(this_object->is_string_object());
|
||||||
auto underlying_string = static_cast<const StringObject*>(this_object)->primitive_string()->string();
|
auto underlying_string = static_cast<const StringObject*>(this_object)->primitive_string()->string();
|
||||||
if (index < 0 || index >= static_cast<i32>(underlying_string.length()))
|
if (index < 0 || index >= static_cast<i32>(underlying_string.length()))
|
||||||
return js_string(interpreter.heap(), String::empty());
|
return js_string(interpreter, String::empty());
|
||||||
return js_string(interpreter.heap(), underlying_string.substring(index, 1));
|
return js_string(interpreter, underlying_string.substring(index, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
Value StringPrototype::repeat(Interpreter& interpreter)
|
Value StringPrototype::repeat(Interpreter& interpreter)
|
||||||
|
@ -70,7 +70,7 @@ Value StringPrototype::repeat(Interpreter& interpreter)
|
||||||
return {};
|
return {};
|
||||||
ASSERT(this_object->is_string_object());
|
ASSERT(this_object->is_string_object());
|
||||||
if (!interpreter.argument_count())
|
if (!interpreter.argument_count())
|
||||||
return js_string(interpreter.heap(), String::empty());
|
return js_string(interpreter, String::empty());
|
||||||
i32 count = 0;
|
i32 count = 0;
|
||||||
count = interpreter.argument(0).to_i32();
|
count = interpreter.argument(0).to_i32();
|
||||||
if (count < 0) {
|
if (count < 0) {
|
||||||
|
@ -81,7 +81,7 @@ Value StringPrototype::repeat(Interpreter& interpreter)
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
for (i32 i = 0; i < count; ++i)
|
for (i32 i = 0; i < count; ++i)
|
||||||
builder.append(string_object->primitive_string()->string());
|
builder.append(string_object->primitive_string()->string());
|
||||||
return js_string(interpreter.heap(), builder.to_string());
|
return js_string(interpreter, builder.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
Value StringPrototype::starts_with(Interpreter& interpreter)
|
Value StringPrototype::starts_with(Interpreter& interpreter)
|
||||||
|
|
|
@ -76,7 +76,7 @@ JS::Value CanvasRenderingContext2DWrapper::fill_style_getter(JS::Interpreter& in
|
||||||
auto* impl = impl_from(interpreter);
|
auto* impl = impl_from(interpreter);
|
||||||
if (!impl)
|
if (!impl)
|
||||||
return {};
|
return {};
|
||||||
return JS::js_string(interpreter.heap(), impl->fill_style());
|
return JS::js_string(interpreter, impl->fill_style());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanvasRenderingContext2DWrapper::fill_style_setter(JS::Interpreter& interpreter, JS::Value value)
|
void CanvasRenderingContext2DWrapper::fill_style_setter(JS::Interpreter& interpreter, JS::Value value)
|
||||||
|
|
|
@ -68,7 +68,7 @@ static Element* impl_from(JS::Interpreter& interpreter)
|
||||||
JS::Value ElementWrapper::inner_html_getter(JS::Interpreter& interpreter)
|
JS::Value ElementWrapper::inner_html_getter(JS::Interpreter& interpreter)
|
||||||
{
|
{
|
||||||
if (auto* impl = impl_from(interpreter))
|
if (auto* impl = impl_from(interpreter))
|
||||||
return JS::js_string(interpreter.heap(), impl->inner_html());
|
return JS::js_string(interpreter, impl->inner_html());
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ void ElementWrapper::inner_html_setter(JS::Interpreter& interpreter, JS::Value v
|
||||||
JS::Value ElementWrapper::id_getter(JS::Interpreter& interpreter)
|
JS::Value ElementWrapper::id_getter(JS::Interpreter& interpreter)
|
||||||
{
|
{
|
||||||
if (auto* impl = impl_from(interpreter))
|
if (auto* impl = impl_from(interpreter))
|
||||||
return JS::js_string(interpreter.heap(), impl->attribute("id"));
|
return JS::js_string(interpreter, impl->attribute("id"));
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -277,7 +277,7 @@ JS::Value ReplObject::repl_help(JS::Interpreter& interpreter)
|
||||||
help_text.append(" help(): display this menu\n");
|
help_text.append(" help(): display this menu\n");
|
||||||
help_text.append(" load(files): Accepts file names as params to load into running session. For example repl.load(\"js/1.js\", \"js/2.js\", \"js/3.js\")\n");
|
help_text.append(" load(files): Accepts file names as params to load into running session. For example repl.load(\"js/1.js\", \"js/2.js\", \"js/3.js\")\n");
|
||||||
String result = help_text.to_string();
|
String result = help_text.to_string();
|
||||||
return js_string(interpreter.heap(), result);
|
return js_string(interpreter, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS::Value ReplObject::load_file(JS::Interpreter& interpreter)
|
JS::Value ReplObject::load_file(JS::Interpreter& interpreter)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue