summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibJS/AST.cpp18
-rw-r--r--Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp6
-rw-r--r--Userland/Libraries/LibJS/Bytecode/Instruction.h126
-rw-r--r--Userland/Libraries/LibJS/Bytecode/Interpreter.cpp6
-rw-r--r--Userland/Libraries/LibJS/Bytecode/Op.cpp16
-rw-r--r--Userland/Libraries/LibJS/Bytecode/Op.h8
-rw-r--r--Userland/Libraries/LibJS/CMakeLists.txt10
-rw-r--r--Userland/Libraries/LibJS/Forward.h10
-rw-r--r--Userland/Libraries/LibJS/Heap/Cell.h2
-rw-r--r--Userland/Libraries/LibJS/Interpreter.cpp26
-rw-r--r--Userland/Libraries/LibJS/Interpreter.h6
-rw-r--r--Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp26
-rw-r--r--Userland/Libraries/LibJS/Runtime/AbstractOperations.h8
-rw-r--r--Userland/Libraries/LibJS/Runtime/BoundFunction.cpp4
-rw-r--r--Userland/Libraries/LibJS/Runtime/BoundFunction.h2
-rw-r--r--Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp (renamed from Userland/Libraries/LibJS/Runtime/DeclarativeEnvironmentRecord.cpp)38
-rw-r--r--Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h (renamed from Userland/Libraries/LibJS/Runtime/DeclarativeEnvironmentRecord.h)26
-rw-r--r--Userland/Libraries/LibJS/Runtime/Environment.cpp (renamed from Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp)8
-rw-r--r--Userland/Libraries/LibJS/Runtime/Environment.h (renamed from Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h)32
-rw-r--r--Userland/Libraries/LibJS/Runtime/FunctionEnvironment.cpp (renamed from Userland/Libraries/LibJS/Runtime/FunctionEnvironmentRecord.cpp)20
-rw-r--r--Userland/Libraries/LibJS/Runtime/FunctionEnvironment.h (renamed from Userland/Libraries/LibJS/Runtime/FunctionEnvironmentRecord.h)14
-rw-r--r--Userland/Libraries/LibJS/Runtime/FunctionObject.h4
-rw-r--r--Userland/Libraries/LibJS/Runtime/GeneratorObject.cpp8
-rw-r--r--Userland/Libraries/LibJS/Runtime/GeneratorObject.h4
-rw-r--r--Userland/Libraries/LibJS/Runtime/GlobalEnvironment.cpp (renamed from Userland/Libraries/LibJS/Runtime/GlobalEnvironmentRecord.cpp)60
-rw-r--r--Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h (renamed from Userland/Libraries/LibJS/Runtime/GlobalEnvironmentRecord.h)26
-rw-r--r--Userland/Libraries/LibJS/Runtime/GlobalObject.cpp6
-rw-r--r--Userland/Libraries/LibJS/Runtime/GlobalObject.h6
-rw-r--r--Userland/Libraries/LibJS/Runtime/NativeFunction.cpp2
-rw-r--r--Userland/Libraries/LibJS/Runtime/NativeFunction.h2
-rw-r--r--Userland/Libraries/LibJS/Runtime/ObjectEnvironment.cpp (renamed from Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.cpp)28
-rw-r--r--Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h (renamed from Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.h)14
-rw-r--r--Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp14
-rw-r--r--Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h10
-rw-r--r--Userland/Libraries/LibJS/Runtime/ProxyObject.cpp4
-rw-r--r--Userland/Libraries/LibJS/Runtime/ProxyObject.h2
-rw-r--r--Userland/Libraries/LibJS/Runtime/Reference.cpp16
-rw-r--r--Userland/Libraries/LibJS/Runtime/Reference.h20
-rw-r--r--Userland/Libraries/LibJS/Runtime/VM.cpp70
-rw-r--r--Userland/Libraries/LibJS/Runtime/VM.h24
40 files changed, 366 insertions, 366 deletions
diff --git a/Userland/Libraries/LibJS/AST.cpp b/Userland/Libraries/LibJS/AST.cpp
index dd32e7f7c2..66d90aa2bf 100644
--- a/Userland/Libraries/LibJS/AST.cpp
+++ b/Userland/Libraries/LibJS/AST.cpp
@@ -19,12 +19,12 @@
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/BigInt.h>
#include <LibJS/Runtime/Error.h>
-#include <LibJS/Runtime/FunctionEnvironmentRecord.h>
+#include <LibJS/Runtime/FunctionEnvironment.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/IteratorOperations.h>
#include <LibJS/Runtime/MarkedValueList.h>
#include <LibJS/Runtime/NativeFunction.h>
-#include <LibJS/Runtime/ObjectEnvironmentRecord.h>
+#include <LibJS/Runtime/ObjectEnvironment.h>
#include <LibJS/Runtime/OrdinaryFunctionObject.h>
#include <LibJS/Runtime/PrimitiveString.h>
#include <LibJS/Runtime/Reference.h>
@@ -133,7 +133,7 @@ CallExpression::ThisAndCallee CallExpression::compute_this_and_callee(Interprete
Value this_value;
if (is<SuperExpression>(member_expression.object())) {
- auto super_base = interpreter.current_function_environment_record()->get_super_base();
+ auto super_base = interpreter.current_function_environment()->get_super_base();
if (super_base.is_nullish()) {
vm.throw_exception<TypeError>(global_object, ErrorType::ObjectPrototypeNullOrUndefinedOnSuperPropertyAccess, super_base.to_string_without_side_effects());
return {};
@@ -242,7 +242,7 @@ Value CallExpression::execute(Interpreter& interpreter, GlobalObject& global_obj
return {};
auto& this_er = get_this_environment(interpreter.vm());
- verify_cast<FunctionEnvironmentRecord>(this_er).bind_this_value(global_object, result);
+ verify_cast<FunctionEnvironment>(this_er).bind_this_value(global_object, result);
} else {
result = vm.call(function, this_value, move(arguments));
}
@@ -305,8 +305,8 @@ Value WithStatement::execute(Interpreter& interpreter, GlobalObject& global_obje
VERIFY(object);
- auto* object_environment_record = new_object_environment(*object, true, interpreter.vm().running_execution_context().lexical_environment);
- TemporaryChange<EnvironmentRecord*> scope_change(interpreter.vm().running_execution_context().lexical_environment, object_environment_record);
+ auto* object_environment = new_object_environment(*object, true, interpreter.vm().running_execution_context().lexical_environment);
+ TemporaryChange<Environment*> scope_change(interpreter.vm().running_execution_context().lexical_environment, object_environment);
return interpreter.execute_statement(global_object, m_body).value_or(js_undefined());
}
@@ -854,7 +854,7 @@ Value ClassDeclaration::execute(Interpreter& interpreter, GlobalObject& global_o
if (interpreter.exception())
return {};
- interpreter.lexical_environment()->put_into_environment_record(m_class_expression->name(), { class_constructor, DeclarationKind::Let });
+ interpreter.lexical_environment()->put_into_environment(m_class_expression->name(), { class_constructor, DeclarationKind::Let });
return {};
}
@@ -2049,8 +2049,8 @@ Value TryStatement::execute(Interpreter& interpreter, GlobalObject& global_objec
HashMap<FlyString, Variable> parameters;
parameters.set(m_handler->parameter(), Variable { exception->value(), DeclarationKind::Var });
- auto* catch_scope = interpreter.heap().allocate<DeclarativeEnvironmentRecord>(global_object, move(parameters), interpreter.vm().running_execution_context().lexical_environment);
- TemporaryChange<EnvironmentRecord*> scope_change(interpreter.vm().running_execution_context().lexical_environment, catch_scope);
+ auto* catch_scope = interpreter.heap().allocate<DeclarativeEnvironment>(global_object, move(parameters), interpreter.vm().running_execution_context().lexical_environment);
+ TemporaryChange<Environment*> scope_change(interpreter.vm().running_execution_context().lexical_environment, catch_scope);
result = interpreter.execute_statement(global_object, m_handler->body());
}
}
diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp
index 0c9232c39f..7f02bb0d56 100644
--- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp
+++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp
@@ -14,7 +14,7 @@
#include <LibJS/Bytecode/Op.h>
#include <LibJS/Bytecode/Register.h>
#include <LibJS/Bytecode/StringTable.h>
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
namespace JS {
@@ -63,7 +63,7 @@ void ScopeNode::generate_bytecode(Bytecode::Generator& generator) const
}
if (!scope_variables_with_declaration_kind.is_empty()) {
- generator.emit<Bytecode::Op::PushDeclarativeEnvironmentRecord>(move(scope_variables_with_declaration_kind));
+ generator.emit<Bytecode::Op::PushDeclarativeEnvironment>(move(scope_variables_with_declaration_kind));
}
for (auto& child : children()) {
@@ -1214,7 +1214,7 @@ void TryStatement::generate_bytecode(Bytecode::Generator& generator) const
if (!m_finalizer)
generator.emit<Bytecode::Op::LeaveUnwindContext>();
if (!m_handler->parameter().is_empty()) {
- // FIXME: We need a separate DeclarativeEnvironmentRecord here
+ // FIXME: We need a separate DeclarativeEnvironment here
generator.emit<Bytecode::Op::SetVariable>(generator.intern_string(m_handler->parameter()));
}
m_handler->body().generate_bytecode(generator);
diff --git a/Userland/Libraries/LibJS/Bytecode/Instruction.h b/Userland/Libraries/LibJS/Bytecode/Instruction.h
index 8c0e9289dc..2064c4a2b1 100644
--- a/Userland/Libraries/LibJS/Bytecode/Instruction.h
+++ b/Userland/Libraries/LibJS/Bytecode/Instruction.h
@@ -9,69 +9,69 @@
#include <AK/Forward.h>
#include <LibJS/Forward.h>
-#define ENUMERATE_BYTECODE_OPS(O) \
- O(Load) \
- O(LoadImmediate) \
- O(Store) \
- O(Add) \
- O(Sub) \
- O(Mul) \
- O(Div) \
- O(Mod) \
- O(Exp) \
- O(GreaterThan) \
- O(GreaterThanEquals) \
- O(LessThan) \
- O(LessThanEquals) \
- O(AbstractInequals) \
- O(AbstractEquals) \
- O(TypedInequals) \
- O(TypedEquals) \
- O(NewBigInt) \
- O(NewArray) \
- O(IteratorToArray) \
- O(NewString) \
- O(NewObject) \
- O(NewRegExp) \
- O(CopyObjectExcludingProperties) \
- O(GetVariable) \
- O(SetVariable) \
- O(PutById) \
- O(GetById) \
- O(PutByValue) \
- O(GetByValue) \
- O(Jump) \
- O(JumpConditional) \
- O(JumpNullish) \
- O(JumpUndefined) \
- O(Call) \
- O(NewFunction) \
- O(Return) \
- O(BitwiseAnd) \
- O(BitwiseOr) \
- O(BitwiseXor) \
- O(BitwiseNot) \
- O(Not) \
- O(UnaryPlus) \
- O(UnaryMinus) \
- O(Typeof) \
- O(LeftShift) \
- O(RightShift) \
- O(UnsignedRightShift) \
- O(In) \
- O(InstanceOf) \
- O(ConcatString) \
- O(Increment) \
- O(Decrement) \
- O(Throw) \
- O(PushDeclarativeEnvironmentRecord) \
- O(EnterUnwindContext) \
- O(LeaveUnwindContext) \
- O(ContinuePendingUnwind) \
- O(Yield) \
- O(GetIterator) \
- O(IteratorNext) \
- O(IteratorResultDone) \
+#define ENUMERATE_BYTECODE_OPS(O) \
+ O(Load) \
+ O(LoadImmediate) \
+ O(Store) \
+ O(Add) \
+ O(Sub) \
+ O(Mul) \
+ O(Div) \
+ O(Mod) \
+ O(Exp) \
+ O(GreaterThan) \
+ O(GreaterThanEquals) \
+ O(LessThan) \
+ O(LessThanEquals) \
+ O(AbstractInequals) \
+ O(AbstractEquals) \
+ O(TypedInequals) \
+ O(TypedEquals) \
+ O(NewBigInt) \
+ O(NewArray) \
+ O(IteratorToArray) \
+ O(NewString) \
+ O(NewObject) \
+ O(NewRegExp) \
+ O(CopyObjectExcludingProperties) \
+ O(GetVariable) \
+ O(SetVariable) \
+ O(PutById) \
+ O(GetById) \
+ O(PutByValue) \
+ O(GetByValue) \
+ O(Jump) \
+ O(JumpConditional) \
+ O(JumpNullish) \
+ O(JumpUndefined) \
+ O(Call) \
+ O(NewFunction) \
+ O(Return) \
+ O(BitwiseAnd) \
+ O(BitwiseOr) \
+ O(BitwiseXor) \
+ O(BitwiseNot) \
+ O(Not) \
+ O(UnaryPlus) \
+ O(UnaryMinus) \
+ O(Typeof) \
+ O(LeftShift) \
+ O(RightShift) \
+ O(UnsignedRightShift) \
+ O(In) \
+ O(InstanceOf) \
+ O(ConcatString) \
+ O(Increment) \
+ O(Decrement) \
+ O(Throw) \
+ O(PushDeclarativeEnvironment) \
+ O(EnterUnwindContext) \
+ O(LeaveUnwindContext) \
+ O(ContinuePendingUnwind) \
+ O(Yield) \
+ O(GetIterator) \
+ O(IteratorNext) \
+ O(IteratorResultDone) \
O(IteratorResultValue)
namespace JS::Bytecode {
diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp
index 77072459ba..9e6f04b26f 100644
--- a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp
+++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp
@@ -10,7 +10,7 @@
#include <LibJS/Bytecode/Instruction.h>
#include <LibJS/Bytecode/Interpreter.h>
#include <LibJS/Bytecode/Op.h>
-#include <LibJS/Runtime/GlobalEnvironmentRecord.h>
+#include <LibJS/Runtime/GlobalEnvironment.h>
#include <LibJS/Runtime/GlobalObject.h>
namespace JS::Bytecode {
@@ -49,8 +49,8 @@ Value Interpreter::run(Executable const& executable, BasicBlock const* entry_poi
execution_context.this_value = &global_object();
static FlyString global_execution_context_name = "(*BC* global execution context)";
execution_context.function_name = global_execution_context_name;
- execution_context.lexical_environment = &global_object().environment_record();
- execution_context.variable_environment = &global_object().environment_record();
+ execution_context.lexical_environment = &global_object().environment();
+ execution_context.variable_environment = &global_object().environment();
VERIFY(!vm().exception());
// FIXME: How do we know if we're in strict mode? Maybe the Bytecode::Block should know this?
// execution_context.is_strict_mode = ???;
diff --git a/Userland/Libraries/LibJS/Bytecode/Op.cpp b/Userland/Libraries/LibJS/Bytecode/Op.cpp
index 521d523c45..c4c6be890f 100644
--- a/Userland/Libraries/LibJS/Bytecode/Op.cpp
+++ b/Userland/Libraries/LibJS/Bytecode/Op.cpp
@@ -12,8 +12,8 @@
#include <LibJS/Bytecode/Op.h>
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/BigInt.h>
-#include <LibJS/Runtime/DeclarativeEnvironmentRecord.h>
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/DeclarativeEnvironment.h>
+#include <LibJS/Runtime/Environment.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/IteratorOperations.h>
#include <LibJS/Runtime/OrdinaryFunctionObject.h>
@@ -381,14 +381,14 @@ void ContinuePendingUnwind::replace_references_impl(BasicBlock const& from, Basi
m_resume_target = Label { to };
}
-void PushDeclarativeEnvironmentRecord::execute_impl(Bytecode::Interpreter& interpreter) const
+void PushDeclarativeEnvironment::execute_impl(Bytecode::Interpreter& interpreter) const
{
HashMap<FlyString, Variable> resolved_variables;
for (auto& it : m_variables)
resolved_variables.set(interpreter.current_executable().get_string(it.key), it.value);
- auto* environment_record = interpreter.vm().heap().allocate<DeclarativeEnvironmentRecord>(interpreter.global_object(), move(resolved_variables), interpreter.vm().lexical_environment());
- interpreter.vm().running_execution_context().lexical_environment = environment_record;
- interpreter.vm().running_execution_context().variable_environment = environment_record;
+ auto* environment = interpreter.vm().heap().allocate<DeclarativeEnvironment>(interpreter.global_object(), move(resolved_variables), interpreter.vm().lexical_environment());
+ interpreter.vm().running_execution_context().lexical_environment = environment;
+ interpreter.vm().running_execution_context().variable_environment = environment;
}
void Yield::execute_impl(Bytecode::Interpreter& interpreter) const
@@ -635,10 +635,10 @@ String ContinuePendingUnwind::to_string_impl(Bytecode::Executable const&) const
return String::formatted("ContinuePendingUnwind resume:{}", m_resume_target);
}
-String PushDeclarativeEnvironmentRecord::to_string_impl(const Bytecode::Executable& executable) const
+String PushDeclarativeEnvironment::to_string_impl(const Bytecode::Executable& executable) const
{
StringBuilder builder;
- builder.append("PushDeclarativeEnvironmentRecord");
+ builder.append("PushDeclarativeEnvironment");
if (!m_variables.is_empty()) {
builder.append(" {");
Vector<String> names;
diff --git a/Userland/Libraries/LibJS/Bytecode/Op.h b/Userland/Libraries/LibJS/Bytecode/Op.h
index 85cb43d43f..eafbda878f 100644
--- a/Userland/Libraries/LibJS/Bytecode/Op.h
+++ b/Userland/Libraries/LibJS/Bytecode/Op.h
@@ -14,7 +14,7 @@
#include <LibJS/Bytecode/Register.h>
#include <LibJS/Bytecode/StringTable.h>
#include <LibJS/Heap/Cell.h>
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
#include <LibJS/Runtime/Value.h>
namespace JS::Bytecode::Op {
@@ -635,10 +635,10 @@ private:
Optional<Label> m_continuation_label;
};
-class PushDeclarativeEnvironmentRecord final : public Instruction {
+class PushDeclarativeEnvironment final : public Instruction {
public:
- explicit PushDeclarativeEnvironmentRecord(HashMap<u32, Variable> variables)
- : Instruction(Type::PushDeclarativeEnvironmentRecord)
+ explicit PushDeclarativeEnvironment(HashMap<u32, Variable> variables)
+ : Instruction(Type::PushDeclarativeEnvironment)
, m_variables(move(variables))
{
}
diff --git a/Userland/Libraries/LibJS/CMakeLists.txt b/Userland/Libraries/LibJS/CMakeLists.txt
index 3a82706afd..fb7af79148 100644
--- a/Userland/Libraries/LibJS/CMakeLists.txt
+++ b/Userland/Libraries/LibJS/CMakeLists.txt
@@ -50,8 +50,8 @@ set(SOURCES
Runtime/DateConstructor.cpp
Runtime/Date.cpp
Runtime/DatePrototype.cpp
- Runtime/DeclarativeEnvironmentRecord.cpp
- Runtime/EnvironmentRecord.cpp
+ Runtime/DeclarativeEnvironment.cpp
+ Runtime/Environment.cpp
Runtime/ErrorConstructor.cpp
Runtime/Error.cpp
Runtime/ErrorPrototype.cpp
@@ -61,14 +61,14 @@ set(SOURCES
Runtime/FinalizationRegistryConstructor.cpp
Runtime/FinalizationRegistryPrototype.cpp
Runtime/FunctionConstructor.cpp
- Runtime/FunctionEnvironmentRecord.cpp
+ Runtime/FunctionEnvironment.cpp
Runtime/FunctionObject.cpp
Runtime/FunctionPrototype.cpp
Runtime/GeneratorFunctionConstructor.cpp
Runtime/GeneratorFunctionPrototype.cpp
Runtime/GeneratorObject.cpp
Runtime/GeneratorObjectPrototype.cpp
- Runtime/GlobalEnvironmentRecord.cpp
+ Runtime/GlobalEnvironment.cpp
Runtime/GlobalObject.cpp
Runtime/IndexedProperties.cpp
Runtime/IteratorOperations.cpp
@@ -88,7 +88,7 @@ set(SOURCES
Runtime/NumberPrototype.cpp
Runtime/Object.cpp
Runtime/ObjectConstructor.cpp
- Runtime/ObjectEnvironmentRecord.cpp
+ Runtime/ObjectEnvironment.cpp
Runtime/ObjectPrototype.cpp
Runtime/PrimitiveString.cpp
Runtime/Promise.cpp
diff --git a/Userland/Libraries/LibJS/Forward.h b/Userland/Libraries/LibJS/Forward.h
index 1e56bd0155..3519a7e521 100644
--- a/Userland/Libraries/LibJS/Forward.h
+++ b/Userland/Libraries/LibJS/Forward.h
@@ -120,16 +120,16 @@ class BoundFunction;
class Cell;
class CellAllocator;
class Console;
-class DeclarativeEnvironmentRecord;
+class DeclarativeEnvironment;
class DeferGC;
-class EnvironmentRecord;
+class Environment;
class Error;
class ErrorType;
class Exception;
class Expression;
-class FunctionEnvironmentRecord;
+class FunctionEnvironment;
class FunctionNode;
-class GlobalEnvironmentRecord;
+class GlobalEnvironment;
class GlobalObject;
class HandleImpl;
class Heap;
@@ -138,7 +138,7 @@ class Interpreter;
class MarkedValueList;
class NativeFunction;
class NativeProperty;
-class ObjectEnvironmentRecord;
+class ObjectEnvironment;
class PrimitiveString;
class PromiseReaction;
class PromiseReactionJob;
diff --git a/Userland/Libraries/LibJS/Heap/Cell.h b/Userland/Libraries/LibJS/Heap/Cell.h
index 3e320d8172..764104d84c 100644
--- a/Userland/Libraries/LibJS/Heap/Cell.h
+++ b/Userland/Libraries/LibJS/Heap/Cell.h
@@ -50,7 +50,7 @@ public:
virtual ~Visitor() = default;
};
- virtual bool is_environment_record() const { return false; }
+ virtual bool is_environment() const { return false; }
virtual void visit_edges(Visitor&) { }
Heap& heap() const;
diff --git a/Userland/Libraries/LibJS/Interpreter.cpp b/Userland/Libraries/LibJS/Interpreter.cpp
index 6805cd6879..0b8acd4264 100644
--- a/Userland/Libraries/LibJS/Interpreter.cpp
+++ b/Userland/Libraries/LibJS/Interpreter.cpp
@@ -9,8 +9,8 @@
#include <AK/StringBuilder.h>
#include <LibJS/AST.h>
#include <LibJS/Interpreter.h>
-#include <LibJS/Runtime/FunctionEnvironmentRecord.h>
-#include <LibJS/Runtime/GlobalEnvironmentRecord.h>
+#include <LibJS/Runtime/FunctionEnvironment.h>
+#include <LibJS/Runtime/GlobalEnvironment.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/Object.h>
#include <LibJS/Runtime/OrdinaryFunctionObject.h>
@@ -51,8 +51,8 @@ void Interpreter::run(GlobalObject& global_object, const Program& program)
execution_context.this_value = &global_object;
static FlyString global_execution_context_name = "(global execution context)";
execution_context.function_name = global_execution_context_name;
- execution_context.lexical_environment = &global_object.environment_record();
- execution_context.variable_environment = &global_object.environment_record();
+ execution_context.lexical_environment = &global_object.environment();
+ execution_context.variable_environment = &global_object.environment();
VERIFY(!vm.exception());
execution_context.is_strict_mode = program.is_strict_mode();
vm.push_execution_context(execution_context, global_object);
@@ -93,7 +93,7 @@ void Interpreter::enter_scope(const ScopeNode& scope_node, ScopeType scope_type,
if (scope_type == ScopeType::Function) {
push_scope({ scope_type, scope_node, false });
for (auto& declaration : scope_node.functions())
- lexical_environment()->put_into_environment_record(declaration.name(), { js_undefined(), DeclarationKind::Var });
+ lexical_environment()->put_into_environment(declaration.name(), { js_undefined(), DeclarationKind::Var });
return;
}
@@ -130,16 +130,16 @@ void Interpreter::enter_scope(const ScopeNode& scope_node, ScopeType scope_type,
}
}
- bool pushed_environment_record = false;
+ bool pushed_environment = false;
if (!scope_variables_with_declaration_kind.is_empty()) {
- auto* environment_record = heap().allocate<DeclarativeEnvironmentRecord>(global_object, move(scope_variables_with_declaration_kind), lexical_environment());
- vm().running_execution_context().lexical_environment = environment_record;
- vm().running_execution_context().variable_environment = environment_record;
- pushed_environment_record = true;
+ auto* environment = heap().allocate<DeclarativeEnvironment>(global_object, move(scope_variables_with_declaration_kind), lexical_environment());
+ vm().running_execution_context().lexical_environment = environment;
+ vm().running_execution_context().variable_environment = environment;
+ pushed_environment = true;
}
- push_scope({ scope_type, scope_node, pushed_environment_record });
+ push_scope({ scope_type, scope_node, pushed_environment });
}
void Interpreter::exit_scope(const ScopeNode& scope_node)
@@ -198,9 +198,9 @@ Value Interpreter::execute_statement(GlobalObject& global_object, const Statemen
return last_value;
}
-FunctionEnvironmentRecord* Interpreter::current_function_environment_record()
+FunctionEnvironment* Interpreter::current_function_environment()
{
- return verify_cast<FunctionEnvironmentRecord>(vm().running_execution_context().lexical_environment);
+ return verify_cast<FunctionEnvironment>(vm().running_execution_context().lexical_environment);
}
}
diff --git a/Userland/Libraries/LibJS/Interpreter.h b/Userland/Libraries/LibJS/Interpreter.h
index a342fc8b10..204cf041d5 100644
--- a/Userland/Libraries/LibJS/Interpreter.h
+++ b/Userland/Libraries/LibJS/Interpreter.h
@@ -15,7 +15,7 @@
#include <LibJS/Forward.h>
#include <LibJS/Heap/DeferGC.h>
#include <LibJS/Heap/Heap.h>
-#include <LibJS/Runtime/DeclarativeEnvironmentRecord.h>
+#include <LibJS/Runtime/DeclarativeEnvironment.h>
#include <LibJS/Runtime/ErrorTypes.h>
#include <LibJS/Runtime/Exception.h>
#include <LibJS/Runtime/MarkedValueList.h>
@@ -56,9 +56,9 @@ public:
ALWAYS_INLINE Heap& heap() { return vm().heap(); }
ALWAYS_INLINE Exception* exception() { return vm().exception(); }
- EnvironmentRecord* lexical_environment() { return vm().lexical_environment(); }
+ Environment* lexical_environment() { return vm().lexical_environment(); }
- FunctionEnvironmentRecord* current_function_environment_record();
+ FunctionEnvironment* current_function_environment();
void enter_scope(const ScopeNode&, ScopeType, GlobalObject&);
void exit_scope(const ScopeNode&);
diff --git a/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp b/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp
index 9f045b211f..5e32edcb62 100644
--- a/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp
+++ b/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp
@@ -15,14 +15,14 @@
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/ArrayPrototype.h>
#include <LibJS/Runtime/BoundFunction.h>
-#include <LibJS/Runtime/DeclarativeEnvironmentRecord.h>
+#include <LibJS/Runtime/DeclarativeEnvironment.h>
#include <LibJS/Runtime/ErrorTypes.h>
-#include <LibJS/Runtime/FunctionEnvironmentRecord.h>
+#include <LibJS/Runtime/FunctionEnvironment.h>
#include <LibJS/Runtime/FunctionObject.h>
-#include <LibJS/Runtime/GlobalEnvironmentRecord.h>
+#include <LibJS/Runtime/GlobalEnvironment.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/Object.h>
-#include <LibJS/Runtime/ObjectEnvironmentRecord.h>
+#include <LibJS/Runtime/ObjectEnvironment.h>
#include <LibJS/Runtime/PropertyName.h>
#include <LibJS/Runtime/ProxyObject.h>
@@ -148,21 +148,21 @@ Object* get_prototype_from_constructor(GlobalObject& global_object, FunctionObje
}
// 9.1.2.2 NewDeclarativeEnvironment ( E ), https://tc39.es/ecma262/#sec-newdeclarativeenvironment
-DeclarativeEnvironmentRecord* new_declarative_environment(EnvironmentRecord& environment_record)
+DeclarativeEnvironment* new_declarative_environment(Environment& environment)
{
- auto& global_object = environment_record.global_object();
- return global_object.heap().allocate<DeclarativeEnvironmentRecord>(global_object, &environment_record);
+ auto& global_object = environment.global_object();
+ return global_object.heap().allocate<DeclarativeEnvironment>(global_object, &environment);
}
// 9.1.2.3 NewObjectEnvironment ( O, W, E ), https://tc39.es/ecma262/#sec-newobjectenvironment
-ObjectEnvironmentRecord* new_object_environment(Object& object, bool is_with_environment, EnvironmentRecord* environment_record)
+ObjectEnvironment* new_object_environment(Object& object, bool is_with_environment, Environment* environment)
{
auto& global_object = object.global_object();
- return global_object.heap().allocate<ObjectEnvironmentRecord>(global_object, object, is_with_environment ? ObjectEnvironmentRecord::IsWithEnvironment::Yes : ObjectEnvironmentRecord::IsWithEnvironment::No, environment_record);
+ return global_object.heap().allocate<ObjectEnvironment>(global_object, object, is_with_environment ? ObjectEnvironment::IsWithEnvironment::Yes : ObjectEnvironment::IsWithEnvironment::No, environment);
}
// 9.4.3 GetThisEnvironment ( ), https://tc39.es/ecma262/#sec-getthisenvironment
-EnvironmentRecord& get_this_environment(VM& vm)
+Environment& get_this_environment(VM& vm)
{
for (auto* env = vm.lexical_environment(); env; env = env->outer_environment()) {
if (env->has_this_binding())
@@ -175,7 +175,7 @@ EnvironmentRecord& get_this_environment(VM& vm)
Object* get_super_constructor(VM& vm)
{
auto& env = get_this_environment(vm);
- auto& active_function = verify_cast<FunctionEnvironmentRecord>(env).function_object();
+ auto& active_function = verify_cast<FunctionEnvironment>(env).function_object();
auto* super_constructor = active_function.prototype();
return super_constructor;
}
@@ -202,7 +202,7 @@ Value perform_eval(Value x, GlobalObject& caller_realm, CallerMode strict_caller
if (direct == EvalMode::Direct)
return interpreter.execute_statement(caller_realm, program).value_or(js_undefined());
- TemporaryChange scope_change(vm.running_execution_context().lexical_environment, static_cast<EnvironmentRecord*>(&caller_realm.environment_record()));
+ TemporaryChange scope_change(vm.running_execution_context().lexical_environment, static_cast<Environment*>(&caller_realm.environment()));
return interpreter.execute_statement(caller_realm, program).value_or(js_undefined());
}
@@ -234,7 +234,7 @@ Object* create_unmapped_arguments_object(GlobalObject& global_object, Vector<Val
}
// 10.4.4.7 CreateMappedArgumentsObject ( func, formals, argumentsList, env ), https://tc39.es/ecma262/#sec-createmappedargumentsobject
-Object* create_mapped_arguments_object(GlobalObject& global_object, FunctionObject& function, Vector<FunctionNode::Parameter> const& formals, Vector<Value> const& arguments, EnvironmentRecord&)
+Object* create_mapped_arguments_object(GlobalObject& global_object, FunctionObject& function, Vector<FunctionNode::Parameter> const& formals, Vector<Value> const& arguments, Environment&)
{
// FIXME: This implementation is incomplete and doesn't support the actual identifier mappings yet.
(void)formals;
diff --git a/Userland/Libraries/LibJS/Runtime/AbstractOperations.h b/Userland/Libraries/LibJS/Runtime/AbstractOperations.h
index ae5edb0602..652fecbd2b 100644
--- a/Userland/Libraries/LibJS/Runtime/AbstractOperations.h
+++ b/Userland/Libraries/LibJS/Runtime/AbstractOperations.h
@@ -14,9 +14,9 @@
namespace JS {
-DeclarativeEnvironmentRecord* new_declarative_environment(EnvironmentRecord&);
-ObjectEnvironmentRecord* new_object_environment(Object&, bool is_with_environment, EnvironmentRecord*);
-EnvironmentRecord& get_this_environment(VM&);
+DeclarativeEnvironment* new_declarative_environment(Environment&);
+ObjectEnvironment* new_object_environment(Object&, bool is_with_environment, Environment*);
+Environment& get_this_environment(VM&);
Object* get_super_constructor(VM&);
Value require_object_coercible(GlobalObject&, Value);
size_t length_of_array_like(GlobalObject&, Object const&);
@@ -25,7 +25,7 @@ FunctionObject* species_constructor(GlobalObject&, Object const&, FunctionObject
GlobalObject* get_function_realm(GlobalObject&, FunctionObject const&);
Object* get_prototype_from_constructor(GlobalObject&, FunctionObject const& constructor, Object* (GlobalObject::*intrinsic_default_prototype)());
Object* create_unmapped_arguments_object(GlobalObject&, Vector<Value> const& arguments);
-Object* create_mapped_arguments_object(GlobalObject&, FunctionObject&, Vector<FunctionNode::Parameter> const&, Vector<Value> const& arguments, EnvironmentRecord&);
+Object* create_mapped_arguments_object(GlobalObject&, FunctionObject&, Vector<FunctionNode::Parameter> const&, Vector<Value> const& arguments, Environment&);
enum class CallerMode {
Strict,
diff --git a/Userland/Libraries/LibJS/Runtime/BoundFunction.cpp b/Userland/Libraries/LibJS/Runtime/BoundFunction.cpp
index ef1d77ceef..f5c35e9200 100644
--- a/Userland/Libraries/LibJS/Runtime/BoundFunction.cpp
+++ b/Userland/Libraries/LibJS/Runtime/BoundFunction.cpp
@@ -44,9 +44,9 @@ Value BoundFunction::construct(FunctionObject& new_target)
return m_target_function->construct(new_target);
}
-FunctionEnvironmentRecord* BoundFunction::create_environment_record(FunctionObject& function_being_invoked)
+FunctionEnvironment* BoundFunction::create_environment(FunctionObject& function_being_invoked)
{
- return m_target_function->create_environment_record(function_being_invoked);
+ return m_target_function->create_environment(function_being_invoked);
}
void BoundFunction::visit_edges(Visitor& visitor)
diff --git a/Userland/Libraries/LibJS/Runtime/BoundFunction.h b/Userland/Libraries/LibJS/Runtime/BoundFunction.h
index 7af8c915ab..7403b392a3 100644
--- a/Userland/Libraries/LibJS/Runtime/BoundFunction.h
+++ b/Userland/Libraries/LibJS/Runtime/BoundFunction.h
@@ -22,7 +22,7 @@ public:
virtual Value construct(FunctionObject& new_target) override;
- virtual FunctionEnvironmentRecord* create_environment_record(FunctionObject&) override;
+ virtual FunctionEnvironment* create_environment(FunctionObject&) override;
virtual void visit_edges(Visitor&) override;
diff --git a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp
index 6e075e5be1..b200e775be 100644
--- a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironmentRecord.cpp
+++ b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp
@@ -5,7 +5,7 @@
*/
#include <LibJS/Interpreter.h>
-#include <LibJS/Runtime/DeclarativeEnvironmentRecord.h>
+#include <LibJS/Runtime/DeclarativeEnvironment.h>
#include <LibJS/Runtime/Error.h>
#include <LibJS/Runtime/FunctionObject.h>
#include <LibJS/Runtime/GlobalObject.h>
@@ -13,27 +13,27 @@
namespace JS {
-DeclarativeEnvironmentRecord::DeclarativeEnvironmentRecord()
- : EnvironmentRecord(nullptr)
+DeclarativeEnvironment::DeclarativeEnvironment()
+ : Environment(nullptr)
{
}
-DeclarativeEnvironmentRecord::DeclarativeEnvironmentRecord(EnvironmentRecord* parent_scope)
- : EnvironmentRecord(parent_scope)
+DeclarativeEnvironment::DeclarativeEnvironment(Environment* parent_scope)
+ : Environment(parent_scope)
{
}
-DeclarativeEnvironmentRecord::DeclarativeEnvironmentRecord(HashMap<FlyString, Variable> variables, EnvironmentRecord* parent_scope)
- : EnvironmentRecord(parent_scope)
+DeclarativeEnvironment::DeclarativeEnvironment(HashMap<FlyString, Variable> variables, Environment* parent_scope)
+ : Environment(parent_scope)
, m_variables(move(variables))
{
}
-DeclarativeEnvironmentRecord::~DeclarativeEnvironmentRecord()
+DeclarativeEnvironment::~DeclarativeEnvironment()
{
}
-void DeclarativeEnvironmentRecord::visit_edges(Visitor& visitor)
+void DeclarativeEnvironment::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
for (auto& it : m_variables)
@@ -42,29 +42,29 @@ void DeclarativeEnvironmentRecord::visit_edges(Visitor& visitor)
visitor.visit(it.value.value);
}
-Optional<Variable> DeclarativeEnvironmentRecord::get_from_environment_record(FlyString const& name) const
+Optional<Variable> DeclarativeEnvironment::get_from_environment(FlyString const& name) const
{
return m_variables.get(name);
}
-void DeclarativeEnvironmentRecord::put_into_environment_record(FlyString const& name, Variable variable)
+void DeclarativeEnvironment::put_into_environment(FlyString const& name, Variable variable)
{
m_variables.set(name, variable);
}
-bool DeclarativeEnvironmentRecord::delete_from_environment_record(FlyString const& name)
+bool DeclarativeEnvironment::delete_from_environment(FlyString const& name)
{
return m_variables.remove(name);
}
// 9.1.1.1.1 HasBinding ( N ), https://tc39.es/ecma262/#sec-declarative-environment-records-hasbinding-n
-bool DeclarativeEnvironmentRecord::has_binding(FlyString const& name) const
+bool DeclarativeEnvironment::has_binding(FlyString const& name) const
{
return m_bindings.contains(name);
}
// 9.1.1.1.2 CreateMutableBinding ( N, D ), https://tc39.es/ecma262/#sec-declarative-environment-records-createmutablebinding-n-d
-void DeclarativeEnvironmentRecord::create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted)
+void DeclarativeEnvironment::create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted)
{
auto result = m_bindings.set(name,
Binding {
@@ -78,7 +78,7 @@ void DeclarativeEnvironmentRecord::create_mutable_binding(GlobalObject&, FlyStri
}
// 9.1.1.1.3 CreateImmutableBinding ( N, S ), https://tc39.es/ecma262/#sec-declarative-environment-records-createimmutablebinding-n-s
-void DeclarativeEnvironmentRecord::create_immutable_binding(GlobalObject&, FlyString const& name, bool strict)
+void DeclarativeEnvironment::create_immutable_binding(GlobalObject&, FlyString const& name, bool strict)
{
auto result = m_bindings.set(name,
Binding {
@@ -92,7 +92,7 @@ void DeclarativeEnvironmentRecord::create_immutable_binding(GlobalObject&, FlySt
}
// 9.1.1.1.4 InitializeBinding ( N, V ), https://tc39.es/ecma262/#sec-declarative-environment-records-initializebinding-n-v
-void DeclarativeEnvironmentRecord::initialize_binding(GlobalObject&, FlyString const& name, Value value)
+void DeclarativeEnvironment::initialize_binding(GlobalObject&, FlyString const& name, Value value)
{
auto it = m_bindings.find(name);
VERIFY(it != m_bindings.end());
@@ -102,7 +102,7 @@ void DeclarativeEnvironmentRecord::initialize_binding(GlobalObject&, FlyString c
}
// 9.1.1.1.5 SetMutableBinding ( N, V, S ), https://tc39.es/ecma262/#sec-declarative-environment-records-setmutablebinding-n-v-s
-void DeclarativeEnvironmentRecord::set_mutable_binding(GlobalObject& global_object, FlyString const& name, Value value, bool strict)
+void DeclarativeEnvironment::set_mutable_binding(GlobalObject& global_object, FlyString const& name, Value value, bool strict)
{
auto it = m_bindings.find(name);
if (it == m_bindings.end()) {
@@ -133,7 +133,7 @@ void DeclarativeEnvironmentRecord::set_mutable_binding(GlobalObject& global_obje
}
// 9.1.1.1.6 GetBindingValue ( N, S ), https://tc39.es/ecma262/#sec-declarative-environment-records-getbindingvalue-n-s
-Value DeclarativeEnvironmentRecord::get_binding_value(GlobalObject& global_object, FlyString const& name, bool)
+Value DeclarativeEnvironment::get_binding_value(GlobalObject& global_object, FlyString const& name, bool)
{
auto it = m_bindings.find(name);
VERIFY(it != m_bindings.end());
@@ -145,7 +145,7 @@ Value DeclarativeEnvironmentRecord::get_binding_value(GlobalObject& global_objec
}
// 9.1.1.1.7 DeleteBinding ( N ), https://tc39.es/ecma262/#sec-declarative-environment-records-deletebinding-n
-bool DeclarativeEnvironmentRecord::delete_binding(GlobalObject&, FlyString const& name)
+bool DeclarativeEnvironment::delete_binding(GlobalObject&, FlyString const& name)
{
auto it = m_bindings.find(name);
VERIFY(it != m_bindings.end());
diff --git a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironmentRecord.h b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h
index c463959399..1e1c3149e4 100644
--- a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironmentRecord.h
+++ b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h
@@ -8,7 +8,7 @@
#include <AK/FlyString.h>
#include <AK/HashMap.h>
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
#include <LibJS/Runtime/Value.h>
namespace JS {
@@ -21,19 +21,19 @@ struct Binding {
bool initialized { false };
};
-class DeclarativeEnvironmentRecord : public EnvironmentRecord {
- JS_ENVIRONMENT_RECORD(DeclarativeEnvironmentRecord, EnvironmentRecord);
+class DeclarativeEnvironment : public Environment {
+ JS_ENVIRONMENT(DeclarativeEnvironment, Environment);
public:
- DeclarativeEnvironmentRecord();
- explicit DeclarativeEnvironmentRecord(EnvironmentRecord* parent_scope);
- DeclarativeEnvironmentRecord(HashMap<FlyString, Variable> variables, EnvironmentRecord* parent_scope);
- virtual ~DeclarativeEnvironmentRecord() override;
+ DeclarativeEnvironment();
+ explicit DeclarativeEnvironment(Environment* parent_scope);
+ DeclarativeEnvironment(HashMap<FlyString, Variable> variables, Environment* parent_scope);
+ virtual ~DeclarativeEnvironment() override;
- // ^EnvironmentRecord
- virtual Optional<Variable> get_from_environment_record(FlyString const&) const override;
- virtual void put_into_environment_record(FlyString const&, Variable) override;
- virtual bool delete_from_environment_record(FlyString const&) override;
+ // ^Environment
+ virtual Optional<Variable> get_from_environment(FlyString const&) const override;
+ virtual void put_into_environment(FlyString const&, Variable) override;
+ virtual bool delete_from_environment(FlyString const&) override;
HashMap<FlyString, Variable> const& variables() const { return m_variables; }
@@ -49,13 +49,13 @@ protected:
virtual void visit_edges(Visitor&) override;
private:
- virtual bool is_declarative_environment_record() const override { return true; }
+ virtual bool is_declarative_environment() const override { return true; }
HashMap<FlyString, Variable> m_variables;
HashMap<FlyString, Binding> m_bindings;
};
template<>
-inline bool EnvironmentRecord::fast_is<DeclarativeEnvironmentRecord>() const { return is_declarative_environment_record(); }
+inline bool Environment::fast_is<DeclarativeEnvironment>() const { return is_declarative_environment(); }
}
diff --git a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/Environment.cpp
index fc9e5687f4..37722c06a3 100644
--- a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.cpp
+++ b/Userland/Libraries/LibJS/Runtime/Environment.cpp
@@ -4,23 +4,23 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
#include <LibJS/Runtime/VM.h>
namespace JS {
-EnvironmentRecord::EnvironmentRecord(EnvironmentRecord* outer_environment)
+Environment::Environment(Environment* outer_environment)
: m_outer_environment(outer_environment)
{
}
-void EnvironmentRecord::initialize(GlobalObject& global_object)
+void Environment::initialize(GlobalObject& global_object)
{
m_global_object = &global_object;
Cell::initialize(global_object);
}
-void EnvironmentRecord::visit_edges(Visitor& visitor)
+void Environment::visit_edges(Visitor& visitor)
{
Cell::visit_edges(visitor);
visitor.visit(m_outer_environment);
diff --git a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h b/Userland/Libraries/LibJS/Runtime/Environment.h
index 443165818a..0ed71f8965 100644
--- a/Userland/Libraries/LibJS/Runtime/EnvironmentRecord.h
+++ b/Userland/Libraries/LibJS/Runtime/Environment.h
@@ -15,21 +15,21 @@ struct Variable {
DeclarationKind declaration_kind;
};
-#define JS_ENVIRONMENT_RECORD(class_, base_class) \
-public: \
- using Base = base_class; \
+#define JS_ENVIRONMENT(class_, base_class) \
+public: \
+ using Base = base_class; \
virtual char const* class_name() const override { return #class_; }
-class EnvironmentRecord : public Cell {
+class Environment : public Cell {
public:
GlobalObject& global_object() { return *m_global_object; }
GlobalObject const& global_object() const { return *m_global_object; }
virtual void initialize(GlobalObject&) override;
- virtual Optional<Variable> get_from_environment_record(FlyString const&) const = 0;
- virtual void put_into_environment_record(FlyString const&, Variable) = 0;
- virtual bool delete_from_environment_record(FlyString const&) = 0;
+ virtual Optional<Variable> get_from_environment(FlyString const&) const = 0;
+ virtual void put_into_environment(FlyString const&, Variable) = 0;
+ virtual bool delete_from_environment(FlyString const&) = 0;
virtual bool has_this_binding() const { return false; }
virtual Value get_this_binding(GlobalObject&) const { return {}; }
@@ -45,28 +45,28 @@ public:
virtual bool delete_binding(GlobalObject&, [[maybe_unused]] FlyString const& name) { return false; }
// [[OuterEnv]]
- EnvironmentRecord* outer_environment() { return m_outer_environment; }
- EnvironmentRecord const* outer_environment() const { return m_outer_environment; }
+ Environment* outer_environment() { return m_outer_environment; }
+ Environment const* outer_environment() const { return m_outer_environment; }
- virtual bool is_global_environment_record() const { return false; }
- virtual bool is_declarative_environment_record() const { return false; }
- virtual bool is_function_environment_record() const { return false; }
+ virtual bool is_global_environment() const { return false; }
+ virtual bool is_declarative_environment() const { return false; }
+ virtual bool is_function_environment() const { return false; }
template<typename T>
bool fast_is() const = delete;
- virtual char const* class_name() const override { return "EnvironmentRecord"; }
+ virtual char const* class_name() const override { return "Environment"; }
protected:
- explicit EnvironmentRecord(EnvironmentRecord* parent);
+ explicit Environment(Environment* parent);
virtual void visit_edges(Visitor&) override;
private:
- virtual bool is_environment_record() const final { return true; }
+ virtual bool is_environment() const final { return true; }
GlobalObject* m_global_object { nullptr };
- EnvironmentRecord* m_outer_environment { nullptr };
+ Environment* m_outer_environment { nullptr };
};
}
diff --git a/Userland/Libraries/LibJS/Runtime/FunctionEnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/FunctionEnvironment.cpp
index 3819fbb7cb..722a5e55c7 100644
--- a/Userland/Libraries/LibJS/Runtime/FunctionEnvironmentRecord.cpp
+++ b/Userland/Libraries/LibJS/Runtime/FunctionEnvironment.cpp
@@ -5,22 +5,22 @@
*/
#include <LibJS/Interpreter.h>
-#include <LibJS/Runtime/FunctionEnvironmentRecord.h>
+#include <LibJS/Runtime/FunctionEnvironment.h>
#include <LibJS/Runtime/FunctionObject.h>
#include <LibJS/Runtime/GlobalObject.h>
namespace JS {
-FunctionEnvironmentRecord::FunctionEnvironmentRecord(EnvironmentRecord* parent_scope, HashMap<FlyString, Variable> variables)
- : DeclarativeEnvironmentRecord(variables, parent_scope)
+FunctionEnvironment::FunctionEnvironment(Environment* parent_scope, HashMap<FlyString, Variable> variables)
+ : DeclarativeEnvironment(variables, parent_scope)
{
}
-FunctionEnvironmentRecord::~FunctionEnvironmentRecord()
+FunctionEnvironment::~FunctionEnvironment()
{
}
-void FunctionEnvironmentRecord::visit_edges(Visitor& visitor)
+void FunctionEnvironment::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_this_value);
@@ -29,7 +29,7 @@ void FunctionEnvironmentRecord::visit_edges(Visitor& visitor)
}
// 9.1.1.3.5 GetSuperBase ( ), https://tc39.es/ecma262/#sec-getsuperbase
-Value FunctionEnvironmentRecord::get_super_base() const
+Value FunctionEnvironment::get_super_base() const
{
VERIFY(m_function_object);
auto home_object = m_function_object->home_object();
@@ -39,7 +39,7 @@ Value FunctionEnvironmentRecord::get_super_base() const
}
// 9.1.1.3.2 HasThisBinding ( ), https://tc39.es/ecma262/#sec-function-environment-records-hasthisbinding
-bool FunctionEnvironmentRecord::has_this_binding() const
+bool FunctionEnvironment::has_this_binding() const
{
if (this_binding_status() == ThisBindingStatus::Lexical)
return false;
@@ -47,7 +47,7 @@ bool FunctionEnvironmentRecord::has_this_binding() const
}
// 9.1.1.3.3 HasSuperBinding ( ), https://tc39.es/ecma262/#sec-function-environment-records-hassuperbinding
-bool FunctionEnvironmentRecord::has_super_binding() const
+bool FunctionEnvironment::has_super_binding() const
{
if (this_binding_status() == ThisBindingStatus::Lexical)
return false;
@@ -57,7 +57,7 @@ bool FunctionEnvironmentRecord::has_super_binding() const
}
// 9.1.1.3.4 GetThisBinding ( ), https://tc39.es/ecma262/#sec-function-environment-records-getthisbinding
-Value FunctionEnvironmentRecord::get_this_binding(GlobalObject& global_object) const
+Value FunctionEnvironment::get_this_binding(GlobalObject& global_object) const
{
VERIFY(has_this_binding());
if (this_binding_status() == ThisBindingStatus::Uninitialized) {
@@ -68,7 +68,7 @@ Value FunctionEnvironmentRecord::get_this_binding(GlobalObject& global_object) c
}
// 9.1.1.3.1 BindThisValue ( V ), https://tc39.es/ecma262/#sec-bindthisvalue
-Value FunctionEnvironmentRecord::bind_this_value(GlobalObject& global_object, Value this_value)
+Value FunctionEnvironment::bind_this_value(GlobalObject& global_object, Value this_value)
{
VERIFY(this_binding_status() != ThisBindingStatus::Lexical);
if (this_binding_status() == ThisBindingStatus::Initialized) {
diff --git a/Userland/Libraries/LibJS/Runtime/FunctionEnvironmentRecord.h b/Userland/Libraries/LibJS/Runtime/FunctionEnvironment.h
index aca3a8a223..83f63b0173 100644
--- a/Userland/Libraries/LibJS/Runtime/FunctionEnvironmentRecord.h
+++ b/Userland/Libraries/LibJS/Runtime/FunctionEnvironment.h
@@ -6,12 +6,12 @@
#pragma once
-#include <LibJS/Runtime/DeclarativeEnvironmentRecord.h>
+#include <LibJS/Runtime/DeclarativeEnvironment.h>
namespace JS {
-class FunctionEnvironmentRecord final : public DeclarativeEnvironmentRecord {
- JS_ENVIRONMENT_RECORD(FunctionEnvironmentRecord, DeclarativeEnvironmentRecord);
+class FunctionEnvironment final : public DeclarativeEnvironment {
+ JS_ENVIRONMENT(FunctionEnvironment, DeclarativeEnvironment);
public:
enum class ThisBindingStatus : u8 {
@@ -20,8 +20,8 @@ public:
Uninitialized,
};
- FunctionEnvironmentRecord(EnvironmentRecord* parent_scope, HashMap<FlyString, Variable> variables);
- virtual ~FunctionEnvironmentRecord() override;
+ FunctionEnvironment(Environment* parent_scope, HashMap<FlyString, Variable> variables);
+ virtual ~FunctionEnvironment() override;
// [[ThisValue]]
Value this_value() const { return m_this_value; }
@@ -51,7 +51,7 @@ public:
Value bind_this_value(GlobalObject&, Value);
private:
- virtual bool is_function_environment_record() const override { return true; }
+ virtual bool is_function_environment() const override { return true; }
virtual void visit_edges(Visitor&) override;
Value m_this_value;
@@ -61,6 +61,6 @@ private:
};
template<>
-inline bool EnvironmentRecord::fast_is<FunctionEnvironmentRecord>() const { return is_function_environment_record(); }
+inline bool Environment::fast_is<FunctionEnvironment>() const { return is_function_environment(); }
}
diff --git a/Userland/Libraries/LibJS/Runtime/FunctionObject.h b/Userland/Libraries/LibJS/Runtime/FunctionObject.h
index 91f5b35cd7..c98d4fc141 100644
--- a/Userland/Libraries/LibJS/Runtime/FunctionObject.h
+++ b/Userland/Libraries/LibJS/Runtime/FunctionObject.h
@@ -26,7 +26,7 @@ public:
virtual Value call() = 0;
virtual Value construct(FunctionObject& new_target) = 0;
virtual const FlyString& name() const = 0;
- virtual FunctionEnvironmentRecord* create_environment_record(FunctionObject&) = 0;
+ virtual FunctionEnvironment* create_environment(FunctionObject&) = 0;
BoundFunction* bind(Value bound_this_value, Vector<Value> arguments);
@@ -45,7 +45,7 @@ public:
// [[Environment]]
// The Environment Record that the function was closed over.
// Used as the outer environment when evaluating the code of the function.
- virtual EnvironmentRecord* environment() { return nullptr; }
+ virtual Environment* environment() { return nullptr; }
// [[Realm]]
virtual GlobalObject* realm() const { return nullptr; }
diff --git a/Userland/Libraries/LibJS/Runtime/GeneratorObject.cpp b/Userland/Libraries/LibJS/Runtime/GeneratorObject.cpp
index b05f24d6b0..351e094fa3 100644
--- a/Userland/Libraries/LibJS/Runtime/GeneratorObject.cpp
+++ b/Userland/Libraries/LibJS/Runtime/GeneratorObject.cpp
@@ -13,7 +13,7 @@
namespace JS {
-GeneratorObject* GeneratorObject::create(GlobalObject& global_object, Value initial_value, OrdinaryFunctionObject* generating_function, EnvironmentRecord* generating_scope, Bytecode::RegisterWindow frame)
+GeneratorObject* GeneratorObject::create(GlobalObject& global_object, Value initial_value, OrdinaryFunctionObject* generating_function, Environment* generating_scope, Bytecode::RegisterWindow frame)
{
// This is "g1.prototype" in figure-2 (https://tc39.es/ecma262/img/figure-2.png)
auto generating_function_proto_property = generating_function->get(global_object.vm().names.prototype).to_object(global_object);
@@ -22,7 +22,7 @@ GeneratorObject* GeneratorObject::create(GlobalObject& global_object, Value init
auto object = global_object.heap().allocate<GeneratorObject>(global_object, global_object, *generating_function_proto_property);
object->m_generating_function = generating_function;
- object->m_environment_record = generating_scope;
+ object->m_environment = generating_scope;
object->m_frame = move(frame);
object->m_previous_value = initial_value;
return object;
@@ -44,7 +44,7 @@ GeneratorObject::~GeneratorObject()
void GeneratorObject::visit_edges(Cell::Visitor& visitor)
{
Object::visit_edges(visitor);
- visitor.visit(m_environment_record);
+ visitor.visit(m_environment);
visitor.visit(m_generating_function);
if (m_previous_value.is_object())
visitor.visit(&m_previous_value.as_object());
@@ -107,7 +107,7 @@ Value GeneratorObject::next_impl(VM& vm, GlobalObject& global_object, Optional<V
}
// Temporarily switch to the captured environment record
- TemporaryChange change { vm.running_execution_context().lexical_environment, m_environment_record };
+ TemporaryChange change { vm.running_execution_context().lexical_environment, m_environment };
m_previous_value = bytecode_interpreter->run(*m_generating_function->bytecode_executable(), next_block);
diff --git a/Userland/Libraries/LibJS/Runtime/GeneratorObject.h b/Userland/Libraries/LibJS/Runtime/GeneratorObject.h
index 498b451c79..b83b627ffe 100644
--- a/Userland/Libraries/LibJS/Runtime/GeneratorObject.h
+++ b/Userland/Libraries/LibJS/Runtime/GeneratorObject.h
@@ -15,7 +15,7 @@ class GeneratorObject final : public Object {
JS_OBJECT(GeneratorObject, Object);
public:
- static GeneratorObject* create(GlobalObject&, Value, OrdinaryFunctionObject*, EnvironmentRecord*, Bytecode::RegisterWindow);
+ static GeneratorObject* create(GlobalObject&, Value, OrdinaryFunctionObject*, Environment*, Bytecode::RegisterWindow);
GeneratorObject(GlobalObject&, Object& prototype);
virtual void initialize(GlobalObject&) override;
virtual ~GeneratorObject() override;
@@ -25,7 +25,7 @@ public:
void set_done() { m_done = true; }
private:
- EnvironmentRecord* m_environment_record { nullptr };
+ Environment* m_environment { nullptr };
OrdinaryFunctionObject* m_generating_function { nullptr };
Value m_previous_value;
Bytecode::RegisterWindow m_frame;
diff --git a/Userland/Libraries/LibJS/Runtime/GlobalEnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.cpp
index 2f33ea30db..4cc7577557 100644
--- a/Userland/Libraries/LibJS/Runtime/GlobalEnvironmentRecord.cpp
+++ b/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.cpp
@@ -5,57 +5,57 @@
*/
#include <LibJS/AST.h>
-#include <LibJS/Runtime/DeclarativeEnvironmentRecord.h>
-#include <LibJS/Runtime/GlobalEnvironmentRecord.h>
+#include <LibJS/Runtime/DeclarativeEnvironment.h>
+#include <LibJS/Runtime/GlobalEnvironment.h>
#include <LibJS/Runtime/GlobalObject.h>
-#include <LibJS/Runtime/ObjectEnvironmentRecord.h>
+#include <LibJS/Runtime/ObjectEnvironment.h>
namespace JS {
-GlobalEnvironmentRecord::GlobalEnvironmentRecord(GlobalObject& global_object)
- : EnvironmentRecord(nullptr)
+GlobalEnvironment::GlobalEnvironment(GlobalObject& global_object)
+ : Environment(nullptr)
{
- m_object_record = global_object.heap().allocate<ObjectEnvironmentRecord>(global_object, global_object, ObjectEnvironmentRecord::IsWithEnvironment::No, nullptr);
- m_declarative_record = global_object.heap().allocate<DeclarativeEnvironmentRecord>(global_object);
+ m_object_record = global_object.heap().allocate<ObjectEnvironment>(global_object, global_object, ObjectEnvironment::IsWithEnvironment::No, nullptr);
+ m_declarative_record = global_object.heap().allocate<DeclarativeEnvironment>(global_object);
}
-void GlobalEnvironmentRecord::visit_edges(Cell::Visitor& visitor)
+void GlobalEnvironment::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_object_record);
visitor.visit(m_declarative_record);
}
-Optional<Variable> GlobalEnvironmentRecord::get_from_environment_record(FlyString const& name) const
+Optional<Variable> GlobalEnvironment::get_from_environment(FlyString const& name) const
{
// FIXME: This should be a "composite" of the object record and the declarative record.
- return m_object_record->get_from_environment_record(name);
+ return m_object_record->get_from_environment(name);
}
-void GlobalEnvironmentRecord::put_into_environment_record(FlyString const& name, Variable variable)
+void GlobalEnvironment::put_into_environment(FlyString const& name, Variable variable)
{
// FIXME: This should be a "composite" of the object record and the declarative record.
- m_object_record->put_into_environment_record(name, variable);
+ m_object_record->put_into_environment(name, variable);
}
-bool GlobalEnvironmentRecord::delete_from_environment_record(FlyString const& name)
+bool GlobalEnvironment::delete_from_environment(FlyString const& name)
{
// FIXME: This should be a "composite" of the object record and the declarative record.
- return object_record().delete_from_environment_record(name);
+ return object_record().delete_from_environment(name);
}
-Value GlobalEnvironmentRecord::get_this_binding(GlobalObject&) const
+Value GlobalEnvironment::get_this_binding(GlobalObject&) const
{
return &global_object();
}
-Value GlobalEnvironmentRecord::global_this_value() const
+Value GlobalEnvironment::global_this_value() const
{
return &global_object();
}
// 9.1.1.4.1 HasBinding ( N ), https://tc39.es/ecma262/#sec-global-environment-records-hasbinding-n
-bool GlobalEnvironmentRecord::has_binding(FlyString const& name) const
+bool GlobalEnvironment::has_binding(FlyString const& name) const
{
if (m_declarative_record->has_binding(name))
return true;
@@ -63,7 +63,7 @@ bool GlobalEnvironmentRecord::has_binding(FlyString const& name) const
}
// 9.1.1.4.2 CreateMutableBinding ( N, D ), https://tc39.es/ecma262/#sec-global-environment-records-createmutablebinding-n-d
-void GlobalEnvironmentRecord::create_mutable_binding(GlobalObject& global_object, FlyString const& name, bool can_be_deleted)
+void GlobalEnvironment::create_mutable_binding(GlobalObject& global_object, FlyString const& name, bool can_be_deleted)
{
if (m_declarative_record->has_binding(name)) {
global_object.vm().throw_exception<TypeError>(global_object, ErrorType::FixmeAddAnErrorString);
@@ -73,7 +73,7 @@ void GlobalEnvironmentRecord::create_mutable_binding(GlobalObject& global_object
}
// 9.1.1.4.3 CreateImmutableBinding ( N, S ), https://tc39.es/ecma262/#sec-global-environment-records-createimmutablebinding-n-s
-void GlobalEnvironmentRecord::create_immutable_binding(GlobalObject& global_object, FlyString const& name, bool strict)
+void GlobalEnvironment::create_immutable_binding(GlobalObject& global_object, FlyString const& name, bool strict)
{
if (m_declarative_record->has_binding(name)) {
global_object.vm().throw_exception<TypeError>(global_object, ErrorType::FixmeAddAnErrorString);
@@ -83,7 +83,7 @@ void GlobalEnvironmentRecord::create_immutable_binding(GlobalObject& global_obje
}
// 9.1.1.4.4 InitializeBinding ( N, V ), https://tc39.es/ecma262/#sec-global-environment-records-initializebinding-n-v
-void GlobalEnvironmentRecord::initialize_binding(GlobalObject& global_object, FlyString const& name, Value value)
+void GlobalEnvironment::initialize_binding(GlobalObject& global_object, FlyString const& name, Value value)
{
if (m_declarative_record->has_binding(name)) {
m_declarative_record->initialize_binding(global_object, name, value);
@@ -93,7 +93,7 @@ void GlobalEnvironmentRecord::initialize_binding(GlobalObject& global_object, Fl
}
// 9.1.1.4.5 SetMutableBinding ( N, V, S ), https://tc39.es/ecma262/#sec-global-environment-records-setmutablebinding-n-v-s
-void GlobalEnvironmentRecord::set_mutable_binding(GlobalObject& global_object, FlyString const& name, Value value, bool strict)
+void GlobalEnvironment::set_mutable_binding(GlobalObject& global_object, FlyString const& name, Value value, bool strict)
{
if (m_declarative_record->has_binding(name)) {
m_declarative_record->set_mutable_binding(global_object, name, value, strict);
@@ -104,7 +104,7 @@ void GlobalEnvironmentRecord::set_mutable_binding(GlobalObject& global_object, F
}
// 9.1.1.4.6 GetBindingValue ( N, S ), https://tc39.es/ecma262/#sec-global-environment-records-getbindingvalue-n-s
-Value GlobalEnvironmentRecord::get_binding_value(GlobalObject& global_object, FlyString const& name, bool strict)
+Value GlobalEnvironment::get_binding_value(GlobalObject& global_object, FlyString const& name, bool strict)
{
if (m_declarative_record->has_binding(name))
return m_declarative_record->get_binding_value(global_object, name, strict);
@@ -112,7 +112,7 @@ Value GlobalEnvironmentRecord::get_binding_value(GlobalObject& global_object, Fl
}
// 9.1.1.4.7 DeleteBinding ( N ), https://tc39.es/ecma262/#sec-global-environment-records-deletebinding-n
-bool GlobalEnvironmentRecord::delete_binding(GlobalObject& global_object, FlyString const& name)
+bool GlobalEnvironment::delete_binding(GlobalObject& global_object, FlyString const& name)
{
if (m_declarative_record->has_binding(name))
return m_declarative_record->delete_binding(global_object, name);
@@ -129,19 +129,19 @@ bool GlobalEnvironmentRecord::delete_binding(GlobalObject& global_object, FlyStr
}
// 9.1.1.4.12 HasVarDeclaration ( N ), https://tc39.es/ecma262/#sec-hasvardeclaration
-bool GlobalEnvironmentRecord::has_var_declaration(FlyString const& name) const
+bool GlobalEnvironment::has_var_declaration(FlyString const& name) const
{
return m_var_names.contains_slow(name);
}
// 9.1.1.4.13 HasLexicalDeclaration ( N ), https://tc39.es/ecma262/#sec-haslexicaldeclaration
-bool GlobalEnvironmentRecord::has_lexical_declaration(FlyString const& name) const
+bool GlobalEnvironment::has_lexical_declaration(FlyString const& name) const
{
return m_declarative_record->has_binding(name);
}
// 9.1.1.4.14 HasRestrictedGlobalProperty ( N ), https://tc39.es/ecma262/#sec-hasrestrictedglobalproperty
-bool GlobalEnvironmentRecord::has_restricted_global_property(FlyString const& name) const
+bool GlobalEnvironment::has_restricted_global_property(FlyString const& name) const
{
auto existing_prop = m_object_record->binding_object().get_own_property_descriptor(name);
if (!existing_prop.has_value() || existing_prop.value().value.is_undefined())
@@ -152,7 +152,7 @@ bool GlobalEnvironmentRecord::has_restricted_global_property(FlyString const& na
}
// 9.1.1.4.15 CanDeclareGlobalVar ( N ), https://tc39.es/ecma262/#sec-candeclareglobalvar
-bool GlobalEnvironmentRecord::can_declare_global_var(FlyString const& name) const
+bool GlobalEnvironment::can_declare_global_var(FlyString const& name) const
{
bool has_property = m_object_record->binding_object().has_own_property(name);
if (has_property)
@@ -161,7 +161,7 @@ bool GlobalEnvironmentRecord::can_declare_global_var(FlyString const& name) cons
}
// 9.1.1.4.16 CanDeclareGlobalFunction ( N ), https://tc39.es/ecma262/#sec-candeclareglobalfunction
-bool GlobalEnvironmentRecord::can_declare_global_function(FlyString const& name) const
+bool GlobalEnvironment::can_declare_global_function(FlyString const& name) const
{
auto existing_prop = m_object_record->binding_object().get_own_property_descriptor(name);
if (!existing_prop.has_value() || existing_prop.value().value.is_undefined())
@@ -174,7 +174,7 @@ bool GlobalEnvironmentRecord::can_declare_global_function(FlyString const& name)
}
// 9.1.1.4.17 CreateGlobalVarBinding ( N, D ), https://tc39.es/ecma262/#sec-createglobalvarbinding
-void GlobalEnvironmentRecord::create_global_var_binding(FlyString const& name, bool can_be_deleted)
+void GlobalEnvironment::create_global_var_binding(FlyString const& name, bool can_be_deleted)
{
bool has_property = m_object_record->binding_object().has_own_property(name);
bool extensible = m_object_record->binding_object().is_extensible();
@@ -187,7 +187,7 @@ void GlobalEnvironmentRecord::create_global_var_binding(FlyString const& name, b
}
// 9.1.1.4.18 CreateGlobalFunctionBinding ( N, V, D ), https://tc39.es/ecma262/#sec-createglobalfunctionbinding
-void GlobalEnvironmentRecord::create_global_function_binding(FlyString const& name, Value value, bool can_be_deleted)
+void GlobalEnvironment::create_global_function_binding(FlyString const& name, Value value, bool can_be_deleted)
{
auto existing_prop = m_object_record->binding_object().get_own_property_descriptor(name);
PropertyDescriptor desc;
diff --git a/Userland/Libraries/LibJS/Runtime/GlobalEnvironmentRecord.h b/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h
index 5444176b3b..6876d811d1 100644
--- a/Userland/Libraries/LibJS/Runtime/GlobalEnvironmentRecord.h
+++ b/Userland/Libraries/LibJS/Runtime/GlobalEnvironment.h
@@ -6,19 +6,19 @@
#pragma once
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
namespace JS {
-class GlobalEnvironmentRecord final : public EnvironmentRecord {
- JS_ENVIRONMENT_RECORD(GlobalEnvironmentRecord, EnvironmentRecord);
+class GlobalEnvironment final : public Environment {
+ JS_ENVIRONMENT(GlobalEnvironment, Environment);
public:
- explicit GlobalEnvironmentRecord(GlobalObject&);
+ explicit GlobalEnvironment(GlobalObject&);
- virtual Optional<Variable> get_from_environment_record(FlyString const&) const override;
- virtual void put_into_environment_record(FlyString const&, Variable) override;
- virtual bool delete_from_environment_record(FlyString const&) override;
+ virtual Optional<Variable> get_from_environment(FlyString const&) const override;
+ virtual void put_into_environment(FlyString const&, Variable) override;
+ virtual bool delete_from_environment(FlyString const&) override;
virtual bool has_this_binding() const final { return true; }
virtual Value get_this_binding(GlobalObject&) const final;
@@ -33,10 +33,10 @@ public:
Value global_this_value() const;
// [[ObjectRecord]]
- ObjectEnvironmentRecord& object_record() { return *m_object_record; }
+ ObjectEnvironment& object_record() { return *m_object_record; }
// [[DeclarativeRecord]]
- DeclarativeEnvironmentRecord& declarative_record() { return *m_declarative_record; }
+ DeclarativeEnvironment& declarative_record() { return *m_declarative_record; }
bool has_var_declaration(FlyString const& name) const;
bool has_lexical_declaration(FlyString const& name) const;
@@ -47,15 +47,15 @@ public:
void create_global_function_binding(FlyString const& name, Value, bool can_be_deleted);
private:
- virtual bool is_global_environment_record() const override { return true; }
+ virtual bool is_global_environment() const override { return true; }
virtual void visit_edges(Visitor&) override;
- ObjectEnvironmentRecord* m_object_record { nullptr };
- DeclarativeEnvironmentRecord* m_declarative_record { nullptr };
+ ObjectEnvironment* m_object_record { nullptr };
+ DeclarativeEnvironment* m_declarative_record { nullptr };
Vector<FlyString> m_var_names;
};
template<>
-inline bool EnvironmentRecord::fast_is<GlobalEnvironmentRecord>() const { return is_global_environment_record(); }
+inline bool Environment::fast_is<GlobalEnvironment>() const { return is_global_environment(); }
}
diff --git a/Userland/Libraries/LibJS/Runtime/GlobalObject.cpp b/Userland/Libraries/LibJS/Runtime/GlobalObject.cpp
index 62e178c146..81c25365bd 100644
--- a/Userland/Libraries/LibJS/Runtime/GlobalObject.cpp
+++ b/Userland/Libraries/LibJS/Runtime/GlobalObject.cpp
@@ -40,7 +40,7 @@
#include <LibJS/Runtime/GeneratorFunctionConstructor.h>
#include <LibJS/Runtime/GeneratorFunctionPrototype.h>
#include <LibJS/Runtime/GeneratorObjectPrototype.h>
-#include <LibJS/Runtime/GlobalEnvironmentRecord.h>
+#include <LibJS/Runtime/GlobalEnvironment.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/IteratorPrototype.h>
#include <LibJS/Runtime/JSONObject.h>
@@ -99,7 +99,7 @@ void GlobalObject::initialize_global_object()
m_object_prototype = heap().allocate_without_global_object<ObjectPrototype>(*this);
m_function_prototype = heap().allocate_without_global_object<FunctionPrototype>(*this);
- m_environment_record = heap().allocate<GlobalEnvironmentRecord>(*this, *this);
+ m_environment = heap().allocate<GlobalEnvironment>(*this, *this);
m_new_object_shape = vm.heap().allocate_without_global_object<Shape>(*this);
m_new_object_shape->set_prototype_without_transition(m_object_prototype);
@@ -225,7 +225,7 @@ void GlobalObject::visit_edges(Visitor& visitor)
visitor.visit(m_new_ordinary_function_prototype_object_shape);
visitor.visit(m_proxy_constructor);
visitor.visit(m_generator_object_prototype);
- visitor.visit(m_environment_record);
+ visitor.visit(m_environment);
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
visitor.visit(m_##snake_name##_constructor); \
diff --git a/Userland/Libraries/LibJS/Runtime/GlobalObject.h b/Userland/Libraries/LibJS/Runtime/GlobalObject.h
index ec1c5afa4a..6ff199c520 100644
--- a/Userland/Libraries/LibJS/Runtime/GlobalObject.h
+++ b/Userland/Libraries/LibJS/Runtime/GlobalObject.h
@@ -7,7 +7,7 @@
#pragma once
#include <LibJS/Heap/Heap.h>
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
#include <LibJS/Runtime/VM.h>
namespace JS {
@@ -21,7 +21,7 @@ public:
virtual ~GlobalObject() override;
- GlobalEnvironmentRecord& environment_record() { return *m_environment_record; }
+ GlobalEnvironment& environment() { return *m_environment; }
Console& console() { return *m_console; }
@@ -87,7 +87,7 @@ private:
// Not included in JS_ENUMERATE_NATIVE_OBJECTS due to missing distinct constructor
GeneratorObjectPrototype* m_generator_object_prototype { nullptr };
- GlobalEnvironmentRecord* m_environment_record { nullptr };
+ GlobalEnvironment* m_environment { nullptr };
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
ConstructorName* m_##snake_name##_constructor { nullptr }; \
diff --git a/Userland/Libraries/LibJS/Runtime/NativeFunction.cpp b/Userland/Libraries/LibJS/Runtime/NativeFunction.cpp
index c4e32f7812..83cd77f247 100644
--- a/Userland/Libraries/LibJS/Runtime/NativeFunction.cpp
+++ b/Userland/Libraries/LibJS/Runtime/NativeFunction.cpp
@@ -47,7 +47,7 @@ Value NativeFunction::construct(FunctionObject&)
return {};
}
-FunctionEnvironmentRecord* NativeFunction::create_environment_record(FunctionObject&)
+FunctionEnvironment* NativeFunction::create_environment(FunctionObject&)
{
return nullptr;
}
diff --git a/Userland/Libraries/LibJS/Runtime/NativeFunction.h b/Userland/Libraries/LibJS/Runtime/NativeFunction.h
index 39d66edb76..0f88bcf24d 100644
--- a/Userland/Libraries/LibJS/Runtime/NativeFunction.h
+++ b/Userland/Libraries/LibJS/Runtime/NativeFunction.h
@@ -36,7 +36,7 @@ protected:
explicit NativeFunction(Object& prototype);
private:
- virtual FunctionEnvironmentRecord* create_environment_record(FunctionObject&) override final;
+ virtual FunctionEnvironment* create_environment(FunctionObject&) override final;
virtual bool is_native_function() const final { return true; }
FlyString m_name;
diff --git a/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.cpp b/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.cpp
index c0ee297ad5..a2006cb190 100644
--- a/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.cpp
+++ b/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.cpp
@@ -6,24 +6,24 @@
#include <LibJS/AST.h>
#include <LibJS/Runtime/GlobalObject.h>
-#include <LibJS/Runtime/ObjectEnvironmentRecord.h>
+#include <LibJS/Runtime/ObjectEnvironment.h>
namespace JS {
-ObjectEnvironmentRecord::ObjectEnvironmentRecord(Object& binding_object, IsWithEnvironment is_with_environment, EnvironmentRecord* outer_environment)
- : EnvironmentRecord(outer_environment)
+ObjectEnvironment::ObjectEnvironment(Object& binding_object, IsWithEnvironment is_with_environment, Environment* outer_environment)
+ : Environment(outer_environment)
, m_binding_object(binding_object)
, m_with_environment(is_with_environment == IsWithEnvironment::Yes)
{
}
-void ObjectEnvironmentRecord::visit_edges(Cell::Visitor& visitor)
+void ObjectEnvironment::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(&m_binding_object);
}
-Optional<Variable> ObjectEnvironmentRecord::get_from_environment_record(FlyString const& name) const
+Optional<Variable> ObjectEnvironment::get_from_environment(FlyString const& name) const
{
auto value = m_binding_object.get(name);
if (value.is_empty())
@@ -31,18 +31,18 @@ Optional<Variable> ObjectEnvironmentRecord::get_from_environment_record(FlyStrin
return Variable { value, DeclarationKind::Var };
}
-void ObjectEnvironmentRecord::put_into_environment_record(FlyString const& name, Variable variable)
+void ObjectEnvironment::put_into_environment(FlyString const& name, Variable variable)
{
m_binding_object.put(name, variable.value);
}
-bool ObjectEnvironmentRecord::delete_from_environment_record(FlyString const& name)
+bool ObjectEnvironment::delete_from_environment(FlyString const& name)
{
return m_binding_object.delete_property(name);
}
// 9.1.1.2.1 HasBinding ( N ), https://tc39.es/ecma262/#sec-object-environment-records-hasbinding-n
-bool ObjectEnvironmentRecord::has_binding(FlyString const& name) const
+bool ObjectEnvironment::has_binding(FlyString const& name) const
{
bool found_binding = m_binding_object.has_property(name);
if (!found_binding)
@@ -54,7 +54,7 @@ bool ObjectEnvironmentRecord::has_binding(FlyString const& name) const
}
// 9.1.1.2.2 CreateMutableBinding ( N, D ), https://tc39.es/ecma262/#sec-object-environment-records-createmutablebinding-n-d
-void ObjectEnvironmentRecord::create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted)
+void ObjectEnvironment::create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted)
{
PropertyAttributes attributes;
attributes.set_enumerable();
@@ -68,20 +68,20 @@ void ObjectEnvironmentRecord::create_mutable_binding(GlobalObject&, FlyString co
}
// 9.1.1.2.3 CreateImmutableBinding ( N, S ), https://tc39.es/ecma262/#sec-object-environment-records-createimmutablebinding-n-s
-void ObjectEnvironmentRecord::create_immutable_binding(GlobalObject&, FlyString const&, bool)
+void ObjectEnvironment::create_immutable_binding(GlobalObject&, FlyString const&, bool)
{
// "The CreateImmutableBinding concrete method of an object Environment Record is never used within this specification."
VERIFY_NOT_REACHED();
}
// 9.1.1.2.4 InitializeBinding ( N, V ), https://tc39.es/ecma262/#sec-object-environment-records-initializebinding-n-v
-void ObjectEnvironmentRecord::initialize_binding(GlobalObject& global_object, FlyString const& name, Value value)
+void ObjectEnvironment::initialize_binding(GlobalObject& global_object, FlyString const& name, Value value)
{
set_mutable_binding(global_object, name, value, false);
}
// 9.1.1.2.5 SetMutableBinding ( N, V, S ), https://tc39.es/ecma262/#sec-object-environment-records-setmutablebinding-n-v-s
-void ObjectEnvironmentRecord::set_mutable_binding(GlobalObject& global_object, FlyString const& name, Value value, bool strict)
+void ObjectEnvironment::set_mutable_binding(GlobalObject& global_object, FlyString const& name, Value value, bool strict)
{
bool still_exists = m_binding_object.has_property(name);
if (!still_exists && strict) {
@@ -94,7 +94,7 @@ void ObjectEnvironmentRecord::set_mutable_binding(GlobalObject& global_object, F
}
// 9.1.1.2.6 GetBindingValue ( N, S ), https://tc39.es/ecma262/#sec-object-environment-records-getbindingvalue-n-s
-Value ObjectEnvironmentRecord::get_binding_value(GlobalObject& global_object, FlyString const& name, bool strict)
+Value ObjectEnvironment::get_binding_value(GlobalObject& global_object, FlyString const& name, bool strict)
{
if (!m_binding_object.has_property(name)) {
if (!strict)
@@ -108,7 +108,7 @@ Value ObjectEnvironmentRecord::get_binding_value(GlobalObject& global_object, Fl
}
// 9.1.1.2.7 DeleteBinding ( N ), https://tc39.es/ecma262/#sec-object-environment-records-deletebinding-n
-bool ObjectEnvironmentRecord::delete_binding(GlobalObject&, FlyString const& name)
+bool ObjectEnvironment::delete_binding(GlobalObject&, FlyString const& name)
{
return m_binding_object.delete_property(name);
}
diff --git a/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.h b/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h
index 57a8f82d0b..46d4aa2dcf 100644
--- a/Userland/Libraries/LibJS/Runtime/ObjectEnvironmentRecord.h
+++ b/Userland/Libraries/LibJS/Runtime/ObjectEnvironment.h
@@ -6,23 +6,23 @@
#pragma once
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
namespace JS {
-class ObjectEnvironmentRecord : public EnvironmentRecord {
- JS_ENVIRONMENT_RECORD(ObjectEnvironmentRecord, EnvironmentRecord);
+class ObjectEnvironment : public Environment {
+ JS_ENVIRONMENT(ObjectEnvironment, Environment);
public:
enum class IsWithEnvironment {
No,
Yes,
};
- ObjectEnvironmentRecord(Object& binding_object, IsWithEnvironment, EnvironmentRecord* outer_environment);
+ ObjectEnvironment(Object& binding_object, IsWithEnvironment, Environment* outer_environment);
- virtual Optional<Variable> get_from_environment_record(FlyString const&) const override;
- virtual void put_into_environment_record(FlyString const&, Variable) override;
- virtual bool delete_from_environment_record(FlyString const&) override;
+ virtual Optional<Variable> get_from_environment(FlyString const&) const override;
+ virtual void put_into_environment(FlyString const&, Variable) override;
+ virtual bool delete_from_environment(FlyString const&) override;
virtual bool has_binding(FlyString const& name) const override;
virtual void create_mutable_binding(GlobalObject&, FlyString const& name, bool can_be_deleted) override;
diff --git a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp
index 0c01c16fcc..5e900f6125 100644
--- a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp
+++ b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp
@@ -14,7 +14,7 @@
#include <LibJS/Interpreter.h>
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/Error.h>
-#include <LibJS/Runtime/FunctionEnvironmentRecord.h>
+#include <LibJS/Runtime/FunctionEnvironment.h>
#include <LibJS/Runtime/GeneratorObject.h>
#include <LibJS/Runtime/GeneratorObjectPrototype.h>
#include <LibJS/Runtime/GlobalObject.h>
@@ -36,7 +36,7 @@ static OrdinaryFunctionObject* typed_this(VM& vm, GlobalObject& global_object)
return static_cast<OrdinaryFunctionObject*>(this_object);
}
-OrdinaryFunctionObject* OrdinaryFunctionObject::create(GlobalObject& global_object, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 m_function_length, EnvironmentRecord* parent_scope, FunctionKind kind, bool is_strict, bool is_arrow_function)
+OrdinaryFunctionObject* OrdinaryFunctionObject::create(GlobalObject& global_object, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 m_function_length, Environment* parent_scope, FunctionKind kind, bool is_strict, bool is_arrow_function)
{
Object* prototype = nullptr;
switch (kind) {
@@ -50,7 +50,7 @@ OrdinaryFunctionObject* OrdinaryFunctionObject::create(GlobalObject& global_obje
return global_object.heap().allocate<OrdinaryFunctionObject>(global_object, global_object, name, body, move(parameters), m_function_length, parent_scope, *prototype, kind, is_strict, is_arrow_function);
}
-OrdinaryFunctionObject::OrdinaryFunctionObject(GlobalObject& global_object, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 function_length, EnvironmentRecord* parent_scope, Object& prototype, FunctionKind kind, bool is_strict, bool is_arrow_function)
+OrdinaryFunctionObject::OrdinaryFunctionObject(GlobalObject& global_object, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 function_length, Environment* parent_scope, Object& prototype, FunctionKind kind, bool is_strict, bool is_arrow_function)
: FunctionObject(is_arrow_function ? vm().this_value(global_object) : Value(), {}, prototype)
, m_name(name)
, m_body(body)
@@ -113,7 +113,7 @@ void OrdinaryFunctionObject::visit_edges(Visitor& visitor)
visitor.visit(m_environment);
}
-FunctionEnvironmentRecord* OrdinaryFunctionObject::create_environment_record(FunctionObject& function_being_invoked)
+FunctionEnvironment* OrdinaryFunctionObject::create_environment(FunctionObject& function_being_invoked)
{
HashMap<FlyString, Variable> variables;
for (auto& parameter : m_parameters) {
@@ -142,11 +142,11 @@ FunctionEnvironmentRecord* OrdinaryFunctionObject::create_environment_record(Fun
}
}
- auto* environment = heap().allocate<FunctionEnvironmentRecord>(global_object(), m_environment, variables);
+ auto* environment = heap().allocate<FunctionEnvironment>(global_object(), m_environment, variables);
environment->set_function_object(function_being_invoked);
if (m_is_arrow_function) {
- if (is<FunctionEnvironmentRecord>(m_environment))
- environment->set_new_target(static_cast<FunctionEnvironmentRecord*>(m_environment)->new_target());
+ if (is<FunctionEnvironment>(m_environment))
+ environment->set_new_target(static_cast<FunctionEnvironment*>(m_environment)->new_target());
}
return environment;
}
diff --git a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h
index 5720c87845..721c404c6e 100644
--- a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h
+++ b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h
@@ -16,9 +16,9 @@ class OrdinaryFunctionObject final : public FunctionObject {
JS_OBJECT(OrdinaryFunctionObject, FunctionObject);
public:
- static OrdinaryFunctionObject* create(GlobalObject&, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 m_function_length, EnvironmentRecord* parent_scope, FunctionKind, bool is_strict, bool is_arrow_function = false);
+ static OrdinaryFunctionObject* create(GlobalObject&, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 m_function_length, Environment* parent_scope, FunctionKind, bool is_strict, bool is_arrow_function = false);
- OrdinaryFunctionObject(GlobalObject&, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 m_function_length, EnvironmentRecord* parent_scope, Object& prototype, FunctionKind, bool is_strict, bool is_arrow_function = false);
+ OrdinaryFunctionObject(GlobalObject&, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 m_function_length, Environment* parent_scope, Object& prototype, FunctionKind, bool is_strict, bool is_arrow_function = false);
virtual void initialize(GlobalObject&) override;
virtual ~OrdinaryFunctionObject();
@@ -35,7 +35,7 @@ public:
auto& bytecode_executable() const { return m_bytecode_executable; }
- virtual EnvironmentRecord* environment() override { return m_environment; }
+ virtual Environment* environment() override { return m_environment; }
GlobalObject* realm() const override { return m_realm; }
@@ -44,7 +44,7 @@ protected:
private:
virtual bool is_ordinary_function_object() const override { return true; }
- virtual FunctionEnvironmentRecord* create_environment_record(FunctionObject&) override;
+ virtual FunctionEnvironment* create_environment(FunctionObject&) override;
virtual void visit_edges(Visitor&) override;
Value execute_function_body();
@@ -56,7 +56,7 @@ private:
NonnullRefPtr<Statement> m_body;
const Vector<FunctionNode::Parameter> m_parameters;
Optional<Bytecode::Executable> m_bytecode_executable;
- EnvironmentRecord* m_environment { nullptr };
+ Environment* m_environment { nullptr };
GlobalObject* m_realm { nullptr };
i32 m_function_length { 0 };
FunctionKind m_kind { FunctionKind::Regular };
diff --git a/Userland/Libraries/LibJS/Runtime/ProxyObject.cpp b/Userland/Libraries/LibJS/Runtime/ProxyObject.cpp
index bc2f4abb27..6e7d791030 100644
--- a/Userland/Libraries/LibJS/Runtime/ProxyObject.cpp
+++ b/Userland/Libraries/LibJS/Runtime/ProxyObject.cpp
@@ -478,10 +478,10 @@ const FlyString& ProxyObject::name() const
return static_cast<FunctionObject&>(m_target).name();
}
-FunctionEnvironmentRecord* ProxyObject::create_environment_record(FunctionObject& function_being_invoked)
+FunctionEnvironment* ProxyObject::create_environment(FunctionObject& function_being_invoked)
{
VERIFY(is_function());
- return static_cast<FunctionObject&>(m_target).create_environment_record(function_being_invoked);
+ return static_cast<FunctionObject&>(m_target).create_environment(function_being_invoked);
}
}
diff --git a/Userland/Libraries/LibJS/Runtime/ProxyObject.h b/Userland/Libraries/LibJS/Runtime/ProxyObject.h
index 566310aea9..da89558591 100644
--- a/Userland/Libraries/LibJS/Runtime/ProxyObject.h
+++ b/Userland/Libraries/LibJS/Runtime/ProxyObject.h
@@ -22,7 +22,7 @@ public:
virtual Value call() override;
virtual Value construct(FunctionObject& new_target) override;
virtual const FlyString& name() const override;
- virtual FunctionEnvironmentRecord* create_environment_record(FunctionObject&) override;
+ virtual FunctionEnvironment* create_environment(FunctionObject&) override;
const Object& target() const { return m_target; }
const Object& handler() const { return m_handler; }
diff --git a/Userland/Libraries/LibJS/Runtime/Reference.cpp b/Userland/Libraries/LibJS/Runtime/Reference.cpp
index 06160498f6..4e3265ce0d 100644
--- a/Userland/Libraries/LibJS/Runtime/Reference.cpp
+++ b/Userland/Libraries/LibJS/Runtime/Reference.cpp
@@ -47,8 +47,8 @@ void Reference::put_value(GlobalObject& global_object, Value value)
return;
}
- VERIFY(m_base_type == BaseType::EnvironmentRecord);
- auto existing_variable = m_base_environment_record->get_from_environment_record(m_name.as_string());
+ VERIFY(m_base_type == BaseType::Environment);
+ auto existing_variable = m_base_environment->get_from_environment(m_name.as_string());
Variable variable {
.value = value,
.declaration_kind = existing_variable.has_value() ? existing_variable->declaration_kind : DeclarationKind::Var
@@ -60,7 +60,7 @@ void Reference::put_value(GlobalObject& global_object, Value value)
return;
}
- m_base_environment_record->put_into_environment_record(m_name.as_string(), variable);
+ m_base_environment->put_into_environment(m_name.as_string(), variable);
}
void Reference::throw_reference_error(GlobalObject& global_object)
@@ -87,8 +87,8 @@ Value Reference::get_value(GlobalObject& global_object, bool throw_if_undefined)
return base_obj->get(m_name).value_or(js_undefined());
}
- VERIFY(m_base_type == BaseType::EnvironmentRecord);
- auto value = m_base_environment_record->get_from_environment_record(m_name.as_string());
+ VERIFY(m_base_type == BaseType::Environment);
+ auto value = m_base_environment->get_from_environment(m_name.as_string());
if (!value.has_value()) {
if (!throw_if_undefined) {
// FIXME: This is an ad-hoc hack for the `typeof` operator until we support proper variable bindings.
@@ -121,8 +121,8 @@ bool Reference::delete_(GlobalObject& global_object)
return succeeded;
}
- VERIFY(m_base_type == BaseType::EnvironmentRecord);
- return m_base_environment_record->delete_from_environment_record(m_name.as_string());
+ VERIFY(m_base_type == BaseType::Environment);
+ return m_base_environment->delete_from_environment(m_name.as_string());
}
String Reference::to_string() const
@@ -133,7 +133,7 @@ String Reference::to_string() const
case BaseType::Unresolvable:
builder.append("Unresolvable");
break;
- case BaseType::EnvironmentRecord:
+ case BaseType::Environment:
builder.appendff("{}", base_environment().class_name());
break;
case BaseType::Value:
diff --git a/Userland/Libraries/LibJS/Runtime/Reference.h b/Userland/Libraries/LibJS/Runtime/Reference.h
index d2df5e06b8..164fca6670 100644
--- a/Userland/Libraries/LibJS/Runtime/Reference.h
+++ b/Userland/Libraries/LibJS/Runtime/Reference.h
@@ -7,7 +7,7 @@
#pragma once
#include <AK/String.h>
-#include <LibJS/Runtime/EnvironmentRecord.h>
+#include <LibJS/Runtime/Environment.h>
#include <LibJS/Runtime/PropertyName.h>
#include <LibJS/Runtime/Value.h>
@@ -18,7 +18,7 @@ public:
enum class BaseType : u8 {
Unresolvable,
Value,
- EnvironmentRecord,
+ Environment,
};
Reference() { }
@@ -44,9 +44,9 @@ public:
}
}
- Reference(EnvironmentRecord& base, FlyString const& referenced_name, bool strict = false)
- : m_base_type(BaseType::EnvironmentRecord)
- , m_base_environment_record(&base)
+ Reference(Environment& base, FlyString const& referenced_name, bool strict = false)
+ : m_base_type(BaseType::Environment)
+ , m_base_environment(&base)
, m_name(referenced_name)
, m_strict(strict)
{
@@ -58,10 +58,10 @@ public:
return m_base_value;
}
- EnvironmentRecord& base_environment() const
+ Environment& base_environment() const
{
- VERIFY(m_base_type == BaseType::EnvironmentRecord);
- return *m_base_environment_record;
+ VERIFY(m_base_type == BaseType::Environment);
+ return *m_base_environment;
}
PropertyName const& name() const { return m_name; }
@@ -75,7 +75,7 @@ public:
{
if (is_unresolvable())
return false;
- if (m_base_type == BaseType::EnvironmentRecord)
+ if (m_base_type == BaseType::Environment)
return false;
if (m_base_value.is_boolean() || m_base_value.is_string() || m_base_value.is_symbol() || m_base_value.is_bigint() || m_base_value.is_number() || m_base_value.is_object())
return true;
@@ -109,7 +109,7 @@ private:
BaseType m_base_type { BaseType::Unresolvable };
union {
Value m_base_value {};
- EnvironmentRecord* m_base_environment_record;
+ Environment* m_base_environment;
};
PropertyName m_name;
Value m_this_value;
diff --git a/Userland/Libraries/LibJS/Runtime/VM.cpp b/Userland/Libraries/LibJS/Runtime/VM.cpp
index f79c8c6085..48877aa0a1 100644
--- a/Userland/Libraries/LibJS/Runtime/VM.cpp
+++ b/Userland/Libraries/LibJS/Runtime/VM.cpp
@@ -13,8 +13,8 @@
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/Error.h>
#include <LibJS/Runtime/FinalizationRegistry.h>
-#include <LibJS/Runtime/FunctionEnvironmentRecord.h>
-#include <LibJS/Runtime/GlobalEnvironmentRecord.h>
+#include <LibJS/Runtime/FunctionEnvironment.h>
+#include <LibJS/Runtime/GlobalEnvironment.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/IteratorOperations.h>
#include <LibJS/Runtime/NativeFunction.h>
@@ -132,14 +132,14 @@ Symbol* VM::get_global_symbol(const String& description)
return new_global_symbol;
}
-void VM::set_variable(const FlyString& name, Value value, GlobalObject& global_object, bool first_assignment, EnvironmentRecord* specific_scope)
+void VM::set_variable(const FlyString& name, Value value, GlobalObject& global_object, bool first_assignment, Environment* specific_scope)
{
Optional<Variable> possible_match;
if (!specific_scope && m_execution_context_stack.size()) {
- for (auto* environment_record = lexical_environment(); environment_record; environment_record = environment_record->outer_environment()) {
- possible_match = environment_record->get_from_environment_record(name);
+ for (auto* environment = lexical_environment(); environment; environment = environment->outer_environment()) {
+ possible_match = environment->get_from_environment(name);
if (possible_match.has_value()) {
- specific_scope = environment_record;
+ specific_scope = environment;
break;
}
}
@@ -151,12 +151,12 @@ void VM::set_variable(const FlyString& name, Value value, GlobalObject& global_o
return;
}
- specific_scope->put_into_environment_record(name, { value, possible_match.value().declaration_kind });
+ specific_scope->put_into_environment(name, { value, possible_match.value().declaration_kind });
return;
}
if (specific_scope) {
- specific_scope->put_into_environment_record(name, { value, DeclarationKind::Var });
+ specific_scope->put_into_environment(name, { value, DeclarationKind::Var });
return;
}
@@ -165,13 +165,13 @@ void VM::set_variable(const FlyString& name, Value value, GlobalObject& global_o
bool VM::delete_variable(FlyString const& name)
{
- EnvironmentRecord* specific_scope = nullptr;
+ Environment* specific_scope = nullptr;
Optional<Variable> possible_match;
if (!m_execution_context_stack.is_empty()) {
- for (auto* environment_record = lexical_environment(); environment_record; environment_record = environment_record->outer_environment()) {
- possible_match = environment_record->get_from_environment_record(name);
+ for (auto* environment = lexical_environment(); environment; environment = environment->outer_environment()) {
+ possible_match = environment->get_from_environment(name);
if (possible_match.has_value()) {
- specific_scope = environment_record;
+ specific_scope = environment;
break;
}
}
@@ -183,15 +183,15 @@ bool VM::delete_variable(FlyString const& name)
return false;
VERIFY(specific_scope);
- return specific_scope->delete_from_environment_record(name);
+ return specific_scope->delete_from_environment(name);
}
-void VM::assign(const FlyString& target, Value value, GlobalObject& global_object, bool first_assignment, EnvironmentRecord* specific_scope)
+void VM::assign(const FlyString& target, Value value, GlobalObject& global_object, bool first_assignment, Environment* specific_scope)
{
set_variable(target, move(value), global_object, first_assignment, specific_scope);
}
-void VM::assign(const Variant<NonnullRefPtr<Identifier>, NonnullRefPtr<BindingPattern>>& target, Value value, GlobalObject& global_object, bool first_assignment, EnvironmentRecord* specific_scope)
+void VM::assign(const Variant<NonnullRefPtr<Identifier>, NonnullRefPtr<BindingPattern>>& target, Value value, GlobalObject& global_object, bool first_assignment, Environment* specific_scope)
{
if (auto id_ptr = target.get_pointer<NonnullRefPtr<Identifier>>())
return assign((*id_ptr)->string(), move(value), global_object, first_assignment, specific_scope);
@@ -199,7 +199,7 @@ void VM::assign(const Variant<NonnullRefPtr<Identifier>, NonnullRefPtr<BindingPa
assign(target.get<NonnullRefPtr<BindingPattern>>(), move(value), global_object, first_assignment, specific_scope);
}
-void VM::assign(const NonnullRefPtr<BindingPattern>& target, Value value, GlobalObject& global_object, bool first_assignment, EnvironmentRecord* specific_scope)
+void VM::assign(const NonnullRefPtr<BindingPattern>& target, Value value, GlobalObject& global_object, bool first_assignment, Environment* specific_scope)
{
auto& binding = *target;
@@ -365,7 +365,7 @@ Value VM::get_variable(const FlyString& name, GlobalObject& global_object)
// a function parameter, or by a local var declaration, we use that.
// Otherwise, we return a lazily constructed Array with all the argument values.
// FIXME: Do something much more spec-compliant.
- auto possible_match = lexical_environment()->get_from_environment_record(name);
+ auto possible_match = lexical_environment()->get_from_environment(name);
if (possible_match.has_value())
return possible_match.value().value;
if (!context.arguments_object) {
@@ -378,8 +378,8 @@ Value VM::get_variable(const FlyString& name, GlobalObject& global_object)
return context.arguments_object;
}
- for (auto* environment_record = lexical_environment(); environment_record; environment_record = environment_record->outer_environment()) {
- auto possible_match = environment_record->get_from_environment_record(name);
+ for (auto* environment = lexical_environment(); environment; environment = environment->outer_environment()) {
+ auto possible_match = environment->get_from_environment(name);
if (exception())
return {};
if (possible_match.has_value())
@@ -393,16 +393,16 @@ Value VM::get_variable(const FlyString& name, GlobalObject& global_object)
}
// 9.4.2 ResolveBinding ( name [ , env ] ), https://tc39.es/ecma262/#sec-resolvebinding
-Reference VM::resolve_binding(GlobalObject& global_object, FlyString const& name, EnvironmentRecord*)
+Reference VM::resolve_binding(GlobalObject& global_object, FlyString const& name, Environment*)
{
// FIXME: This implementation of ResolveBinding is non-conforming.
- for (auto* environment_record = lexical_environment(); environment_record && environment_record->outer_environment(); environment_record = environment_record->outer_environment()) {
- auto possible_match = environment_record->get_from_environment_record(name);
+ for (auto* environment = lexical_environment(); environment && environment->outer_environment(); environment = environment->outer_environment()) {
+ auto possible_match = environment->get_from_environment(name);
if (possible_match.has_value())
- return Reference { *environment_record, name };
+ return Reference { *environment, name };
}
- return Reference { global_object.environment_record(), name };
+ return Reference { global_object.environment(), name };
}
Value VM::construct(FunctionObject& function, FunctionObject& new_target, Optional<MarkedValueList> arguments)
@@ -433,7 +433,7 @@ Value VM::construct(FunctionObject& function, FunctionObject& new_target, Option
callee_context.arguments = function.bound_arguments();
if (arguments.has_value())
callee_context.arguments.extend(arguments.value().values());
- auto* environment = function.create_environment_record(function);
+ auto* environment = function.create_environment(function);
callee_context.lexical_environment = environment;
callee_context.variable_environment = environment;
if (environment) {
@@ -459,7 +459,7 @@ Value VM::construct(FunctionObject& function, FunctionObject& new_target, Option
// set the prototype on objects created by constructors that return an object (i.e. NativeFunction subclasses).
if (function.constructor_kind() == FunctionObject::ConstructorKind::Base && new_target.constructor_kind() == FunctionObject::ConstructorKind::Derived && result.is_object()) {
if (environment) {
- verify_cast<FunctionEnvironmentRecord>(lexical_environment())->replace_this_binding(result);
+ verify_cast<FunctionEnvironment>(lexical_environment())->replace_this_binding(result);
}
auto prototype = new_target.get(names.prototype);
if (exception())
@@ -508,7 +508,7 @@ String VM::join_arguments(size_t start_index) const
Value VM::get_new_target()
{
auto& env = get_this_environment(*this);
- return verify_cast<FunctionEnvironmentRecord>(env).new_target();
+ return verify_cast<FunctionEnvironment>(env).new_target();
}
Value VM::call_internal(FunctionObject& function, Value this_value, Optional<MarkedValueList> arguments)
@@ -526,12 +526,12 @@ Value VM::call_internal(FunctionObject& function, Value this_value, Optional<Mar
callee_context.arguments = function.bound_arguments();
if (arguments.has_value())
callee_context.arguments.extend(arguments.value().values());
- auto* environment = function.create_environment_record(function);
+ auto* environment = function.create_environment(function);
callee_context.lexical_environment = environment;
callee_context.variable_environment = environment;
if (environment) {
- VERIFY(environment->this_binding_status() == FunctionEnvironmentRecord::ThisBindingStatus::Uninitialized);
+ VERIFY(environment->this_binding_status() == FunctionEnvironment::ThisBindingStatus::Uninitialized);
environment->bind_this_value(function.global_object(), callee_context.this_value);
}
@@ -613,13 +613,13 @@ void VM::dump_backtrace() const
dbgln("-> {}", m_execution_context_stack[i]->function_name);
}
-void VM::dump_environment_record_chain() const
+void VM::dump_environment_chain() const
{
- for (auto* environment_record = lexical_environment(); environment_record; environment_record = environment_record->outer_environment()) {
- dbgln("+> {} ({:p})", environment_record->class_name(), environment_record);
- if (is<DeclarativeEnvironmentRecord>(*environment_record)) {
- auto& declarative_environment_record = static_cast<DeclarativeEnvironmentRecord const&>(*environment_record);
- for (auto& variable : declarative_environment_record.variables()) {
+ for (auto* environment = lexical_environment(); environment; environment = environment->outer_environment()) {
+ dbgln("+> {} ({:p})", environment->class_name(), environment);
+ if (is<DeclarativeEnvironment>(*environment)) {
+ auto& declarative_environment = static_cast<DeclarativeEnvironment const&>(*environment);
+ for (auto& variable : declarative_environment.variables()) {
dbgln(" {}", variable.key);
}
}
diff --git a/Userland/Libraries/LibJS/Runtime/VM.h b/Userland/Libraries/LibJS/Runtime/VM.h
index d70900407f..0cad90aeba 100644
--- a/Userland/Libraries/LibJS/Runtime/VM.h
+++ b/Userland/Libraries/LibJS/Runtime/VM.h
@@ -49,8 +49,8 @@ struct ExecutionContext {
Value this_value;
Vector<Value> arguments;
Object* arguments_object { nullptr };
- EnvironmentRecord* lexical_environment { nullptr };
- EnvironmentRecord* variable_environment { nullptr };
+ Environment* lexical_environment { nullptr };
+ Environment* variable_environment { nullptr };
bool is_strict_mode { false };
};
@@ -73,7 +73,7 @@ public:
void clear_exception() { m_exception = nullptr; }
void dump_backtrace() const;
- void dump_environment_record_chain() const;
+ void dump_environment_chain() const;
class InterpreterExecutionScope {
public:
@@ -123,11 +123,11 @@ public:
Vector<ExecutionContext*> const& execution_context_stack() const { return m_execution_context_stack; }
Vector<ExecutionContext*>& execution_context_stack() { return m_execution_context_stack; }
- EnvironmentRecord const* lexical_environment() const { return running_execution_context().lexical_environment; }
- EnvironmentRecord* lexical_environment() { return running_execution_context().lexical_environment; }
+ Environment const* lexical_environment() const { return running_execution_context().lexical_environment; }
+ Environment* lexical_environment() { return running_execution_context().lexical_environment; }
- EnvironmentRecord const* variable_environment() const { return running_execution_context().variable_environment; }
- EnvironmentRecord* variable_environment() { return running_execution_context().variable_environment; }
+ Environment const* variable_environment() const { return running_execution_context().variable_environment; }
+ Environment* variable_environment() { return running_execution_context().variable_environment; }
bool in_strict_mode() const;
@@ -198,13 +198,13 @@ public:
FlyString unwind_until_label() const { return m_unwind_until_label; }
Value get_variable(const FlyString& name, GlobalObject&);
- void set_variable(const FlyString& name, Value, GlobalObject&, bool first_assignment = false, EnvironmentRecord* specific_scope = nullptr);
+ void set_variable(const FlyString& name, Value, GlobalObject&, bool first_assignment = false, Environment* specific_scope = nullptr);
bool delete_variable(FlyString const& name);
- void assign(const Variant<NonnullRefPtr<Identifier>, NonnullRefPtr<BindingPattern>>& target, Value, GlobalObject&, bool first_assignment = false, EnvironmentRecord* specific_scope = nullptr);
- void assign(const FlyString& target, Value, GlobalObject&, bool first_assignment = false, EnvironmentRecord* specific_scope = nullptr);
- void assign(const NonnullRefPtr<BindingPattern>& target, Value, GlobalObject&, bool first_assignment = false, EnvironmentRecord* specific_scope = nullptr);
+ void assign(const Variant<NonnullRefPtr<Identifier>, NonnullRefPtr<BindingPattern>>& target, Value, GlobalObject&, bool first_assignment = false, Environment* specific_scope = nullptr);
+ void assign(const FlyString& target, Value, GlobalObject&, bool first_assignment = false, Environment* specific_scope = nullptr);
+ void assign(const NonnullRefPtr<BindingPattern>& target, Value, GlobalObject&, bool first_assignment = false, Environment* specific_scope = nullptr);
- Reference resolve_binding(GlobalObject&, FlyString const&, EnvironmentRecord* = nullptr);
+ Reference resolve_binding(GlobalObject&, FlyString const&, Environment* = nullptr);
template<typename T, typename... Args>
void throw_exception(GlobalObject& global_object, Args&&... args)