summaryrefslogtreecommitdiff
path: root/src/mir/mir_builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mir/mir_builder.cpp')
-rw-r--r--src/mir/mir_builder.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mir/mir_builder.cpp b/src/mir/mir_builder.cpp
index 6df64a0e..530ee0e9 100644
--- a/src/mir/mir_builder.cpp
+++ b/src/mir/mir_builder.cpp
@@ -1419,6 +1419,20 @@ void MirBuilder::moved_lvalue(const Span& sp, const ::MIR::LValue& lv)
)
}
+const ::MIR::LValue& MirBuilder::get_ptr_to_dst(const Span& sp, const ::MIR::LValue& lv) const
+{
+ // Undo field accesses
+ const auto* lvp = &lv;
+ while(lvp->is_Field())
+ lvp = &*lvp->as_Field().val;
+
+ // TODO: Enum variants?
+
+ ASSERT_BUG(sp, lvp->is_Deref(), "Access of an unsized field without a dereference - " << lv);
+
+ return *lvp->as_Deref().val;
+}
+
// --------------------------------------------------------------------
ScopeHandle::~ScopeHandle()