From e94e30eafc735a36c1fddeee4f8422a132eecd33 Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Wed, 11 May 2022 09:25:29 +1000 Subject: [PATCH] Compile this expressions --- src/vstc/compile.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/vstc/compile.rs b/src/vstc/compile.rs index 14ba807..ba79bdf 100644 --- a/src/vstc/compile.rs +++ b/src/vstc/compile.rs @@ -273,7 +273,9 @@ impl<'a> ExpressionCompiler<'a> { use swc_ecma_ast::Expr::*; match expr { - This(_) => std::panic!("Not implemented: This expression"), + This(_) => { + return self.inline("%this".to_string(), target_register); + }, Array(_) => std::panic!("Not implemented: Array expression"), Object(_) => std::panic!("Not implemented: Object expression"), Fn(_) => std::panic!("Not implemented: Fn expression"), @@ -460,16 +462,24 @@ impl<'a> ExpressionCompiler<'a> { &mut self, lit: &swc_ecma_ast::Lit, target_register: Option, + ) -> CompiledExpression { + return self.inline(compile_literal(lit), target_register); + } + + fn inline( + &mut self, + value_assembly: String, + target_register: Option, ) -> CompiledExpression { return match target_register { None => CompiledExpression { - value_assembly: compile_literal(lit), + value_assembly: value_assembly, used_available_register: false, nested_registers: Vec::new(), }, Some(t) => { let mut instr = " mov ".to_string(); - instr += &compile_literal(lit); + instr += &value_assembly; instr += " %"; instr += &t; self.definition.push(instr);