From 33a7a9c9ff7b6d56a59f56f4111a428dedff4518 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 10 Jul 2020 10:48:34 +0100 Subject: [PATCH] Use new execution_status --- lib/fizzy/execute.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/fizzy/execute.cpp b/lib/fizzy/execute.cpp index 533db55f1..a3c7c97bc 100644 --- a/lib/fizzy/execute.cpp +++ b/lib/fizzy/execute.cpp @@ -276,16 +276,16 @@ bool invoke_function( const auto ret = func(instance, std::move(call_args), depth + 1); // Bubble up traps - if (ret.trapped) + if (ret.trapped()) return false; const auto num_outputs = func_type.outputs.size(); // NOTE: we can assume these two from validation assert(num_outputs <= 1); - assert(ret.result.has_value() == (num_outputs == 1)); + assert(ret.has_value() == (num_outputs == 1)); // Push back the result if (num_outputs != 0) - stack.push(*ret.result); + stack.push(ret.value()); return true; } @@ -564,7 +564,7 @@ std::unique_ptr instantiate(Module module, { const auto funcidx = *instance->module.startfunc; assert(funcidx < instance->imported_functions.size() + instance->module.funcsec.size()); - if (execute(*instance, funcidx, {}).trapped) + if (execute(*instance, funcidx, {}).trapped()) { // When element section modified imported table, and then start function trapped, // modifications to the table are not rolled back. @@ -604,7 +604,7 @@ execution_result execute( { assert(depth >= 0); if (depth > CallStackLimit) - return {true, {}}; + return {execution_result::status::Trapped, 0}; if (func_idx < instance.imported_functions.size()) return instance.imported_functions[func_idx].function(instance, std::move(args), depth); @@ -1462,10 +1462,11 @@ execution_result execute( end: assert(pc == &code.instructions[code.instructions.size()] || trap); if (trap) + return {execution_result::status::Trapped, 0}; if (stack.size() == 0) - return {execution, std::nullopt}; + return {execution_result::status::WithoutResult, 0}; else - return {trap, stack.pop()}; + return {execution_result::status::WithResult, stack.pop()}; } std::vector resolve_imported_functions(