ladybird/Userland/Libraries/LibJS/Runtime/StringObject.h
Andreas Kling 686213c2b8 LibJS: Make Object.getOwnPropertyDescriptor() work on String subscripts
String objects are a bit special since the indexed properties are
overridden by the contents of the underlying PrimitiveString.

getOwnPropertyDescriptor() was not taking this into account, and would
instead return undefined when asked about an indexed property in a
String object.
2021-06-19 11:34:19 +02:00

40 lines
997 B
C++

/*
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibJS/Runtime/Object.h>
namespace JS {
class StringObject : public Object {
JS_OBJECT(StringObject, Object);
public:
static StringObject* create(GlobalObject&, PrimitiveString&);
StringObject(PrimitiveString&, Object& prototype);
virtual void initialize(GlobalObject&) override;
virtual ~StringObject() override;
const PrimitiveString& primitive_string() const { return m_string; }
virtual Value value_of() const override
{
return Value(&m_string);
}
private:
virtual bool is_string_object() const final { return true; }
virtual void visit_edges(Visitor&) override;
virtual Optional<PropertyDescriptor> get_own_property_descriptor(PropertyName const&) const override;
PrimitiveString& m_string;
};
template<>
inline bool Object::fast_is<StringObject>() const { return is_string_object(); }
}