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.cpp33
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)
{