diff options
author | John Hodge <tpg@mutabah.net> | 2016-10-25 16:13:50 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-10-25 16:13:50 +0800 |
commit | 5bb8ec98e80b6dedfb38b9c12e571fd4d81a7bb2 (patch) | |
tree | 3f58611bbfe356f8266262f7fe7e1be59c3d1453 /src/hir/from_ast.cpp | |
parent | aeae8a88897a81e3eb12786f6227a6e87a0cf172 (diff) | |
download | mrust-5bb8ec98e80b6dedfb38b9c12e571fd4d81a7bb2.tar.gz |
AST - Encode unit variants with a NULL value instead of an empty set
Diffstat (limited to 'src/hir/from_ast.cpp')
-rw-r--r-- | src/hir/from_ast.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index 1abd7771..b8445020 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -827,22 +827,24 @@ namespace { { TU_MATCH(::AST::EnumVariantData, (var.m_data), (e), (Value, - variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Value({ - LowerHIR_Expr(e.m_value), - ::HIR::Literal {} - }) ) ); - ), - (Tuple, - if( e.m_sub_types.size() == 0 ) { - variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Unit({})) ); + if( e.m_value.is_valid() ) + { + variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Value({ + LowerHIR_Expr(e.m_value), + ::HIR::Literal {} + }) ) ); } - else { - ::HIR::Enum::Variant::Data_Tuple types; - for(const auto& st : e.m_sub_types) - types.push_back( new_visent(true, LowerHIR_Type(st)) ); - variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Tuple(mv$(types))) ); + else + { + variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Unit({})) ); } ), + (Tuple, + ::HIR::Enum::Variant::Data_Tuple types; + for(const auto& st : e.m_sub_types) + types.push_back( new_visent(true, LowerHIR_Type(st)) ); + variants.push_back( ::std::make_pair(var.m_name, ::HIR::Enum::Variant::make_Tuple(mv$(types))) ); + ), (Struct, ::HIR::Enum::Variant::Data_Struct ents; for( const auto& ent : e.m_fields ) |