Files
ladybird/Libraries/LibJS/Runtime/ArgumentsObject.h
Andreas Kling 68fa684f76 LibJS: Account runtime storage as external memory
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.
2026-05-07 10:03:09 +02:00

47 lines
1.8 KiB
C++

/*
* Copyright (c) 2021-2025, Andreas Kling <andreas@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibJS/Runtime/Completion.h>
#include <LibJS/Runtime/Environment.h>
#include <LibJS/Runtime/Object.h>
namespace JS {
class ArgumentsObject final : public Object {
JS_OBJECT(ArgumentsObject, Object);
GC_DECLARE_ALLOCATOR(ArgumentsObject);
public:
virtual void initialize(Realm&) override;
virtual ~ArgumentsObject() override = default;
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<Value> internal_get(PropertyKey const&, Value receiver, CacheableGetPropertyMetadata*, PropertyLookupPhase) const override;
virtual ThrowCompletionOr<bool> internal_set(PropertyKey const&, Value value, Value receiver, CacheableSetPropertyMetadata*, PropertyLookupPhase) override;
virtual ThrowCompletionOr<bool> internal_delete(PropertyKey const&) override;
void set_mapped_names(Vector<Utf16FlyString> mapped_names) { m_mapped_names = move(mapped_names); }
private:
ArgumentsObject(Realm&, Environment&, bool parameter_list_is_empty);
[[nodiscard]] bool parameter_map_has(PropertyKey const&) const;
[[nodiscard]] Value get_from_parameter_map(PropertyKey const&) const;
void set_in_parameter_map(PropertyKey const&, Value);
void delete_from_parameter_map(PropertyKey const&);
virtual void visit_edges(Cell::Visitor&) override;
virtual size_t external_memory_size() const override;
GC::Ref<Environment> m_environment;
Vector<Utf16FlyString> m_mapped_names;
};
}