| //! Verify that mutually recursive functions use CPS to avoid overflowing the stack. |
| |
| //@ run-pass |
| |
| fn checktrue(rs: bool) -> bool { |
| assert!(rs); |
| return true; |
| } |
| |
| pub fn main() { |
| let k = checktrue; |
| evenk(42, k); |
| oddk(45, k); |
| } |
| |
| fn evenk(n: isize, k: fn(bool) -> bool) -> bool { |
| println!("evenk"); |
| println!("{}", n); |
| if n == 0 { |
| return k(true); |
| } else { |
| return oddk(n - 1, k); |
| } |
| } |
| |
| fn oddk(n: isize, k: fn(bool) -> bool) -> bool { |
| println!("oddk"); |
| println!("{}", n); |
| if n == 0 { |
| return k(false); |
| } else { |
| return evenk(n - 1, k); |
| } |
| } |