summaryrefslogtreecommitdiff
path: root/src/mir/helpers.hpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-04-20 09:34:26 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-04-20 09:34:26 +0800
commit579327643e143da3144a397723be8bd34dcd6dc2 (patch)
treebe581c4ceb25e021beb662acd2f03dc6658b7bbb /src/mir/helpers.hpp
parente26514bf6052235eb367f05c7fec8f6c2abc3f3a (diff)
downloadmrust-579327643e143da3144a397723be8bd34dcd6dc2.tar.gz
MIR Helpers - Improved value lifetime determining
Diffstat (limited to 'src/mir/helpers.hpp')
-rw-r--r--src/mir/helpers.hpp14
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);