diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.h b/Userland/Libraries/LibJS/Bytecode/Interpreter.h index 5ad350f561..04ac116607 100644 --- a/Userland/Libraries/LibJS/Bytecode/Interpreter.h +++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.h @@ -68,6 +68,10 @@ public: Executable const& current_executable() { return *m_current_executable; } BasicBlock const& current_block() const { return *m_current_block; } size_t pc() const { return m_pc ? m_pc->offset() : 0; } + String debug_position() + { + return String::formatted("{}:{:2}:{:4x}", m_current_executable->name, m_current_block->name(), pc()); + } enum class OptimizationLevel { None, diff --git a/Userland/Libraries/LibJS/Bytecode/Op.cpp b/Userland/Libraries/LibJS/Bytecode/Op.cpp index bf22532338..38a6ea1bab 100644 --- a/Userland/Libraries/LibJS/Bytecode/Op.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Op.cpp @@ -577,8 +577,7 @@ static MarkedVector argument_list_evaluation(Bytecode::Interpreter& inter auto arguments = interpreter.accumulator(); if (!(arguments.is_object() && is(arguments.as_object()))) { - dbgln("Call arguments are not an array, but: {}", arguments.to_string_without_side_effects()); - dbgln("PC: {}[{:4x}]", interpreter.current_block().name(), interpreter.pc()); + dbgln("[{}] Call arguments are not an array, but: {}", interpreter.debug_position(), arguments.to_string_without_side_effects()); interpreter.current_executable().dump(); VERIFY_NOT_REACHED(); }