From 76420739e01cb925eca57845bb4704e97d6c816a Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sun, 31 Dec 2023 19:34:40 -0800 Subject: Add InvokeGenerator impl --- src/runtime.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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()); -- cgit v1.2.3