diff options
author | John Hodge <tpg@mutabah.net> | 2016-10-24 11:46:23 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-10-24 11:46:23 +0800 |
commit | fa75e45e730c4c793dd9c1f10ba8c0a6afeab7e8 (patch) | |
tree | 851605115c2e168e9ff77551caa9b6c3f1978a4a /src | |
parent | 22865bc4d62d81171906122c6fd47e6826d2dfa8 (diff) | |
download | mrust-fa75e45e730c4c793dd9c1f10ba8c0a6afeab7e8.tar.gz |
MIR Pointer - Fix missing move constructors
Diffstat (limited to 'src')
-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; } |