diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp index 9a70c858b0..facfb4299e 100644 --- a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp @@ -1248,7 +1248,10 @@ ThrowCompletionOr Call::execute_impl(Bytecode::Interpreter& interpreter) c TRY(throw_if_needed_for_call(interpreter, callee, call_type(), expression_string())); - if (m_builtin.has_value() && m_argument_count == Bytecode::builtin_argument_count(m_builtin.value()) && interpreter.realm().get_builtin_value(m_builtin.value()) == callee) { + if (m_builtin.has_value() + && m_argument_count == Bytecode::builtin_argument_count(m_builtin.value()) + && callee.is_object() + && interpreter.realm().get_builtin_value(m_builtin.value()) == &callee.as_object()) { interpreter.set(dst(), TRY(dispatch_builtin_call(interpreter, m_builtin.value(), { m_arguments, m_argument_count }))); return {}; } diff --git a/Userland/Libraries/LibJS/Runtime/Realm.h b/Userland/Libraries/LibJS/Runtime/Realm.h index 5be4c4967b..bf362a9188 100644 --- a/Userland/Libraries/LibJS/Runtime/Realm.h +++ b/Userland/Libraries/LibJS/Runtime/Realm.h @@ -52,14 +52,14 @@ public: HostDefined* host_defined() { return m_host_defined; } void set_host_defined(OwnPtr host_defined) { m_host_defined = move(host_defined); } - void define_builtin(Bytecode::Builtin builtin, Value value) + void define_builtin(Bytecode::Builtin builtin, NonnullGCPtr value) { m_builtins[to_underlying(builtin)] = value; } - Value get_builtin_value(Bytecode::Builtin builtin) + NonnullGCPtr get_builtin_value(Bytecode::Builtin builtin) { - return m_builtins[to_underlying(builtin)]; + return *m_builtins[to_underlying(builtin)]; } static FlatPtr global_environment_offset() { return OFFSET_OF(Realm, m_global_environment); } @@ -74,7 +74,7 @@ private: GCPtr m_global_object; // [[GlobalObject]] GCPtr m_global_environment; // [[GlobalEnv]] OwnPtr m_host_defined; // [[HostDefined]] - AK::Array m_builtins; + AK::Array, to_underlying(Bytecode::Builtin::__Count)> m_builtins; }; }