$ cat regress/noinc/loop_for/main.c
int sum(int n) {
int i, sum = 0;
for (i = 1; i <= n; i++) {
sum = sum + i;
}
return sum;
}
int main() {
return sum(5) - 15;
}
should be translated into following:
$ cat main.dats
#include "share/atspre_staload.hats"
fun sum (n: int): int =
let
var n: int = n
var i: int
var sum: int = 0
fun sum_loop (n: int, i: int, sum: int): (int, int, int) =
let
var n: int = n
var i: int = i
var sum: int = sum
in
if i <= n then let
val () = sum := sum + i
val () = i := i + 1
in
sum_loop(n, i, sum)
end
else
(n, i, sum)
end
val () = i := 1
val (n', i', sum') = sum_loop(n, i, sum)
val () = n := n'
val () = i := i'
val () = sum := sum'
in
sum
end
implement main () =
let
in
sum(5) - 15
end
should be translated into following: