Add conversion builtins to the compiler:
if (streq(name, "f64_from_i64")) {
// compile argument (i64 expression)
pos += 1; skip();
c_expression();
if (cur() == ')') { pos += 1; skip(); }
emit_op("f64.convert_i64_s");
c_expr_is_float = true;
return;
}
if (streq(name, "i64_from_f64")) {
pos += 1; skip();
const was: bool = c_expr_is_float;
c_expr_is_float = true;
c_expression();
if (cur() == ')') { pos += 1; skip(); }
emit_op("i64.trunc_f64_s");
c_expr_is_float = was;
return;
}
WAT instructions: f64.convert_i64_s converts a signed i64 to f64. i64.trunc_f64_s truncates an f64 to a signed i64.