浏览代码

LibJS: Add a debug_position helper to the Bytecode Interpreter

This also changes argument_list_evaluation's dbgln to use it.
Hendiadyoin1 2 年之前
父节点
当前提交
8c4717fc6e
共有 2 个文件被更改,包括 5 次插入2 次删除
  1. 4 0
      Userland/Libraries/LibJS/Bytecode/Interpreter.h
  2. 1 2
      Userland/Libraries/LibJS/Bytecode/Op.cpp

+ 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();
     }