program main
  fn count_to(limit: i32) -> i32
    local var i : unit
      int 0 : i32
    while : unit
      binary < : bool
        var i : i32
        var limit : i32
      set i : unit
        binary + : i32
          var i : i32
          int 1 : i32
    var i : i32
  fn main() -> i32
    call count_to : i32
      int 4 : i32
  test "while counts"
    local var i : unit
      int 0 : i32
    while : unit
      binary < : bool
        var i : i32
        int 3 : i32
      set i : unit
        binary + : i32
          var i : i32
          int 1 : i32
    binary = : bool
      var i : i32
      int 3 : i32
  test "while false skips"
    local var i : unit
      int 0 : i32
    while : unit
      bool false : bool
      set i : unit
        binary + : i32
          var i : i32
          int 1 : i32
    binary = : bool
      var i : i32
      int 0 : i32
