summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-31 19:37:09 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-31 19:37:09 +0800
commit09b5d7303ddc4638e2f2ba2a9037cb329784aacd (patch)
tree0523f3e0c4621823feee54fea41f4bcbbb611e3e
parent443e92160885b4b7c3b0c0777b98566b70639861 (diff)
downloadmrust-09b5d7303ddc4638e2f2ba2a9037cb329784aacd.tar.gz
HIR From AST - Trait binding
-rw-r--r--src/hir/from_ast.cpp4
-rw-r--r--src/resolve/absolute.cpp6
2 files changed, 4 insertions, 6 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp
index d992d547..359d6ed9 100644
--- a/src/hir/from_ast.cpp
+++ b/src/hir/from_ast.cpp
@@ -1089,9 +1089,7 @@ void LowerHIR_Module_Impls(const ::AST::Module& ast_mod, ::HIR::Crate& hir_crat
const auto& pb = impl.def().trait().ent.binding();
ASSERT_BUG(Span(), pb.is_Trait(), "Binding for trait path in impl isn't a Trait - " << impl.def().trait().ent);
ASSERT_BUG(Span(), pb.as_Trait().trait_ || pb.as_Trait().hir, "Trait pointer for trait path in impl isn't set");
- ASSERT_BUG(Span(), pb.as_Trait().trait_, "Trait pointer for trait path in impl isn't set");
- const auto& trait_def = *pb.as_Trait().trait_;
- bool is_marker = trait_def.is_marker();
+ bool is_marker = (pb.as_Trait().trait_ ? pb.as_Trait().trait_->is_marker() : pb.as_Trait().hir->m_is_marker);
auto trait_path = LowerHIR_GenericPath(impl.def().trait().sp, impl.def().trait().ent);
auto trait_name = mv$(trait_path.m_path);
auto trait_args = mv$(trait_path.m_params);
diff --git a/src/resolve/absolute.cpp b/src/resolve/absolute.cpp
index 15401bc9..1457fa7e 100644
--- a/src/resolve/absolute.cpp
+++ b/src/resolve/absolute.cpp
@@ -692,7 +692,7 @@ namespace {
pb = ::AST::PathBinding::make_Module({nullptr, &e});
),
(Trait,
- pb = ::AST::PathBinding::make_Trait({nullptr/*, &e*/});
+ pb = ::AST::PathBinding::make_Trait({nullptr, &e});
),
(TypeAlias,
),
@@ -737,7 +737,7 @@ namespace {
if( !n.args().is_empty() ) {
trait_path.nodes().back().args() = mv$(n.args());
}
- trait_path.bind( ::AST::PathBinding::make_Trait({nullptr}) );
+ trait_path.bind( ::AST::PathBinding::make_Trait({nullptr, &e}) );
::AST::Path new_path;
const auto& next_node = path_abs.nodes[i+1];
@@ -821,7 +821,7 @@ namespace {
throw "";
),
(Trait,
- path.bind( ::AST::PathBinding::make_Trait({nullptr}) );
+ path.bind( ::AST::PathBinding::make_Trait({nullptr, &e}) );
),
(Module,
path.bind( ::AST::PathBinding::make_Module({nullptr, &e}) );