summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-06-11 11:45:07 +0800
committerJohn Hodge <tpg@mutabah.net>2016-06-11 11:45:07 +0800
commit556cf732e28ae68185f778a4c5c63d0d2bec032a (patch)
tree2374dd3759eff5dfdc34961f7079752035776adc
parent5ff701687158949de63a493af110f47d9175b41a (diff)
downloadmrust-556cf732e28ae68185f778a4c5c63d0d2bec032a.tar.gz
HIR - (cleanup) Make method to handle creating new array types
-rw-r--r--src/hir/expr.hpp6
-rw-r--r--src/hir/type.hpp7
-rw-r--r--src/hir_typeck/expr.cpp2
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
{