puti ::= fn(x: int) { #C("printf(\"%ld\\n\", (long)x); "); }; putf ::= fn(x: float) { #C("printf(\"%f\\n\", (double)x); "); }; main ::= fn() { puti(f(3)); puti(f(7)); puti(f(3,4)); // TODO: semiconst breaks this for some reason f ::= fn(x :: int, y := x) int { y }; r ::= f(3); puti(r); s ::= f(7); puti(s); t ::= f(3,4); puti(t); };