summaryrefslogtreecommitdiff
path: root/src/mir/from_hir.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2017-01-21 18:07:25 +0800
committerJohn Hodge <tpg@mutabah.net>2017-01-21 18:07:25 +0800
commita3d4dd65e0029f42c8cbc1869bb4d4357852cd81 (patch)
treeb3a2c6d23f20f9ec97da94fc2494b693e10f06d7 /src/mir/from_hir.hpp
parent41c852259d814cccb9d172d365c9cfddbc44bdfe (diff)
downloadmrust-a3d4dd65e0029f42c8cbc1869bb4d4357852cd81.tar.gz
MIR Gen - Fix drop generation
Diffstat (limited to 'src/mir/from_hir.hpp')
-rw-r--r--src/mir/from_hir.hpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mir/from_hir.hpp b/src/mir/from_hir.hpp
index c33ba274..0dfc9e50 100644
--- a/src/mir/from_hir.hpp
+++ b/src/mir/from_hir.hpp
@@ -91,9 +91,11 @@ TAGGED_UNION(ScopeType, Variables,
::std::vector<SplitArm> arms;
}),
(Loop, struct {
- ::std::set<unsigned int> changed_vars;
- ::std::set<unsigned int> changed_tmps;
- ::std::vector<SplitArm> exit_states;
+ // NOTE: This contains the original state for variables changed after `exit_state_valid` is true
+ ::std::map<unsigned int,VarState> changed_vars;
+ ::std::map<unsigned int,VarState> changed_tmps;
+ bool exit_state_valid;
+ SplitEnd exit_state;
})
);
@@ -225,6 +227,8 @@ private:
const VarState& get_temp_state(const Span& sp, unsigned int idx, unsigned int skip_count=0) const;
VarState& get_temp_state_mut(const Span& sp, unsigned int idx);
+ void terminate_loop_early(const Span& sp, ScopeType::Data_Loop& sd_loop);
+
void drop_value_from_state(const Span& sp, const VarState& vs, ::MIR::LValue lv);
void drop_scope_values(const ScopeDef& sd);
void complete_scope(ScopeDef& sd);