diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-29 08:25:05 +1100 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-29 08:25:05 +1100 |
commit | dd89eb7acb16234a7a9f2b6e0aee4788024c0df6 (patch) | |
tree | 5e5b259d7b8e8be7698fda6ca2b8d1d79118c86a /src/hir/from_ast_expr.cpp | |
parent | 59d95e289122a84ea057ff5ed15d7d0e583138ed (diff) | |
download | mrust-dd89eb7acb16234a7a9f2b6e0aee4788024c0df6.tar.gz |
HIR - asm! node
Diffstat (limited to 'src/hir/from_ast_expr.cpp')
-rw-r--r-- | src/hir/from_ast_expr.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp index 08e49aa4..25f6eade 100644 --- a/src/hir/from_ast_expr.cpp +++ b/src/hir/from_ast_expr.cpp @@ -47,7 +47,14 @@ struct LowerHIR_ExprNode_Visitor: BUG(v.get_pos(), "Hit ExprNode_Macro"); } virtual void visit(::AST::ExprNode_Asm& v) override { - TODO(v.get_pos(), "Convert asm! to HIR"); + ::std::vector< ::HIR::ExprNode_Asm::ValRef> outputs; + ::std::vector< ::HIR::ExprNode_Asm::ValRef> inputs; + for(auto& vr : v.m_output) + outputs.push_back( ::HIR::ExprNode_Asm::ValRef { vr.name, LowerHIR_ExprNode_Inner(*vr.value) } ); + for(auto& vr : v.m_input) + inputs.push_back( ::HIR::ExprNode_Asm::ValRef { vr.name, LowerHIR_ExprNode_Inner(*vr.value) } ); + + m_rv.reset( new ::HIR::ExprNode_Asm( v.span(), v.m_text, mv$(outputs), mv$(inputs), v.m_clobbers, v.m_flags ) ); } virtual void visit(::AST::ExprNode_Flow& v) override { switch( v.m_type ) |