diff options
-rw-r--r-- | src/mir/dump.cpp | 4 | ||||
-rw-r--r-- | src/mir/mir_ptr.cpp | 5 | ||||
-rw-r--r-- | src/mir/mir_ptr.hpp | 19 |
3 files changed, 25 insertions, 3 deletions
diff --git a/src/mir/dump.cpp b/src/mir/dump.cpp index 0023d2b6..fe1e16f1 100644 --- a/src/mir/dump.cpp +++ b/src/mir/dump.cpp @@ -150,6 +150,8 @@ namespace { for(unsigned int i = 0; i < fcn.blocks.size(); i ++) { const auto& block = fcn.blocks[i]; + DEBUG("BB" << i); + m_os << indent() << "bb" << i << ": {\n"; inc_indent(); for(const auto& stmt : block.statements) @@ -158,9 +160,11 @@ namespace { TU_MATCHA( (stmt), (e), (Assign, + DEBUG("- Assign " << e.dst << " = " << e.src); m_os << FMT_M(e.dst) << " = " << FMT_M(e.src) << ";\n"; ), (Drop, + DEBUG("- DROP " << e.slot); m_os << "drop(" << FMT_M(e.slot) << ");\n"; ) ) diff --git a/src/mir/mir_ptr.cpp b/src/mir/mir_ptr.cpp index f7d08ac9..5535d9bf 100644 --- a/src/mir/mir_ptr.cpp +++ b/src/mir/mir_ptr.cpp @@ -9,10 +9,11 @@ #include "mir.hpp" -::MIR::FunctionPointer::~FunctionPointer() +void ::MIR::FunctionPointer::reset() { if( this->ptr ) { - delete this->ptr, this->ptr = nullptr; + delete this->ptr; + this->ptr = nullptr; } } diff --git a/src/mir/mir_ptr.hpp b/src/mir/mir_ptr.hpp index d78df6d9..180fd6c3 100644 --- a/src/mir/mir_ptr.hpp +++ b/src/mir/mir_ptr.hpp @@ -1,4 +1,9 @@ /* + * MRustC - Rust Compiler + * - By John Hodge (Mutabah/thePowersGang) + * + * mir/mir_ptr.hpp + * - Pointer to a blob of MIR */ #pragma once @@ -13,7 +18,19 @@ class FunctionPointer public: FunctionPointer(): ptr(nullptr) {} FunctionPointer(::MIR::Function* p): ptr(p) {} - ~FunctionPointer(); + FunctionPointer(FunctionPointer&& x): ptr(x.ptr) { x.ptr = nullptr; } + + ~FunctionPointer() { + reset(); + } + FunctionPointer& operator=(FunctionPointer&& x) { + reset(); + ptr = x.ptr; + x.ptr = nullptr; + return *this; + } + + void reset(); ::MIR::Function& operator->() { return *ptr; } ::MIR::Function& operator*() { return *ptr; } |