update repeat

This commit is contained in:
Scott Richmond 2025-05-26 08:32:33 -04:00
parent 04c96c9edb
commit 1e1593298d
2 changed files with 6 additions and 5 deletions

View File

@ -794,7 +794,7 @@ impl Compiler {
self.emit_op(Op::ResetMatch);
todo!();
}
// TODO: add stack-tracking to this
// TODO: add a check to make sure times >= 0
Repeat(times, body) => {
self.visit(times);
self.emit_op(Op::Truncate);
@ -805,7 +805,7 @@ impl Compiler {
self.emit_op(Op::Decrement);
let repeat_begin = self.len();
self.emit_op(Op::Duplicate);
self.stack_depth += 1;
// self.stack_depth += 1;
self.emit_op(Op::JumpIfZero);
self.emit_byte(0xff);
// compile the body
@ -819,7 +819,7 @@ impl Compiler {
self.emit_byte(repeat_end - repeat_begin);
self.chunk.bytecode[repeat_begin + 2] = (repeat_end - repeat_begin - 2) as u8;
// pop the counter
self.pop();
// self.pop();
// self.emit_op(Op::Pop);
// and emit nil
self.emit_constant(Value::Nil);

View File

@ -74,8 +74,9 @@ pub fn run(src: &'static str) {
pub fn main() {
env::set_var("RUST_BACKTRACE", "1");
let src = "
let #{a, :b #{c}} = #{:a 1, :b #{:c 3}}
[a, c]
repeat 4.8 {
true
}
";
run(src);
}