summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-10-24 11:46:23 +0800
committerJohn Hodge <tpg@mutabah.net>2016-10-24 11:46:23 +0800
commitfa75e45e730c4c793dd9c1f10ba8c0a6afeab7e8 (patch)
tree851605115c2e168e9ff77551caa9b6c3f1978a4a /src
parent22865bc4d62d81171906122c6fd47e6826d2dfa8 (diff)
downloadmrust-fa75e45e730c4c793dd9c1f10ba8c0a6afeab7e8.tar.gz
MIR Pointer - Fix missing move constructors
Diffstat (limited to 'src')
-rw-r--r--src/mir/dump.cpp4
-rw-r--r--src/mir/mir_ptr.cpp5
-rw-r--r--src/mir/mir_ptr.hpp19
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; }