diff options
-rw-r--r-- | src/hir/deserialise.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp index f68a44c1..58e23bfa 100644 --- a/src/hir/deserialise.cpp +++ b/src/hir/deserialise.cpp @@ -29,6 +29,10 @@ namespace { uint8_t read_u8() { uint8_t v; m_is.read(reinterpret_cast<char*>(&v), 1); + if( !m_is ) { + throw ""; + } + assert( m_is ); return v; } uint16_t read_u16() { @@ -124,7 +128,7 @@ namespace { len = (len & 0x7F) << 16; len |= read_u16(); } - ::std::string rv( '\0', len ); + ::std::string rv( ' ', len ); m_is.read(const_cast<char*>(rv.data()), len); return rv; } @@ -362,7 +366,6 @@ namespace { ::HIR::ExprPtr rv; if( read_bool() ) { - assert( !"TODO: "); rv.m_mir = deserialise_mir(); } return rv; @@ -978,8 +981,17 @@ namespace { ::std::ifstream in(filename); HirDeserialiser s { in }; - ::HIR::Crate rv = s.deserialise_crate(); - - return ::HIR::CratePtr( mv$(rv) ); + try + { + ::HIR::Crate rv = s.deserialise_crate(); + + return ::HIR::CratePtr( mv$(rv) ); + } + catch(const char*) + { + ::std::cerr << "Unable to load crate from " << filename << ": Deserialisation failure" << ::std::endl; + ::std::abort(); + //return ::HIR::CratePtr(); + } } |