| //! 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); | |
| } | |
| } |