From 03495937fa63f184b4bbdfedfdc1804115244626 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Fri, 16 Aug 2024 17:13:38 -0500 Subject: [PATCH] fizzbuzz works due to fixed bug with else if --- kabel/src/codegen.rs | 7 +- kabel/src/main.rs | 1 - kabel/src/vm.rs | 1 - kabel/test/runtime/fizzbuzz.kab | 6 ++ kabel/test/runtime/fizzbuzz.out | 100 +++++++++++++++++++++++++++++ kabel/test/syntax/no_semicolon.out | 2 +- kabel/tmp.kab | 7 +- 7 files changed, 115 insertions(+), 9 deletions(-) create mode 100644 kabel/test/runtime/fizzbuzz.kab create mode 100644 kabel/test/runtime/fizzbuzz.out diff --git a/kabel/src/codegen.rs b/kabel/src/codegen.rs index 2ba82cac526fa9208cf27f1fbfdb92a4f99bd70e..92c526b32588cc2c4d6ca958784be3ac0103fcfb 100644 --- a/kabel/src/codegen.rs +++ b/kabel/src/codegen.rs @@ -97,12 +97,10 @@ impl Codegen { let breaks = self.break_stack.pop().expect("break stack empty on pop"); for loc in breaks { - println!("{:?}", self.scopes); self.patch_jump(loc, 0); } let continues = self.continue_stack.pop().expect("continue stack empty on pop"); for loc in continues { - println!("{:?}", self.scopes); let jump = loc - end_jmp + 2; self.vm.chunk[loc] = ((jump >> 8) & 0xFF) as u8; self.vm.chunk[loc + 1] = (jump & 0xFF) as u8; @@ -184,10 +182,9 @@ impl Codegen { self.vm.lines.last_mut().unwrap().1 += 3; } + println!("jmp: {}", self.vm.chunk.len()); self.patch_jump(start_jmp_loc, 0); - if let ASTType::Block(ref stmts) = ast.ast_type { - self.visit_block(&ast, stmts.clone(), ScopeType::If); - } + self.visit(ast); self.patch_jump(end_jmp_loc, 0); } ASTType::Block(_) => { diff --git a/kabel/src/main.rs b/kabel/src/main.rs index c0d44a5bc9f2a2d4580c0375d4d612e02e49757d..a5c6d11ba4b10df61be4dd0dc62a1dc92a984740 100644 --- a/kabel/src/main.rs +++ b/kabel/src/main.rs @@ -54,7 +54,6 @@ fn main() { let mut vm = codegen.vm; output += &debug_bytecode(&vm); output += "\n"; - println!("{}", output); output += "\n"; match vm.run(&mut output) { diff --git a/kabel/src/vm.rs b/kabel/src/vm.rs index 5c4a03473cb295fac085beebb80c81d680589b1d..67046585b2ebd99266efbe59373c02b9a369fb38 100644 --- a/kabel/src/vm.rs +++ b/kabel/src/vm.rs @@ -272,7 +272,6 @@ impl VM { 0xFD => { // POP let times = self.read(); for _ in 0..times { - println!("{:?}", self.stack); self.stack.pop().expect(&format!("{}: Unable to pop stack", self.ip)); } } diff --git a/kabel/test/runtime/fizzbuzz.kab b/kabel/test/runtime/fizzbuzz.kab new file mode 100644 index 0000000000000000000000000000000000000000..9e4efe2dff62cfab7baa95cd3367438eceeca59a --- /dev/null +++ b/kabel/test/runtime/fizzbuzz.kab @@ -0,0 +1,6 @@ +for (var i = 1; i < 101; i++) { + if (i % 3 != 0 && i % 5 != 0) { print i; } + else if (i % 3 == 0 && i % 5 != 0) { print "Fizz"; } + else if (i % 3 != 0 && i % 5 == 0) { print "Buzz"; } + else if (i % 3 == 0 && i % 5 == 0) { print "FizzBuzz"; } +} diff --git a/kabel/test/runtime/fizzbuzz.out b/kabel/test/runtime/fizzbuzz.out new file mode 100644 index 0000000000000000000000000000000000000000..dd9648814e5476cb359aeb47960100b2152be778 --- /dev/null +++ b/kabel/test/runtime/fizzbuzz.out @@ -0,0 +1,100 @@ +1 +2 +Fizz +4 +Buzz +Fizz +7 +8 +Fizz +Buzz +11 +Fizz +13 +14 +FizzBuzz +16 +17 +Fizz +19 +Buzz +Fizz +22 +23 +Fizz +Buzz +26 +Fizz +28 +29 +FizzBuzz +31 +32 +Fizz +34 +Buzz +Fizz +37 +38 +Fizz +Buzz +41 +Fizz +43 +44 +FizzBuzz +46 +47 +Fizz +49 +Buzz +Fizz +52 +53 +Fizz +Buzz +56 +Fizz +58 +59 +FizzBuzz +61 +62 +Fizz +64 +Buzz +Fizz +67 +68 +Fizz +Buzz +71 +Fizz +73 +74 +FizzBuzz +76 +77 +Fizz +79 +Buzz +Fizz +82 +83 +Fizz +Buzz +86 +Fizz +88 +89 +FizzBuzz +91 +92 +Fizz +94 +Buzz +Fizz +97 +98 +Fizz +Buzz diff --git a/kabel/test/syntax/no_semicolon.out b/kabel/test/syntax/no_semicolon.out index 548c95e24dda1f1e1352fa2159b99872e3350468..fd8f8d71dbca2f42aaa551fd2e1e97d0c1eb85ed 100644 --- a/kabel/test/syntax/no_semicolon.out +++ b/kabel/test/syntax/no_semicolon.out @@ -1,3 +1,3 @@ -Error 0002: Expected ; found print at line 3, column 1 +Error 0002: Expected ; but found print at line 3, column 1 print("call"); ^ diff --git a/kabel/tmp.kab b/kabel/tmp.kab index 5163081da150e80c7afa70f5a28b8249b58e831d..9e4efe2dff62cfab7baa95cd3367438eceeca59a 100644 --- a/kabel/tmp.kab +++ b/kabel/tmp.kab @@ -1 +1,6 @@ -print f"kabel is not py"; +for (var i = 1; i < 101; i++) { + if (i % 3 != 0 && i % 5 != 0) { print i; } + else if (i % 3 == 0 && i % 5 != 0) { print "Fizz"; } + else if (i % 3 != 0 && i % 5 == 0) { print "Buzz"; } + else if (i % 3 == 0 && i % 5 == 0) { print "FizzBuzz"; } +}