diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-31 13:13:38 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-31 13:13:38 +0800 |
commit | 58d7abdfed79c85e6bfa274542b6674a1b78e6e7 (patch) | |
tree | caf347a89e72555280b6a3c500bf623cbe1acfac | |
parent | 4096af147b55282863a57badf8f62a633f3901c6 (diff) | |
download | mrust-58d7abdfed79c85e6bfa274542b6674a1b78e6e7.tar.gz |
Expand Derive - Hack around getting a trait object to a [T]
-rw-r--r-- | src/expand/derive.cpp | 8 | ||||
-rw-r--r-- | src/mir/cleanup.cpp | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/expand/derive.cpp b/src/expand/derive.cpp index 46457784..972ee442 100644 --- a/src/expand/derive.cpp +++ b/src/expand/derive.cpp @@ -311,12 +311,12 @@ public: mv$(node), AST::PathNode("field",{}), vec$( NEWNODE(String, fld.m_name), - NEWNODE(UniOp, AST::ExprNode_UniOp::REF, + NEWNODE(UniOp, AST::ExprNode_UniOp::REF, NEWNODE(UniOp, AST::ExprNode_UniOp::REF, NEWNODE(Field, NEWNODE(NamedValue, AST::Path("self")), fld.m_name ) - ) + )) ) ); } @@ -333,12 +333,12 @@ public: node = NEWNODE(CallMethod, mv$(node), AST::PathNode("field",{}), vec$( - NEWNODE(UniOp, AST::ExprNode_UniOp::REF, + NEWNODE(UniOp, AST::ExprNode_UniOp::REF, NEWNODE(UniOp, AST::ExprNode_UniOp::REF, NEWNODE(Field, NEWNODE(NamedValue, AST::Path("self")), FMT(idx) ) - ) + )) ) ); } diff --git a/src/mir/cleanup.cpp b/src/mir/cleanup.cpp index 5c15c1a0..8a5ee1dc 100644 --- a/src/mir/cleanup.cpp +++ b/src/mir/cleanup.cpp @@ -603,6 +603,8 @@ bool MIR_Cleanup_Unsize_GetMetadata(const ::MIR::TypeResolve& state, MirMutator& } else { + MIR_ASSERT(state, state.m_resolve.type_is_sized(state.sp, src_ty), "Attempting to get vtable for unsized type - " << src_ty); + ::HIR::Path vtable { src_ty.clone(), trait_path.m_path.clone(), "#vtable" }; out_meta_val = ::MIR::RValue( ::MIR::Constant::make_ItemAddr(mv$(vtable)) ); } |