diff options
Diffstat (limited to 'src/js.rs')
-rw-r--r-- | src/js.rs | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -108,6 +108,14 @@ impl JsCompiler { self.bytecode.push(OpCode::SwapPop.into()); } + fn push_yield(&mut self) { + self.bytecode.push(OpCode::Yield.into()); + } + + fn push_return(&mut self) { + self.bytecode.push(OpCode::Return.into()); + } + fn push_push(&mut self, value: &IonValue) { self.bytecode.push(OpCode::TypePush.into()); self.bytecode.extend(value.bytes()); @@ -595,7 +603,13 @@ impl JsCompiler { boa_ast::Statement::Switch(_) => todo!(), boa_ast::Statement::Continue(_) => todo!(), boa_ast::Statement::Break(_) => todo!(), - boa_ast::Statement::Return(_) => todo!(), + boa_ast::Statement::Return(ret) => { + if let Some(expr) = ret.target() { + self.compile_expression(expr); + self.push_yield(); + } + self.push_return(); + }, boa_ast::Statement::Labelled(_) => todo!(), boa_ast::Statement::Throw(_) => todo!(), boa_ast::Statement::Try(_) => todo!(), |