summaryrefslogtreecommitdiff
path: root/src/hir/serialise.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/serialise.cpp')
-rw-r--r--src/hir/serialise.cpp32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/hir/serialise.cpp b/src/hir/serialise.cpp
index cac6b3c9..e200a39e 100644
--- a/src/hir/serialise.cpp
+++ b/src/hir/serialise.cpp
@@ -436,7 +436,7 @@ namespace {
),
(Variant,
m_out.write_count(e.idx);
- serialise_vec(e.vals);
+ serialise(*e.val);
),
(Integer,
m_out.write_u64(e);
@@ -685,7 +685,6 @@ namespace {
),
(Struct,
serialise_genericpath(e.path);
- m_out.write_count(e.variant_idx);
serialise_vec(e.vals);
)
)
@@ -852,30 +851,35 @@ namespace {
void serialise(const ::HIR::Enum& item)
{
serialise_generics(item.m_params);
- m_out.write_tag( static_cast<int>(item.m_repr) );
-
- serialise_vec( item.m_variants );
+ serialise( item.m_data );
serialise(item.m_markings);
}
- void serialise(const ::HIR::Enum::Variant& v)
+ void serialise(const ::HIR::Enum::Class& v)
{
m_out.write_tag( v.tag() );
TU_MATCHA( (v), (e),
- (Unit,
- ),
(Value,
- // NOTE: e.expr skipped as it's not needed anymore
- serialise(e.val);
- ),
- (Tuple,
- serialise_vec(e);
+ m_out.write_tag( static_cast<int>(e.repr) );
+ serialise_vec(e.variants);
),
- (Struct,
+ (Data,
serialise_vec(e);
)
)
}
+ void serialise(const ::HIR::Enum::ValueVariant& v)
+ {
+ m_out.write_string(v.name);
+ // NOTE: No expr, no longer needed
+ m_out.write_u64(v.val);
+ }
+ void serialise(const ::HIR::Enum::DataVariant& v)
+ {
+ m_out.write_string(v.name);
+ m_out.write_bool(v.is_struct);
+ serialise(v.type);
+ }
void serialise(const ::HIR::TraitMarkings& m)
{