summaryrefslogtreecommitdiff
path: root/src/js.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/js.rs')
-rw-r--r--src/js.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/js.rs b/src/js.rs
index 8de188b..9249d30 100644
--- a/src/js.rs
+++ b/src/js.rs
@@ -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!(),