diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-04-20 09:34:26 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-04-20 09:34:26 +0800 |
commit | 579327643e143da3144a397723be8bd34dcd6dc2 (patch) | |
tree | be581c4ceb25e021beb662acd2f03dc6658b7bbb /src/mir/helpers.hpp | |
parent | e26514bf6052235eb367f05c7fec8f6c2abc3f3a (diff) | |
download | mrust-579327643e143da3144a397723be8bd34dcd6dc2.tar.gz |
MIR Helpers - Improved value lifetime determining
Diffstat (limited to 'src/mir/helpers.hpp')
-rw-r--r-- | src/mir/helpers.hpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/mir/helpers.hpp b/src/mir/helpers.hpp index c84222bd..3a37ed8e 100644 --- a/src/mir/helpers.hpp +++ b/src/mir/helpers.hpp @@ -120,6 +120,10 @@ public: statements( mv$(stmts) ) {} + bool valid_at(size_t ofs) const { + return statements.at(ofs); + } + // true if this value is used at any point bool is_used() const { for(auto v : statements) @@ -148,10 +152,18 @@ public: struct ValueLifetimes { + ::std::vector<size_t> m_block_offsets; ::std::vector<ValueLifetime> m_temporaries; ::std::vector<ValueLifetime> m_variables; + + bool var_valid(unsigned var_idx, unsigned bb_idx, unsigned stmt_idx) const { + return m_variables.at(var_idx).valid_at( m_block_offsets[bb_idx] + stmt_idx ); + } + bool tmp_valid(unsigned tmp_idx, unsigned bb_idx, unsigned stmt_idx) const { + return m_temporaries.at(tmp_idx).valid_at( m_block_offsets[bb_idx] + stmt_idx ); + } }; } // namespace MIR -extern ::MIR::ValueLifetimes MIR_Helper_GetLifetimes(::MIR::TypeResolve& state, ::MIR::Function& fcn, bool dump_debug); +extern ::MIR::ValueLifetimes MIR_Helper_GetLifetimes(::MIR::TypeResolve& state, const ::MIR::Function& fcn, bool dump_debug); |