mirror of
https://github.com/RGBCube/serenity
synced 2025-05-26 01:55:08 +00:00
LibJS: Implement indexed access for StringObject
This commit is contained in:
parent
a81bce8c2a
commit
1ba2e6768d
2 changed files with 27 additions and 0 deletions
|
@ -272,6 +272,12 @@ Value Object::get_by_index(i32 property_index) const
|
|||
|
||||
const Object* object = this;
|
||||
while (object) {
|
||||
if (is_string_object()) {
|
||||
auto& string = static_cast<const StringObject*>(this)->primitive_string().string();
|
||||
if (property_index < (i32)string.length())
|
||||
return js_string(heap(), string.substring(property_index, 1));
|
||||
return js_undefined();
|
||||
}
|
||||
if (static_cast<size_t>(property_index) < object->m_elements.size()) {
|
||||
auto value = object->m_elements[property_index];
|
||||
if (value.is_empty())
|
||||
|
@ -397,6 +403,8 @@ bool Object::has_own_property(const FlyString& property_name) const
|
|||
bool ok;
|
||||
i32 property_index = property_name.to_int(ok);
|
||||
if (ok && property_index >= 0) {
|
||||
if (is_string_object())
|
||||
return property_index < (i32)static_cast<const StringObject*>(this)->primitive_string().string().length();
|
||||
if (static_cast<size_t>(property_index) >= m_elements.size())
|
||||
return false;
|
||||
return !m_elements[property_index].is_empty();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue