diff options
-rw-r--r-- | src/hir/expr.hpp | 6 | ||||
-rw-r--r-- | src/hir/type.hpp | 7 | ||||
-rw-r--r-- | src/hir_typeck/expr.cpp | 2 |
3 files changed, 9 insertions, 6 deletions
diff --git a/src/hir/expr.hpp b/src/hir/expr.hpp index 8c9d89c2..761c0ce4 100644 --- a/src/hir/expr.hpp +++ b/src/hir/expr.hpp @@ -556,11 +556,7 @@ struct ExprNode_ArrayList: ::std::vector< ::HIR::ExprNodeP> m_vals; ExprNode_ArrayList(Span sp, ::std::vector< ::HIR::ExprNodeP> vals): - ExprNode( mv$(sp), ::HIR::TypeRef::Data::make_Array({ - box$( ::HIR::TypeRef() ), - ::HIR::ExprPtr(), - vals.size() - }) ), + ExprNode( mv$(sp), ::HIR::TypeRef::new_array( ::HIR::TypeRef(), vals.size() ) ), m_vals( mv$(vals) ) {} diff --git a/src/hir/type.hpp b/src/hir/type.hpp index 4f7e97a5..6dd02804 100644 --- a/src/hir/type.hpp +++ b/src/hir/type.hpp @@ -170,6 +170,13 @@ public: static TypeRef new_pointer(BorrowType bt, TypeRef inner) { return TypeRef(Data::make_Pointer({bt, box$(mv$(inner))})); } + static TypeRef new_array(TypeRef inner, unsigned int size) { + assert(size != ~0u); + return TypeRef(Data::make_Array({box$(mv$(inner)), ::HIR::ExprPtr(), size})); + } + static TypeRef new_array(TypeRef inner, ::HIR::ExprPtr size_expr) { + return TypeRef(Data::make_Array({box$(mv$(inner)), mv$(size_expr), ~0u})); + } TypeRef clone() const; diff --git a/src/hir_typeck/expr.cpp b/src/hir_typeck/expr.cpp index 2cc11bad..4251f0d4 100644 --- a/src/hir_typeck/expr.cpp +++ b/src/hir_typeck/expr.cpp @@ -352,7 +352,7 @@ namespace typeck { ::HIR::ExprVisitorDef::visit(node); - this->context.apply_equality( node.span(), node.m_res_type, ::HIR::TypeRef(::HIR::TypeRef::Data::make_Array({ box$(node.m_val->m_res_type.clone()), ::HIR::ExprPtr(), node.m_size_val })) ); + this->context.apply_equality( node.span(), node.m_res_type, ::HIR::TypeRef::new_array(node.m_val->m_res_type.clone(), node.m_size_val) ); } void visit(::HIR::ExprNode_Tuple& node) override { |