diff options
author | John Hodge <tpg@mutabah.net> | 2016-06-12 13:10:38 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-06-12 13:10:38 +0800 |
commit | 1c75ff6ca74ca61049b29c5b9ce6f916752c87c7 (patch) | |
tree | 8be551e5fa5db2f4e20f37418bd42c3c813981c8 | |
parent | 7afaf33d066a362428bc35c99faec25a3294b230 (diff) | |
download | mrust-1c75ff6ca74ca61049b29c5b9ce6f916752c87c7.tar.gz |
HIR Typecheck - Assign ops minor fix
-rw-r--r-- | src/hir/from_ast_expr.cpp | 1 | ||||
-rw-r--r-- | src/hir_typeck/expr.cpp | 23 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp index 1dcbf261..ea46c4c3 100644 --- a/src/hir/from_ast_expr.cpp +++ b/src/hir/from_ast_expr.cpp @@ -29,6 +29,7 @@ struct LowerHIR_ExprNode_Visitor: rv->m_nodes.push_back( LowerHIR_ExprNode_Inner( *n ) ); } else { + assert(&n == &v.m_nodes.back()); rv->m_nodes.push_back( ::HIR::ExprNodeP( new ::HIR::ExprNode_Tuple(Span(), {}) ) ); } } diff --git a/src/hir_typeck/expr.cpp b/src/hir_typeck/expr.cpp index d6f914cd..77742b0a 100644 --- a/src/hir_typeck/expr.cpp +++ b/src/hir_typeck/expr.cpp @@ -608,6 +608,7 @@ namespace typeck { void visit(::HIR::ExprNode_Assign& node) override { TRACE_FUNCTION_F("... = ..."); + ::HIR::ExprVisitorDef::visit(node); // Plain assignment can't be overloaded, requires equal types if( node.m_op == ::HIR::ExprNode_Assign::Op::None ) { this->context.apply_equality(node.span(), @@ -646,11 +647,29 @@ namespace typeck { } assert(lang_item); const auto& trait_path = this->context.m_crate.get_lang_item_path(node.span(), lang_item); - // TODO: Look for implementation of ops trait + + + + /*bool rv =*/ this->context.find_trait_impls(trait_path, ty_left, [&](const auto& args) { + assert( args.m_types.size() == 1 ); + const auto& impl_right = args.m_types[0]; + + TODO(node.span(), "Check " << impl_right << " vs " << ty_right); + + //auto cmp = impl_index.compare_with_paceholders(node.span(), index_ty, this->context.callback_resolve_infer()); + //if( cmp == ::HIR::Compare::Unequal) + // return false; + //if( cmp == ::HIR::Compare::Equal ) { + // return true; + //} + //DEBUG("TODO: Handle fuzzy match index operator " << impl_index); + return false; + }); + + this->context.dump(); TODO(node.span(), "Search for implementation of " << trait_path << "<" << ty_right << "> for " << ty_left); } } - ::HIR::ExprVisitorDef::visit(node); } // - BinOp: Look for overload or primitive void visit(::HIR::ExprNode_BinOp& node) override |