From 5edd259b0a0cea1fae994173fcfbb393f5ee9563 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 21 Jun 2021 23:35:30 +0200 Subject: [PATCH] LibJS: Rename EnvironmentRecord::parent() => outer_environment() This name matches the spec (corresponds to the [[OuterEnv]] slot.) --- Userland/Libraries/LibJS/AST.cpp | 2 +- Userland/Libraries/LibJS/Interpreter.cpp | 2 +- .../LibJS/Runtime/EnvironmentRecord.cpp | 6 +-- .../LibJS/Runtime/EnvironmentRecord.h | 7 ++-- .../LibJS/Runtime/ObjectEnvironmentRecord.cpp | 4 +- Userland/Libraries/LibJS/Runtime/VM.cpp | 38 +++++++++---------- 6 files changed, 30 insertions(+), 29 deletions(-) diff --git a/Userland/Libraries/LibJS/AST.cpp b/Userland/Libraries/LibJS/AST.cpp index 14e6697f76..29c7accf1b 100644 --- a/Userland/Libraries/LibJS/AST.cpp +++ b/Userland/Libraries/LibJS/AST.cpp @@ -231,7 +231,7 @@ Value CallExpression::execute(Interpreter& interpreter, GlobalObject& global_obj // and subsequently GetThisEnvironment() instead. auto* function_environment = interpreter.current_environment(); if (!function_environment->current_function()) - function_environment = static_cast(function_environment->parent()); + function_environment = static_cast(function_environment->outer_environment()); auto* super_constructor = function_environment->current_function()->prototype(); // FIXME: Functions should track their constructor kind. diff --git a/Userland/Libraries/LibJS/Interpreter.cpp b/Userland/Libraries/LibJS/Interpreter.cpp index 80bec1d8cd..150daefb44 100644 --- a/Userland/Libraries/LibJS/Interpreter.cpp +++ b/Userland/Libraries/LibJS/Interpreter.cpp @@ -144,7 +144,7 @@ void Interpreter::exit_scope(const ScopeNode& scope_node) while (!m_scope_stack.is_empty()) { auto popped_scope = m_scope_stack.take_last(); if (popped_scope.pushed_environment) - vm().call_frame().environment_record = vm().call_frame().environment_record->parent(); + vm().call_frame().environment_record = vm().call_frame().environment_record->outer_environment(); if (popped_scope.scope_node.ptr() == &scope_node) break; } diff --git a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp index 4e2329c83e..5349d84687 100644 --- a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp +++ b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp @@ -9,9 +9,9 @@ namespace JS { -EnvironmentRecord::EnvironmentRecord(EnvironmentRecord* parent) +EnvironmentRecord::EnvironmentRecord(EnvironmentRecord* outer_environment) : Object(vm().environment_record_shape()) - , m_parent(parent) + , m_outer_environment(outer_environment) { } @@ -23,7 +23,7 @@ EnvironmentRecord::EnvironmentRecord(GlobalObjectTag tag) void EnvironmentRecord::visit_edges(Visitor& visitor) { Base::visit_edges(visitor); - visitor.visit(m_parent); + visitor.visit(m_outer_environment); } } diff --git a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h index ccf488c56b..976eaa3d23 100644 --- a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h +++ b/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h @@ -25,8 +25,9 @@ public: virtual bool has_this_binding() const = 0; virtual Value get_this_binding(GlobalObject&) const = 0; - EnvironmentRecord* parent() { return m_parent; } - EnvironmentRecord const* parent() const { return m_parent; } + // [[OuterEnv]] + EnvironmentRecord* outer_environment() { return m_outer_environment; } + EnvironmentRecord const* outer_environment() const { return m_outer_environment; } protected: explicit EnvironmentRecord(EnvironmentRecord* parent); @@ -35,7 +36,7 @@ protected: virtual void visit_edges(Visitor&) override; private: - EnvironmentRecord* m_parent { nullptr }; + EnvironmentRecord* m_outer_environment { nullptr }; }; } diff --git a/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.cpp index 591554c6da..fb63fa6433 100644 --- a/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.cpp +++ b/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.cpp @@ -41,12 +41,12 @@ bool ObjectEnvironmentRecord::delete_from_scope(FlyString const& name) bool ObjectEnvironmentRecord::has_this_binding() const { - return parent()->has_this_binding(); + return outer_environment()->has_this_binding(); } Value ObjectEnvironmentRecord::get_this_binding(GlobalObject& global_object) const { - return parent()->get_this_binding(global_object); + return outer_environment()->get_this_binding(global_object); } } diff --git a/Userland/Libraries/LibJS/Runtime/VM.cpp b/Userland/Libraries/LibJS/Runtime/VM.cpp index c8f297756d..bc05eaac54 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.cpp +++ b/Userland/Libraries/LibJS/Runtime/VM.cpp @@ -135,10 +135,10 @@ void VM::set_variable(const FlyString& name, Value value, GlobalObject& global_o { Optional possible_match; if (!specific_scope && m_call_stack.size()) { - for (auto* scope = current_scope(); scope; scope = scope->parent()) { - possible_match = scope->get_from_scope(name); + for (auto* environment_record = current_scope(); environment_record; environment_record = environment_record->outer_environment()) { + possible_match = environment_record->get_from_scope(name); if (possible_match.has_value()) { - specific_scope = scope; + specific_scope = environment_record; break; } } @@ -167,10 +167,10 @@ bool VM::delete_variable(FlyString const& name) EnvironmentRecord* specific_scope = nullptr; Optional possible_match; if (!m_call_stack.is_empty()) { - for (auto* scope = current_scope(); scope; scope = scope->parent()) { - possible_match = scope->get_from_scope(name); + for (auto* environment_record = current_scope(); environment_record; environment_record = environment_record->outer_environment()) { + possible_match = environment_record->get_from_scope(name); if (possible_match.has_value()) { - specific_scope = scope; + specific_scope = environment_record; break; } } @@ -376,8 +376,8 @@ Value VM::get_variable(const FlyString& name, GlobalObject& global_object) return call_frame().arguments_object; } - for (auto* scope = current_scope(); scope; scope = scope->parent()) { - auto possible_match = scope->get_from_scope(name); + for (auto* environment_record = current_scope(); environment_record; environment_record = environment_record->outer_environment()) { + auto possible_match = environment_record->get_from_scope(name); if (exception()) return {}; if (possible_match.has_value()) @@ -393,10 +393,10 @@ Value VM::get_variable(const FlyString& name, GlobalObject& global_object) Reference VM::get_reference(const FlyString& name) { if (m_call_stack.size()) { - for (auto* scope = current_scope(); scope; scope = scope->parent()) { - if (is(scope)) + for (auto* environment_record = current_scope(); environment_record; environment_record = environment_record->outer_environment()) { + if (is(environment_record)) break; - auto possible_match = scope->get_from_scope(name); + auto possible_match = environment_record->get_from_scope(name); if (possible_match.has_value()) return { Reference::LocalVariable, name }; } @@ -508,9 +508,9 @@ Value VM::resolve_this_binding(GlobalObject& global_object) const const EnvironmentRecord* VM::find_this_scope() const { // We will always return because the Global environment will always be reached, which has a |this| binding. - for (auto* scope = current_scope(); scope; scope = scope->parent()) { - if (scope->has_this_binding()) - return scope; + for (auto* environment_record = current_scope(); environment_record; environment_record = environment_record->outer_environment()) { + if (environment_record->has_this_binding()) + return environment_record; } VERIFY_NOT_REACHED(); } @@ -624,11 +624,11 @@ void VM::dump_backtrace() const void VM::dump_scope_chain() const { - for (auto* scope = current_scope(); scope; scope = scope->parent()) { - dbgln("+> {} ({:p})", scope->class_name(), scope); - if (is(*scope)) { - auto& environment_record = static_cast(*scope); - for (auto& variable : environment_record.variables()) { + for (auto* environment_record = current_scope(); environment_record; environment_record = environment_record->outer_environment()) { + dbgln("+> {} ({:p})", environment_record->class_name(), environment_record); + if (is(*environment_record)) { + auto& declarative_environment_record = static_cast(*environment_record); + for (auto& variable : declarative_environment_record.variables()) { dbgln(" {}", variable.key); } }