diff options
Diffstat (limited to 'src/hir/deserialise.cpp')
-rw-r--r-- | src/hir/deserialise.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp index 348b016c..b7fa0a67 100644 --- a/src/hir/deserialise.cpp +++ b/src/hir/deserialise.cpp @@ -313,6 +313,7 @@ namespace { ::MIR::BasicBlock deserialise_mir_basicblock(); ::MIR::Statement deserialise_mir_statement(); ::MIR::Terminator deserialise_mir_terminator(); + ::MIR::CallTarget deserialise_mir_calltarget(); ::MIR::LValue deserialise_mir_lvalue() { ::MIR::LValue rv; @@ -976,18 +977,11 @@ namespace { deserialise_mir_lvalue(), deserialise_vec_c<unsigned int>([&](){ return m_in.read_count(); }) }) - _(CallValue, { + _(Call, { static_cast<unsigned int>(m_in.read_count()), static_cast<unsigned int>(m_in.read_count()), deserialise_mir_lvalue(), - deserialise_mir_lvalue(), - deserialise_vec< ::MIR::LValue>() - }) - _(CallPath, { - static_cast<unsigned int>(m_in.read_count()), - static_cast<unsigned int>(m_in.read_count()), - deserialise_mir_lvalue(), - deserialise_path(), + deserialise_mir_calltarget(), deserialise_vec< ::MIR::LValue>() }) #undef _ @@ -996,6 +990,20 @@ namespace { } } + ::MIR::CallTarget HirDeserialiser::deserialise_mir_calltarget() + { + switch( m_in.read_tag() ) + { + #define _(x, ...) case ::MIR::CallTarget::TAG_##x: return ::MIR::CallTarget::make_##x( __VA_ARGS__ ); + _(Value, deserialise_mir_lvalue() ) + _(Path, deserialise_path() ) + _(Intrinsic, m_in.read_string() ) + #undef _ + default: + throw ""; + } + } + ::HIR::Module HirDeserialiser::deserialise_module() { TRACE_FUNCTION; |