diff options
author | John Hodge <tpg@mutabah.net> | 2016-10-10 19:43:50 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-10-10 19:43:50 +0800 |
commit | 15313ca2b6131541380d94c79afcc1b6a9583db3 (patch) | |
tree | 056ed3dd19b59ad22cc81ae716b197341c97fefb /src | |
parent | 666df501c9c8ae0a22ae8297c90e16f40baf6959 (diff) | |
download | mrust-15313ca2b6131541380d94c79afcc1b6a9583db3.tar.gz |
HIR Bind - Bind defaulted path params
Diffstat (limited to 'src')
-rw-r--r-- | src/hir_conv/bind.cpp | 8 | ||||
-rw-r--r-- | src/hir_typeck/helpers.cpp | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/hir_conv/bind.cpp b/src/hir_conv/bind.cpp index 576941ca..34c93930 100644 --- a/src/hir_conv/bind.cpp +++ b/src/hir_conv/bind.cpp @@ -339,10 +339,9 @@ namespace { } void visit_type(::HIR::TypeRef& ty) override { + //TRACE_FUNCTION_F(ty); static Span _sp = Span(); const Span& sp = _sp; - - ::HIR::Visitor::visit_type(ty); TU_IFLET(::HIR::TypeRef::Data, ty.m_data, Path, e, TU_MATCH( ::HIR::Path::Data, (e.path.m_data), (pe), @@ -355,10 +354,12 @@ namespace { (Struct, fix_param_count(sp, pe, e3.m_params, pe.m_params); e.binding = ::HIR::TypeRef::TypePathBinding::make_Struct(&e3); + DEBUG("- " << ty); ), (Enum, fix_param_count(sp, pe, e3.m_params, pe.m_params); e.binding = ::HIR::TypeRef::TypePathBinding::make_Enum(&e3); + DEBUG("- " << ty); ), (Trait, ty.m_data = ::HIR::TypeRef::Data::make_TraitObject({ ::HIR::TraitPath { mv$(pe), {}, {} }, {}, {} }); @@ -390,8 +391,9 @@ namespace { } ) ) - DEBUG(ty); ) + + ::HIR::Visitor::visit_type(ty); } void visit_expr(::HIR::ExprPtr& expr) override diff --git a/src/hir_typeck/helpers.cpp b/src/hir_typeck/helpers.cpp index e27d2b00..313d6269 100644 --- a/src/hir_typeck/helpers.cpp +++ b/src/hir_typeck/helpers.cpp @@ -2194,6 +2194,7 @@ bool TraitResolution::find_trait_impls_crate(const Span& sp, for(const auto& fld : se) { const auto& fld_ty_mono = monomorph_get(fld.ent); + DEBUG("Struct::Tuple " << fld_ty_mono); res &= type_impls_trait(fld_ty_mono); if( res == ::HIR::Compare::Unequal ) return ::HIR::Compare::Unequal; @@ -2203,6 +2204,7 @@ bool TraitResolution::find_trait_impls_crate(const Span& sp, for(const auto& fld : se) { const auto& fld_ty_mono = monomorph_get(fld.second.ent); + DEBUG("Struct::Named '" << fld.first << "' " << fld_ty_mono); res &= type_impls_trait(fld_ty_mono); if( res == ::HIR::Compare::Unequal ) @@ -2225,6 +2227,7 @@ bool TraitResolution::find_trait_impls_crate(const Span& sp, for(const auto& fld : ve) { const auto& fld_ty_mono = monomorph_get(fld.ent); + DEBUG("Enum '" << var.first << "'::Tuple " << fld_ty_mono); res &= type_impls_trait(fld_ty_mono); if( res == ::HIR::Compare::Unequal ) return ::HIR::Compare::Unequal; @@ -2234,6 +2237,7 @@ bool TraitResolution::find_trait_impls_crate(const Span& sp, for(const auto& fld : ve) { const auto& fld_ty_mono = monomorph_get(fld.second.ent); + DEBUG("Enum '" << var.first << "'::Struct '" << fld.first << "' " << fld_ty_mono); res &= type_impls_trait(fld_ty_mono); if( res == ::HIR::Compare::Unequal ) |