1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 20:27:35 +00:00

LibJS: Make StringObject::primitive_string() return a reference

This commit is contained in:
Andreas Kling 2020-04-29 12:33:28 +02:00
parent 7dadb75e28
commit 75f246dde8
3 changed files with 11 additions and 12 deletions

View file

@ -1178,7 +1178,7 @@ Value ArrayExpression::execute(Interpreter& interpreter) const
if (value.is_string())
string_to_spread = value.as_string()->string();
else
string_to_spread = static_cast<StringObject*>(&value.as_object())->primitive_string()->string();
string_to_spread = static_cast<const StringObject&>(value.as_object()).primitive_string().string();
for (size_t i = 0; i < string_to_spread.length(); ++i)
array->elements().append(js_string(interpreter, string_to_spread.substring(i, 1)));
continue;

View file

@ -37,8 +37,7 @@ public:
StringObject(PrimitiveString&, Object& prototype);
virtual ~StringObject() override;
// FIXME: Return const PrimitiveString&
const PrimitiveString* primitive_string() const { return &m_string; }
const PrimitiveString& primitive_string() const { return m_string; }
virtual Value value_of() const override
{
return Value(&m_string);

View file

@ -75,7 +75,7 @@ Value StringPrototype::char_at(Interpreter& interpreter)
if (interpreter.argument_count())
index = interpreter.argument(0).to_i32();
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()))
return js_string(interpreter, String::empty());
return js_string(interpreter, underlying_string.substring(index, 1));
@ -94,10 +94,10 @@ Value StringPrototype::repeat(Interpreter& interpreter)
if (interpreter.argument(0).to_number().is_infinity())
return interpreter.throw_exception<RangeError>("repeat count must be a finite number");
auto count = interpreter.argument(0).to_i32();
auto* string_object = static_cast<StringObject*>(this_object);
auto& string_object = static_cast<const StringObject&>(*this_object);
StringBuilder builder;
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, builder.to_string());
}
@ -117,7 +117,7 @@ Value StringPrototype::starts_with(Interpreter& interpreter)
position = number.to_i32();
}
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();
auto underlying_string_length = static_cast<i32>(underlying_string.length());
auto start = min(max(position, 0), underlying_string_length);
if (start + search_string_length > underlying_string_length)
@ -139,7 +139,7 @@ Value StringPrototype::index_of(Interpreter& interpreter)
if (interpreter.argument_count() >= 1)
needle_value = interpreter.argument(0);
auto needle = needle_value.to_string();
auto haystack = static_cast<const StringObject*>(this_object)->primitive_string()->string();
auto haystack = static_cast<const StringObject*>(this_object)->primitive_string().string();
return Value((i32)haystack.index_of(needle).value_or(-1));
}
@ -160,7 +160,7 @@ Value StringPrototype::to_lowercase(Interpreter& interpreter)
auto* string_object = string_object_from(interpreter);
if (!string_object)
return {};
return js_string(interpreter, string_object->primitive_string()->string().to_lowercase());
return js_string(interpreter, string_object->primitive_string().string().to_lowercase());
}
Value StringPrototype::to_uppercase(Interpreter& interpreter)
@ -168,7 +168,7 @@ Value StringPrototype::to_uppercase(Interpreter& interpreter)
auto* string_object = string_object_from(interpreter);
if (!string_object)
return {};
return js_string(interpreter, string_object->primitive_string()->string().to_uppercase());
return js_string(interpreter, string_object->primitive_string().string().to_uppercase());
}
Value StringPrototype::length_getter(Interpreter& interpreter)
@ -176,7 +176,7 @@ Value StringPrototype::length_getter(Interpreter& interpreter)
auto* string_object = string_object_from(interpreter);
if (!string_object)
return {};
return Value((i32)string_object->primitive_string()->string().length());
return Value((i32)string_object->primitive_string().string().length());
}
Value StringPrototype::to_string(Interpreter& interpreter)
@ -184,7 +184,7 @@ Value StringPrototype::to_string(Interpreter& interpreter)
auto* string_object = string_object_from(interpreter);
if (!string_object)
return {};
return js_string(interpreter, string_object->primitive_string()->string());
return js_string(interpreter, string_object->primitive_string().string());
}
enum class PadPlacement {