diff options
author | John Hodge (Mutabah) <acessdev@gmail.com> | 2016-12-25 17:19:27 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-25 17:19:27 +1100 |
commit | 753a2f44cc4c00b952cddae2ceed066ebb18a470 (patch) | |
tree | ed4bbff4be39c44c57164641f4ed32b5ad4675f0 /src/hir_expand/annotate_value_usage.cpp | |
parent | d12a8a886caf2e0edf33c1af831b1df990d2c892 (diff) | |
parent | 0c14c734fa32014fd24297ccdbed927016185ffd (diff) | |
download | mrust-753a2f44cc4c00b952cddae2ceed066ebb18a470.tar.gz |
Merge pull request #11 from ubsan/whitespace-fix
No more tears!
Diffstat (limited to 'src/hir_expand/annotate_value_usage.cpp')
-rw-r--r-- | src/hir_expand/annotate_value_usage.cpp | 102 |
1 files changed, 51 insertions, 51 deletions
diff --git a/src/hir_expand/annotate_value_usage.cpp b/src/hir_expand/annotate_value_usage.cpp index 4aaf1f84..8141f1a6 100644 --- a/src/hir_expand/annotate_value_usage.cpp +++ b/src/hir_expand/annotate_value_usage.cpp @@ -12,13 +12,13 @@ #include "main_bindings.hpp" namespace { - + class ExprVisitor_Mark: public ::HIR::ExprVisitor//Def { const StaticTraitResolve& m_resolve; ::std::vector< ::HIR::ValueUsage> m_usage; - + struct UsageGuard { ExprVisitor_Mark& m_parent; @@ -35,7 +35,7 @@ namespace { } } }; - + ::HIR::ValueUsage get_usage() const { return (m_usage.empty() ? ::HIR::ValueUsage::Move : m_usage.back()); } @@ -48,12 +48,12 @@ namespace { return UsageGuard(*this, true); } } - + public: ExprVisitor_Mark(const StaticTraitResolve& resolve): m_resolve(resolve) {} - + void visit_root(::HIR::ExprPtr& root_ptr) { assert(root_ptr); @@ -65,27 +65,27 @@ namespace { void visit_node_ptr(::HIR::ExprNodeP& node_ptr) override { assert(node_ptr); - + const auto& node_ref = *node_ptr; const char* node_tyname = typeid(node_ref).name(); TRACE_FUNCTION_FR(&*node_ptr << " " << node_tyname, node_ptr->m_usage); - + node_ptr->m_usage = this->get_usage(); - + auto expected_size = m_usage.size(); node_ptr->visit( *this ); assert( m_usage.size() == expected_size ); } - + void visit(::HIR::ExprNode_Block& node) override { auto _ = this->push_usage( ::HIR::ValueUsage::Move ); - + for( auto& subnode : node.m_nodes ) { this->visit_node_ptr(subnode); } } - + void visit(::HIR::ExprNode_Return& node) override { auto _ = this->push_usage( ::HIR::ValueUsage::Move ); @@ -115,13 +115,13 @@ namespace { ::HIR::ValueUsage vu = ::HIR::ValueUsage::Unknown; for( const auto& arm : node.m_arms ) { - for( const auto& pat : arm.m_patterns ) + for( const auto& pat : arm.m_patterns ) vu = ::std::max( vu, this->get_usage_for_pattern(node.span(), pat, val_ty) ); } auto _ = this->push_usage( vu ); this->visit_node_ptr( node.m_value ); } - + auto _ = this->push_usage( ::HIR::ValueUsage::Move ); for(auto& arm : node.m_arms) { @@ -140,7 +140,7 @@ namespace { this->visit_node_ptr( node.m_false ); } } - + void visit(::HIR::ExprNode_Assign& node) override { { @@ -155,9 +155,9 @@ namespace { void visit(::HIR::ExprNode_UniOp& node) override { m_usage.push_back( ::HIR::ValueUsage::Move ); - + this->visit_node_ptr(node.m_value); - + m_usage.pop_back(); } void visit(::HIR::ExprNode_Borrow& node) override @@ -174,12 +174,12 @@ namespace { m_usage.push_back( ::HIR::ValueUsage::Move ); break; } - + this->visit_node_ptr(node.m_value); - + m_usage.pop_back(); } - + void visit(::HIR::ExprNode_BinOp& node) override { switch(node.m_op) @@ -196,10 +196,10 @@ namespace { m_usage.push_back( ::HIR::ValueUsage::Move ); break; } - + this->visit_node_ptr(node.m_left); this->visit_node_ptr(node.m_right); - + m_usage.pop_back(); } void visit(::HIR::ExprNode_Cast& node) override @@ -222,7 +222,7 @@ namespace { else { this->visit_node_ptr(node.m_value); } - + auto _ = push_usage( ::HIR::ValueUsage::Move ); this->visit_node_ptr(node.m_index); } @@ -241,7 +241,7 @@ namespace { this->visit_node_ptr(node.m_value); } } - + void visit(::HIR::ExprNode_Emplace& node) override { if( node.m_type == ::HIR::ExprNode_Emplace::Type::Noop ) { @@ -256,7 +256,7 @@ namespace { this->visit_node_ptr(node.m_value); } } - + void visit(::HIR::ExprNode_Field& node) override { bool is_copy = m_resolve.type_is_copy(node.span(), node.m_res_type); @@ -270,18 +270,18 @@ namespace { this->visit_node_ptr(node.m_value); } } - + void visit(::HIR::ExprNode_TupleVariant& node) override { auto _ = push_usage( ::HIR::ValueUsage::Move ); - + for( auto& val : node.m_args ) this->visit_node_ptr(val); } void visit(::HIR::ExprNode_CallPath& node) override { auto _ = push_usage( ::HIR::ValueUsage::Move ); - + for( auto& val : node.m_args ) this->visit_node_ptr(val); } @@ -311,7 +311,7 @@ namespace { auto _ = push_usage( vu ); this->visit_node_ptr(node.m_value); } - + auto _ = push_usage( ::HIR::ValueUsage::Move ); for( auto& val : node.m_args ) this->visit_node_ptr(val); @@ -319,12 +319,12 @@ namespace { void visit(::HIR::ExprNode_CallMethod& node) override { auto _ = push_usage( ::HIR::ValueUsage::Move ); - + this->visit_node_ptr(node.m_value); for( auto& val : node.m_args ) this->visit_node_ptr(val); } - + void visit(::HIR::ExprNode_Literal& node) override { } @@ -358,7 +358,7 @@ namespace { unsigned idx = ::std::find_if( fields.begin(), fields.end(), [&](const auto& x){ return x.first == fld.first; }) - fields.begin(); provided_mask[idx] = true; } - + const auto monomorph_cb = monomorphise_type_get_cb(node.span(), nullptr, &node.m_path.m_params, nullptr); for( unsigned int i = 0; i < fields.size(); i ++ ) { if( ! provided_mask[i] ) { @@ -372,12 +372,12 @@ namespace { } } } - + // If only Copy fields will be used, set usage to Borrow auto _ = push_usage( is_moved ? ::HIR::ValueUsage::Move : ::HIR::ValueUsage::Borrow ); this->visit_node_ptr(node.m_base_value); } - + auto _ = push_usage( ::HIR::ValueUsage::Move ); for( auto& fld_val : node.m_values ) { this->visit_node_ptr(fld_val.second); @@ -407,13 +407,13 @@ namespace { auto _ = push_usage( ::HIR::ValueUsage::Move ); this->visit_node_ptr(node.m_val); } - + void visit(::HIR::ExprNode_Closure& node) override { auto _ = push_usage( ::HIR::ValueUsage::Move ); this->visit_node_ptr(node.m_code); } - + private: ::HIR::ValueUsage get_usage_for_pattern_binding(const Span& sp, const ::HIR::PatternBinding& pb, const ::HIR::TypeRef& ty) const { @@ -431,13 +431,13 @@ namespace { } throw ""; } - + ::HIR::ValueUsage get_usage_for_pattern(const Span& sp, const ::HIR::Pattern& pat, const ::HIR::TypeRef& ty) const { if( pat.m_binding.is_valid() ) { return get_usage_for_pattern_binding(sp, pat.m_binding, ty); } - + TU_MATCHA( (pat.m_data), (pe), (Any, return ::HIR::ValueUsage::Borrow; @@ -477,7 +477,7 @@ namespace { const auto& flds = str.m_data.as_Tuple(); assert(pe.sub_patterns.size() == flds.size()); auto monomorph_cb = monomorphise_type_get_cb(sp, nullptr, &pe.path.m_params, nullptr); - + auto rv = ::HIR::ValueUsage::Borrow; for(unsigned int i = 0; i < flds.size(); i ++) { auto sty = monomorphise_type_with(sp, flds[i].ent, monomorph_cb); @@ -489,13 +489,13 @@ namespace { const auto& str = *pe.binding; const auto& flds = str.m_data.as_Named(); auto monomorph_cb = monomorphise_type_get_cb(sp, nullptr, &pe.path.m_params, nullptr); - + auto rv = ::HIR::ValueUsage::Borrow; for(const auto& fld_pat : pe.sub_patterns) { auto fld_it = ::std::find_if(flds.begin(), flds.end(), [&](const auto& x){return x.first == fld_pat.first;}); ASSERT_BUG(sp, fld_it != flds.end(), ""); - + auto sty = monomorphise_type_with(sp, fld_it->second.ent, monomorph_cb); rv = ::std::max(rv, get_usage_for_pattern(sp, fld_pat.second, sty)); } @@ -516,7 +516,7 @@ namespace { const auto& flds = var.second.as_Tuple(); assert(pe.sub_patterns.size() == flds.size()); auto monomorph_cb = monomorphise_type_get_cb(sp, nullptr, &pe.path.m_params, nullptr); - + auto rv = ::HIR::ValueUsage::Borrow; for(unsigned int i = 0; i < flds.size(); i ++) { auto sty = monomorphise_type_with(sp, flds[i].ent, monomorph_cb); @@ -529,13 +529,13 @@ namespace { const auto& var = enm.m_variants.at(pe.binding_idx); const auto& flds = var.second.as_Struct(); auto monomorph_cb = monomorphise_type_get_cb(sp, nullptr, &pe.path.m_params, nullptr); - + auto rv = ::HIR::ValueUsage::Borrow; for(const auto& fld_pat : pe.sub_patterns) { auto fld_it = ::std::find_if(flds.begin(), flds.end(), [&](const auto& x){return x.first == fld_pat.first;}); ASSERT_BUG(sp, fld_it != flds.end(), ""); - + auto sty = monomorphise_type_with(sp, fld_it->second.ent, monomorph_cb); rv = ::std::max(rv, get_usage_for_pattern(sp, fld_pat.second, sty)); } @@ -564,7 +564,7 @@ namespace { } }; - + class OuterVisitor: public ::HIR::Visitor { @@ -573,7 +573,7 @@ namespace { OuterVisitor(const ::HIR::Crate& crate): m_resolve(crate) {} - + void visit_expr(::HIR::ExprPtr& exp) override { if( exp ) { @@ -581,7 +581,7 @@ namespace { ev.visit_root( exp ); } } - + // ------ // Code-containing items // ------ @@ -602,25 +602,25 @@ namespace { auto _ = this->m_resolve.set_item_generics(item.m_params); ::HIR::Visitor::visit_enum(p, item); } - - + + void visit_trait(::HIR::ItemPath p, ::HIR::Trait& item) override { auto _ = this->m_resolve.set_impl_generics(item.m_params); ::HIR::Visitor::visit_trait(p, item); } - + void visit_type_impl(::HIR::TypeImpl& impl) override { TRACE_FUNCTION_F("impl " << impl.m_type); auto _ = this->m_resolve.set_impl_generics(impl.m_params); - + ::HIR::Visitor::visit_type_impl(impl); } void visit_trait_impl(const ::HIR::SimplePath& trait_path, ::HIR::TraitImpl& impl) override { TRACE_FUNCTION_F("impl " << trait_path << " for " << impl.m_type); auto _ = this->m_resolve.set_impl_generics(impl.m_params); - + ::HIR::Visitor::visit_trait_impl(trait_path, impl); } }; |