Przeglądaj źródła

LibJS: Add a debug_position helper to the Bytecode Interpreter

This also changes argument_list_evaluation's dbgln to use it.
Hendiadyoin1 2 lat temu
rodzic
commit
8c4717fc6e

+ 4 - 0
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,

+ 1 - 2
Userland/Libraries/LibJS/Bytecode/Op.cpp

@@ -577,8 +577,7 @@ static MarkedVector<Value> argument_list_evaluation(Bytecode::Interpreter& inter
     auto arguments = interpreter.accumulator();
 
     if (!(arguments.is_object() && is<Array>(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();
     }