From d8c6fdf7112a2ddb058e6624d7707bba2952ed65 Mon Sep 17 00:00:00 2001 From: Sahil Jain Date: Sat, 30 Aug 2025 20:01:32 +0530 Subject: [PATCH] Address comments --- bytecode.cpp | 12 ++++++------ pyc_code.cpp | 14 +++++++------- pyc_code.h | 16 +++++++++++++--- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/bytecode.cpp b/bytecode.cpp index 0b067b2..6bee279 100644 --- a/bytecode.cpp +++ b/bytecode.cpp @@ -604,14 +604,14 @@ void bc_disasm(std::ostream& pyc_output, PycRef code, PycModule* mod, void bc_exceptiontable(std::ostream& pyc_output, PycRef code, int indent) { - for (auto tuple: code->exceptTableEntries()) { + for (const auto& entry : code->exceptionTableEntries()) { for (int i=0; i(tuple) << " to " << std::get<1>(tuple); - pyc_output << " -> " << std::get<2>(tuple) << " "; - pyc_output << "[" << std::get<3>(tuple) << "] " << (std::get<4>(tuple) ? "lasti": ""); - pyc_output << "\n"; + pyc_output << entry.start_offset << " to " << entry.end_offset + << " -> " << entry.target << " [" << entry.stack_depth + << "] " << (entry.push_lasti ? "lasti": "") + << "\n"; } -} \ No newline at end of file +} diff --git a/pyc_code.cpp b/pyc_code.cpp index ec8be8e..b88f666 100644 --- a/pyc_code.cpp +++ b/pyc_code.cpp @@ -133,23 +133,23 @@ int _parse_varint(PycBuffer& data, int& pos) { int b = data.getByte(); pos += 1; - int val = b & 63; - while (b & 64) { + int val = b & 0x3F; + while (b & 0x40) { val <<= 6; b = data.getByte(); pos += 1; - val |= (b & 63); + val |= (b & 0x3F); } return val; } -std::vector PycCode::exceptTableEntries() const +std::vector PycCode::exceptionTableEntries() const { PycBuffer data(m_exceptTable->value(), m_exceptTable->length()); - std::vector entries; + std::vector entries; int pos = 0; while (!data.atEof()) { @@ -164,8 +164,8 @@ std::vector PycCode::exceptTableEntries() cons int depth = dl >> 1; bool lasti = bool(dl & 1); - entries.emplace_back(start, end, target, depth, lasti); + entries.push_back(PycExceptionTableEntry(start, end, target, depth, lasti)); } return entries; -} \ No newline at end of file +} diff --git a/pyc_code.h b/pyc_code.h index 0a64ee5..6485729 100644 --- a/pyc_code.h +++ b/pyc_code.h @@ -8,6 +8,18 @@ class PycData; class PycModule; +class PycExceptionTableEntry { +public: + int start_offset; // inclusive + int end_offset; // exclusive + int target; + int stack_depth; + bool push_lasti; + + PycExceptionTableEntry(int m_start_offset, int m_end_offset, int m_target, int m_stack_depth, bool m_push_lasti) : + start_offset(m_start_offset), end_offset(m_end_offset), target(m_target), stack_depth(m_stack_depth), push_lasti(m_push_lasti) {}; +}; + class PycCode : public PycObject { public: typedef std::vector> globals_t; @@ -87,9 +99,7 @@ public: m_globalsUsed.emplace_back(std::move(varname)); } - typedef std::tuple exception_table_entry_t; - - std::vector exceptTableEntries() const; + std::vector exceptionTableEntries() const; private: int m_argCount, m_posOnlyArgCount, m_kwOnlyArgCount, m_numLocals;