diff options
Diffstat (limited to 'src/hir/from_ast_expr.cpp')
-rw-r--r-- | src/hir/from_ast_expr.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp index e90d0b99..9ad8f565 100644 --- a/src/hir/from_ast_expr.cpp +++ b/src/hir/from_ast_expr.cpp @@ -208,6 +208,11 @@ struct LowerHIR_ExprNode_Visitor: )); } virtual void visit(::AST::ExprNode_If& v) override { + m_rv.reset( new ::HIR::ExprNode_If( + LowerHIR_ExprNode_Inner(*v.m_cond), + LowerHIR_ExprNode_Inner(*v.m_true), + LowerHIR_ExprNode_Inner_Opt(&*v.m_false) + )); } virtual void visit(::AST::ExprNode_IfLet& v) override { } @@ -275,8 +280,27 @@ struct LowerHIR_ExprNode_Visitor: ) ); } virtual void visit(::AST::ExprNode_Array& v) override { + if( v.m_size ) + { + m_rv.reset( new ::HIR::ExprNode_ArraySized( + LowerHIR_ExprNode_Inner( *v.m_values.at(0) ), + // TODO: Should this size be a full expression on its own? + LowerHIR_ExprNode_Inner( *v.m_size ) + ) ); + } + else + { + ::std::vector< ::HIR::ExprNodeP> vals; + for(const auto& val : v.m_values) + vals.push_back( LowerHIR_ExprNode_Inner(*val) ); + m_rv.reset( new ::HIR::ExprNode_ArrayList( mv$(vals) ) ); + } } virtual void visit(::AST::ExprNode_Tuple& v) override { + ::std::vector< ::HIR::ExprNodeP> vals; + for(const auto& val : v.m_values) + vals.push_back( LowerHIR_ExprNode_Inner(*val ) ); + m_rv.reset( new ::HIR::ExprNode_Tuple( mv$(vals) ) ); } virtual void visit(::AST::ExprNode_NamedValue& v) override { TU_IFLET(::AST::Path::Class, v.m_path.m_class, Local, e, @@ -289,10 +313,21 @@ struct LowerHIR_ExprNode_Visitor: } virtual void visit(::AST::ExprNode_Field& v) override { + m_rv.reset( new ::HIR::ExprNode_Field( + LowerHIR_ExprNode_Inner(*v.m_obj), + v.m_name + )); } virtual void visit(::AST::ExprNode_Index& v) override { + m_rv.reset( new ::HIR::ExprNode_Index( + LowerHIR_ExprNode_Inner(*v.m_obj), + LowerHIR_ExprNode_Inner(*v.m_idx) + )); } virtual void visit(::AST::ExprNode_Deref& v) override { + m_rv.reset( new ::HIR::ExprNode_Deref( + LowerHIR_ExprNode_Inner(*v.m_value) + )); } }; |