diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-01 17:19:37 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-01 17:19:37 +0800 |
commit | c58fb6e0eb1b389faad2d706478ec15d77bfd868 (patch) | |
tree | a6e57bb49beb78b02c8dc2ce3f3b9dbcf046d313 /src/hir | |
parent | f964995d23374ea110cf84145839bde77b824afe (diff) | |
download | mrust-c58fb6e0eb1b389faad2d706478ec15d77bfd868.tar.gz |
HIR - Support getting tuple struct constructors as function pointers
Diffstat (limited to 'src/hir')
-rw-r--r-- | src/hir/expr.hpp | 1 | ||||
-rw-r--r-- | src/hir/from_ast_expr.cpp | 11 | ||||
-rw-r--r-- | src/hir/type.hpp | 4 |
3 files changed, 13 insertions, 3 deletions
diff --git a/src/hir/expr.hpp b/src/hir/expr.hpp index 300414b4..90ad27a7 100644 --- a/src/hir/expr.hpp +++ b/src/hir/expr.hpp @@ -548,6 +548,7 @@ struct ExprNode_PathValue: enum Target { UNKNOWN, FUNCTION, + STRUCT_CONSTR, STATIC, CONSTANT, }; diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp index a25fe7ae..d1f7e16e 100644 --- a/src/hir/from_ast_expr.cpp +++ b/src/hir/from_ast_expr.cpp @@ -555,7 +555,16 @@ struct LowerHIR_ExprNode_Visitor: m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path), ::HIR::ExprNode_PathValue::UNKNOWN ) ); ), (Struct, - m_rv.reset( new ::HIR::ExprNode_UnitVariant( v.span(), LowerHIR_GenericPath(Span(v.get_pos()), v.m_path), true ) ); + // TODO: Check the form and emit a PathValue if not a unit + if( e.struct_->m_data.is_Struct() ) { + // ERROR. + } + else if( e.struct_->m_data.as_Tuple().ents.size() > 0 ) { + m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path), ::HIR::ExprNode_PathValue::STRUCT_CONSTR ) ); + } + else { + m_rv.reset( new ::HIR::ExprNode_UnitVariant( v.span(), LowerHIR_GenericPath(Span(v.get_pos()), v.m_path), true ) ); + } ), (EnumVar, m_rv.reset( new ::HIR::ExprNode_UnitVariant( v.span(), LowerHIR_GenericPath(Span(v.get_pos()), v.m_path), false ) ); diff --git a/src/hir/type.hpp b/src/hir/type.hpp index 4f495fcd..549bf837 100644 --- a/src/hir/type.hpp +++ b/src/hir/type.hpp @@ -181,8 +181,8 @@ public: TypeRef(::HIR::CoreType ct): m_data( Data::make_Primitive(mv$(ct)) ) {} - TypeRef(::HIR::Path p): - m_data( Data::make_Path( {mv$(p), TypePathBinding()} ) ) + TypeRef(::HIR::Path p, TypePathBinding pb=TypePathBinding()): + m_data( Data::make_Path( {mv$(p), mv$(pb)} ) ) {} static TypeRef new_unit() { |