From df5414f47fbacbb7f1f4b4a0129c7f19573de955 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 14 Sep 2021 18:21:07 +0200 Subject: [PATCH] LibJS: Reorganize ExecutionContext a little bit - Move it to a separate header file - Annotate the members that represent spec slots - Reorganize the members (by spec vs non-spec) --- .../LibJS/Runtime/ExecutionContext.h | 37 +++++++++++++++++++ Userland/Libraries/LibJS/Runtime/VM.h | 20 +--------- 2 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 Userland/Libraries/LibJS/Runtime/ExecutionContext.h diff --git a/Userland/Libraries/LibJS/Runtime/ExecutionContext.h b/Userland/Libraries/LibJS/Runtime/ExecutionContext.h new file mode 100644 index 0000000000..9a7fa0ef04 --- /dev/null +++ b/Userland/Libraries/LibJS/Runtime/ExecutionContext.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020-2021, Andreas Kling + * Copyright (c) 2020-2021, Linus Groh + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include +#include + +namespace JS { + +// 9.4 Execution Contexts, https://tc39.es/ecma262/#sec-execution-contexts +struct ExecutionContext { + explicit ExecutionContext(Heap& heap) + : arguments(heap) + { + } + + FunctionObject* function { nullptr }; // [[Function]] + Realm* realm { nullptr }; // [[Realm]] + Environment* lexical_environment { nullptr }; // [[LexicalEnvironment]] + Environment* variable_environment { nullptr }; // [[VariableEnvironment]] + + ASTNode const* current_node { nullptr }; + FlyString function_name; + Value this_value; + MarkedValueList arguments; + Object* arguments_object { nullptr }; + bool is_strict_mode { false }; +}; + +} diff --git a/Userland/Libraries/LibJS/Runtime/VM.h b/Userland/Libraries/LibJS/Runtime/VM.h index 8d5708f3da..b0b402e943 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.h +++ b/Userland/Libraries/LibJS/Runtime/VM.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -42,25 +43,6 @@ struct ScopeFrame { bool pushed_environment { false }; }; -// 9.4 Execution Contexts, https://tc39.es/ecma262/#sec-execution-contexts -struct ExecutionContext { - explicit ExecutionContext(Heap& heap) - : arguments(heap) - { - } - - const ASTNode* current_node { nullptr }; - FlyString function_name; - FunctionObject* function { nullptr }; - Value this_value; - MarkedValueList arguments; - Object* arguments_object { nullptr }; - Environment* lexical_environment { nullptr }; - Environment* variable_environment { nullptr }; - Realm* realm { nullptr }; - bool is_strict_mode { false }; -}; - class VM : public RefCounted { public: struct CustomData {