diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-27 17:14:13 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-27 17:14:13 +0800 |
commit | 4e06fd9069caa3cc12a754df4bff82e9d4148d98 (patch) | |
tree | 5d93a8a985791dbbeb902b1ef4e8c99df4427884 | |
parent | 492b53d407735d89026070ad28eeddf66c994b3c (diff) | |
download | mrust-4e06fd9069caa3cc12a754df4bff82e9d4148d98.tar.gz |
HIR Deserialise - Fix quirk with std::string
-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(); + } } |