diff options
Diffstat (limited to 'src/hir/serialise.cpp')
-rw-r--r-- | src/hir/serialise.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/hir/serialise.cpp b/src/hir/serialise.cpp index b244764b..00e7aa28 100644 --- a/src/hir/serialise.cpp +++ b/src/hir/serialise.cpp @@ -12,7 +12,7 @@ #include <mir/mir.hpp> #include "serialise_lowlevel.hpp" -namespace { +//namespace { class HirSerialiser { ::HIR::serialise::Writer& m_out; @@ -446,14 +446,31 @@ namespace { ) } void serialise(const ::Token& tok) { - // HACK: Hand off to old serialiser code - ::std::stringstream tmp; + m_out.write_tag(tok.m_type); + serialise(tok.m_data); + // TODO: Position information. + } + void serialise(const ::Token::Data& td) { + m_out.write_tag(td.tag()); + switch(td.tag()) { - Serialiser_TextTree ser(tmp); - tok.serialise( ser ); + case ::Token::Data::TAGDEAD: throw ""; + TU_ARM(td, None, _e) { + } break; + TU_ARM(td, String, e) { + m_out.write_string(e); + } break; + TU_ARM(td, Integer, e) { + m_out.write_tag(e.m_datatype); + m_out.write_u64c(e.m_intval); + } break; + TU_ARM(td, Float, e) { + m_out.write_tag(e.m_datatype); + m_out.write_double(e.m_floatval); + } break; + TU_ARM(td, Fragment, e) + assert(!"Serialising interpolated macro fragment"); } - - m_out.write_string(tmp.str()); } void serialise(const ::HIR::Literal& lit) @@ -1011,7 +1028,7 @@ namespace { serialise_type(at.m_default); } }; -} +//} void HIR_Serialise(const ::std::string& filename, const ::HIR::Crate& crate) { |