summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/runtime.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/runtime.rs b/src/runtime.rs
index dbb6222..97de85a 100644
--- a/src/runtime.rs
+++ b/src/runtime.rs
@@ -414,7 +414,19 @@ async fn execute(frame: &mut StackFrame) -> ExecutionState {
}
},
0x06 => { // OpType::InvokeGenerator
-
+ let function_id = frame.next_varuint();
+ let function = frame.runtime.0.functions.get(&function_id)
+ .expect("Undefined function");
+ let mut args = Vec::with_capacity(function.arguments as usize);
+ for _ in 0..function.arguments {
+ args.push(frame.stack.pop_value());
+ }
+ let mut rx = frame.runtime.invoke(function_id, args);
+ let mut list = Vec::new();
+ while let Some(ret) = rx.recv().await {
+ list.push(ret);
+ }
+ frame.stack.push_value(&IonValue::from(list));
},
0x07 => { // OpType::Yield
return ExecutionState::Yield(frame.stack.pop_value());