summaryrefslogtreecommitdiff
path: root/src/hir/deserialise.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/deserialise.cpp')
-rw-r--r--src/hir/deserialise.cpp32
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)
{