mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-12 01:46:46 +02:00
Report outline storage retained by scripts, environments, module namespace objects, iterator helpers, property name iterators, argument objects, and error tracebacks. These objects keep vectors and maps that can grow independently from their GC cell sizes.
48 lines
2.2 KiB
C++
48 lines
2.2 KiB
C++
/*
|
|
* Copyright (c) 2022, David Tuin <davidot@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibJS/Module.h>
|
|
#include <LibJS/Runtime/Completion.h>
|
|
#include <LibJS/Runtime/Object.h>
|
|
|
|
namespace JS {
|
|
|
|
class ModuleNamespaceObject final : public Object {
|
|
JS_OBJECT(ModuleNamespaceObject, Object);
|
|
GC_DECLARE_ALLOCATOR(ModuleNamespaceObject);
|
|
|
|
public:
|
|
// 10.4.6 Module Namespace Exotic Objects, https://tc39.es/ecma262/#sec-module-namespace-exotic-objects
|
|
|
|
virtual ThrowCompletionOr<Object*> internal_get_prototype_of() const override;
|
|
virtual ThrowCompletionOr<bool> internal_set_prototype_of(Object* prototype) override;
|
|
virtual ThrowCompletionOr<bool> internal_is_extensible() const override;
|
|
virtual ThrowCompletionOr<bool> internal_prevent_extensions() override;
|
|
virtual ThrowCompletionOr<Optional<PropertyDescriptor>> internal_get_own_property(PropertyKey const&) const override;
|
|
virtual ThrowCompletionOr<bool> internal_define_own_property(PropertyKey const&, PropertyDescriptor&, Optional<PropertyDescriptor>* precomputed_get_own_property = nullptr) override;
|
|
virtual ThrowCompletionOr<bool> internal_has_property(PropertyKey const&) const override;
|
|
virtual ThrowCompletionOr<Value> internal_get(PropertyKey const&, Value receiver, CacheableGetPropertyMetadata* = nullptr, PropertyLookupPhase = PropertyLookupPhase::OwnProperty) const override;
|
|
virtual ThrowCompletionOr<bool> internal_set(PropertyKey const&, Value value, Value receiver, CacheableSetPropertyMetadata*, PropertyLookupPhase) override;
|
|
virtual ThrowCompletionOr<bool> internal_delete(PropertyKey const&) override;
|
|
virtual ThrowCompletionOr<GC::RootVector<Value>> internal_own_property_keys() const override;
|
|
virtual void initialize(Realm&) override;
|
|
|
|
virtual bool eligible_for_own_property_enumeration_fast_path() const final { return false; }
|
|
|
|
private:
|
|
ModuleNamespaceObject(Realm&, Module* module, Vector<Utf16FlyString> exports);
|
|
|
|
virtual void visit_edges(Visitor&) override;
|
|
virtual size_t external_memory_size() const override;
|
|
|
|
GC::Ptr<Module> m_module; // [[Module]]
|
|
Vector<Utf16FlyString> m_exports; // [[Exports]]
|
|
};
|
|
|
|
}
|