summaryrefslogtreecommitdiff
path: root/src/hir/from_ast_expr.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-09-18 09:52:28 +0800
committerJohn Hodge <tpg@mutabah.net>2016-09-18 09:52:28 +0800
commit95ea85ee5bf1403e3badcb9d890cf848c845ace0 (patch)
tree381e198ba0067bc993054e985326929293de6282 /src/hir/from_ast_expr.cpp
parentb049dd7d36b991bb95f273d862f95f0865c929c2 (diff)
downloadmrust-95ea85ee5bf1403e3badcb9d890cf848c845ace0.tar.gz
HIR - Rework to include a node for in/box (for better type inferrence)
Diffstat (limited to 'src/hir/from_ast_expr.cpp')
-rw-r--r--src/hir/from_ast_expr.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp
index 3a2cd652..01f35cf4 100644
--- a/src/hir/from_ast_expr.cpp
+++ b/src/hir/from_ast_expr.cpp
@@ -188,9 +188,16 @@ struct LowerHIR_ExprNode_Visitor:
::HIR::ExprNode_UniOp::Op op;
switch(v.m_type)
{
- case ::AST::ExprNode_UniOp::BOX:
- BUG(v.get_pos(), "Encounterd box operator (should have been expanded in AST)");
- break;
+ case ::AST::ExprNode_UniOp::BOX: {
+ // TODO: Emit a call to `<_ as "core"::default::Default>::default()` in place of the nullptr
+ auto path_Default = ::HIR::GenericPath( ::HIR::SimplePath(g_core_crate, {"default", "Default"}) );
+ m_rv.reset(new ::HIR::ExprNode_Emplace(v.span(),
+ ::HIR::ExprNode_Emplace::Type::Boxer,
+ //::HIR::ExprNodeP(new ::HIR::ExprNode_CallPath(v.span(), ::HIR::Path(::HIR::TypeRef(), mv$(path_Default), "default"), {} )),
+ ::HIR::ExprNodeP(new ::HIR::ExprNode_Tuple(v.span(), {})),
+ LowerHIR_ExprNode_Inner(*v.m_value)
+ ));
+ } break;
case ::AST::ExprNode_UniOp::QMARK:
BUG(v.get_pos(), "Encounterd question mark operator (should have been expanded in AST)");
break;