diff options
Diffstat (limited to 'src/mir/mir_builder.cpp')
-rw-r--r-- | src/mir/mir_builder.cpp | 14 |
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() |