diff options
author | John Hodge <tpg@mutabah.net> | 2017-01-20 21:58:55 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2017-01-20 21:58:55 +0800 |
commit | ad4fb9a9cec423605264083415db74b97374436e (patch) | |
tree | c8b96a886a3917d4e42ced95d16323312ea22796 | |
parent | 80fba399bb4a6f652a1a88e61522b73f96f1114b (diff) | |
download | mrust-ad4fb9a9cec423605264083415db74b97374436e.tar.gz |
MIR Gen - Invalid->Optional
-rw-r--r-- | src/mir/mir_builder.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mir/mir_builder.cpp b/src/mir/mir_builder.cpp index a76129d2..4523288e 100644 --- a/src/mir/mir_builder.cpp +++ b/src/mir/mir_builder.cpp @@ -719,13 +719,21 @@ namespace // Allocate a drop flag old_state = VarState::make_Optional( builder.new_drop_flag_and_set(sp, true) ); return ; - case VarState::TAG_Optional: + case VarState::TAG_Optional: { // Was invalid, now optional. - if( builder.get_drop_flag_default( sp, new_state.as_Optional() ) != false ) { + auto flag_idx = new_state.as_Optional(); + if( builder.get_drop_flag_default(sp, flag_idx) != false ) { + #if 1 + auto new_flag = builder.new_drop_flag(false); + builder.push_stmt_set_dropflag_other(sp, new_flag, flag_idx); + old_state = VarState::make_Optional( new_flag ); + #else TODO(sp, "Drop flag default not false when going Invalid->Optional"); + #endif } - old_state = VarState::make_Optional( new_state.as_Optional() ); + old_state = VarState::make_Optional( flag_idx ); return ; + } case VarState::TAG_Partial: TODO(sp, "Handle Invalid->Partial in split scope"); } |