diff options
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 ) |