diff options
author | John Hodge <tpg@mutabah.net> | 2018-06-02 17:17:46 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2018-06-02 17:17:46 +0800 |
commit | 02683781cb8b815ce0240fd2afc333c57a0460ba (patch) | |
tree | 789887680a2823a1927eab3692128b8a6ff74e28 /src/hir/serialise.cpp | |
parent | 50ef0034194c2dc1d2fb5730231c8566f405f1f6 (diff) | |
download | mrust-02683781cb8b815ce0240fd2afc333c57a0460ba.tar.gz |
HIR Serialise - Explicitly serialise tokens (instead of using ancient code)
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) { |