summaryrefslogtreecommitdiff
path: root/src/hir/from_ast.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-10-25 16:13:50 +0800
committerJohn Hodge <tpg@mutabah.net>2016-10-25 16:13:50 +0800
commit5bb8ec98e80b6dedfb38b9c12e571fd4d81a7bb2 (patch)
tree3f58611bbfe356f8266262f7fe7e1be59c3d1453 /src/hir/from_ast.cpp
parentaeae8a88897a81e3eb12786f6227a6e87a0cf172 (diff)
downloadmrust-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.cpp28
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 )