/* * Copyright (c) 2020-2021, Andreas Kling * Copyright (c) 2020-2021, Linus Groh * Copyright (c) 2022, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace JS { ExecutionContext::ExecutionContext(Heap& heap) : arguments(heap) { } ExecutionContext::ExecutionContext(MarkedVector existing_arguments) : arguments(move(existing_arguments)) { } ExecutionContext ExecutionContext::copy() const { ExecutionContext copy { arguments }; copy.function = function; copy.realm = realm; copy.script_or_module = script_or_module; copy.lexical_environment = lexical_environment; copy.variable_environment = variable_environment; copy.private_environment = private_environment; copy.current_node = current_node; copy.function_name = function_name; copy.this_value = this_value; copy.is_strict_mode = is_strict_mode; return copy; } void ExecutionContext::visit_edges(Cell::Visitor& visitor) { visitor.visit(function); visitor.visit(realm); visitor.visit(variable_environment); visitor.visit(lexical_environment); visitor.visit(private_environment); visitor.visit(context_owner); visitor.visit(this_value); script_or_module.visit( [](Empty) {}, [&](auto& script_or_module) { visitor.visit(script_or_module); }); } }