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.cpp26
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;