diff options
Diffstat (limited to 'src/hir/deserialise.cpp')
-rw-r--r-- | src/hir/deserialise.cpp | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp index 4d47016f..2b9b3512 100644 --- a/src/hir/deserialise.cpp +++ b/src/hir/deserialise.cpp @@ -14,7 +14,7 @@ #include "serialise_lowlevel.hpp" #include <typeinfo> -namespace { +//namespace { template<typename T> struct D @@ -311,15 +311,29 @@ namespace { } ::Token deserialise_token() { - ::Token tok; - // HACK: Hand off to old serialiser code - auto s = m_in.read_string(); - ::std::stringstream tmp(s); + auto ty = static_cast<enum eTokenType>( m_in.read_tag() ); + auto d = deserialise_tokendata(); + return ::Token(ty, ::std::move(d), {}); + } + ::Token::Data deserialise_tokendata() { + auto tag = static_cast< ::Token::Data::Tag>( m_in.read_tag() ); + switch(tag) { - Deserialiser_TextTree ser(tmp); - tok.deserialise( ser ); + case ::Token::Data::TAG_None: + return ::Token::Data::make_None({}); + case ::Token::Data::TAG_String: + return ::Token::Data::make_String( m_in.read_string() ); + case ::Token::Data::TAG_Integer: { + auto dty = static_cast<eCoreType>(m_in.read_tag()); + return ::Token::Data::make_Integer({ dty, m_in.read_u64c() }); + } + case ::Token::Data::TAG_Float: { + auto dty = static_cast<eCoreType>(m_in.read_tag()); + return ::Token::Data::make_Float({ dty, m_in.read_double() }); + } + default: + throw ::std::runtime_error(FMT("Invalid Token data tag - " << tag)); } - return tok; } ::HIR::Literal deserialise_literal(); @@ -1234,7 +1248,7 @@ namespace { return rv; } -} +//} ::HIR::CratePtr HIR_Deserialise(const ::std::string& filename, const ::std::string& loaded_name) { |