diff options
author | John Hodge <tpg@mutabah.net> | 2016-06-11 00:06:50 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-06-11 00:06:50 +0800 |
commit | 436dad1104d40270d6b6a805b412d4603f27249c (patch) | |
tree | c77dc5dd11ca268e933945c8685030e110e43fa9 /src/hir/from_ast_expr.cpp | |
parent | 44e187830d542acaf280f5139c8dc25e3c9fb72c (diff) | |
download | mrust-436dad1104d40270d6b6a805b412d4603f27249c.tar.gz |
HIR Typecheck - Constants
Diffstat (limited to 'src/hir/from_ast_expr.cpp')
-rw-r--r-- | src/hir/from_ast_expr.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/hir/from_ast_expr.cpp b/src/hir/from_ast_expr.cpp index 742a4fed..1dcbf261 100644 --- a/src/hir/from_ast_expr.cpp +++ b/src/hir/from_ast_expr.cpp @@ -126,7 +126,7 @@ struct LowerHIR_ExprNode_Visitor: m_rv.reset( new ::HIR::ExprNode_StructLiteral(v.span(), mv$(path_RangeTo), nullptr, mv$(values)) ); } else { - m_rv.reset( new ::HIR::ExprNode_PathValue(v.span(), mv$(path_RangeFull)) ); + m_rv.reset( new ::HIR::ExprNode_UnitVariant(v.span(), mv$(path_RangeFull), true) ); } } break; } @@ -547,7 +547,28 @@ struct LowerHIR_ExprNode_Visitor: m_rv.reset( new ::HIR::ExprNode_Variable( v.span(), e.name, slot ) ); ) else { - m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path) ) ); + TU_MATCH_DEF(::AST::PathBinding, (v.m_path.binding()), (e), + ( + 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 ) ); + ), + (EnumVar, + m_rv.reset( new ::HIR::ExprNode_UnitVariant( v.span(), LowerHIR_GenericPath(Span(v.get_pos()), v.m_path), false ) ); + ), + (Function, + m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path), ::HIR::ExprNode_PathValue::FUNCTION ) ); + ), + (Static, + if( e.static_->s_class() != ::AST::Static::CONST ) { + m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path), ::HIR::ExprNode_PathValue::STATIC ) ); + } + else { + m_rv.reset( new ::HIR::ExprNode_PathValue( v.span(), LowerHIR_Path(Span(v.get_pos()), v.m_path), ::HIR::ExprNode_PathValue::CONSTANT ) ); + } + ) + ) } } |