diff --git a/dora-frontend/src/generator.rs b/dora-frontend/src/generator.rs index 6e9ac0427..616cfe7d7 100644 --- a/dora-frontend/src/generator.rs +++ b/dora-frontend/src/generator.rs @@ -1243,6 +1243,8 @@ impl<'a> AstBytecodeGen<'a> { self.builder.bind_label(merge_lbl); self.pop_scope(); + self.free_if_temp(value_reg); + dest } diff --git a/tests/trait/trait-object3.dora b/tests/trait/trait-object3.dora new file mode 100644 index 000000000..941757d47 --- /dev/null +++ b/tests/trait/trait-object3.dora @@ -0,0 +1,26 @@ +use std::traits::Iterator; + +class Range { + value: Int +} + +impl Iterator for Range { + type Item = Int; + + fn next(): Option[Int] { + if self.value <= 0 { + None[Int] + } else { + let result = self.value; + self.value -= 1; + Some[Int](result) + } + } +} + +fn main() { + let r = Range(2); + assert(r.next() is Some(x) && x == 2); + assert(r.next() is Some(x) && x == 1); + assert(r.next() is None); +}