remove bitcast in Str.fromFloat

This commit is contained in:
Folkert 2021-02-16 00:56:44 +01:00
parent 49ca8f3e86
commit 411a265024
2 changed files with 4 additions and 9 deletions

View file

@ -310,11 +310,9 @@ const c = @cImport({
// Str.fromFloat // Str.fromFloat
// When we actually use this in Roc, libc will be linked so we have access to std.heap.c_allocator // When we actually use this in Roc, libc will be linked so we have access to std.heap.c_allocator
pub fn strFromFloatC(int: i64) callconv(.C) RocStr { pub fn strFromFloatC(float: f64) callconv(.C) RocStr {
// const foobar = @bitCast(f32, @intCast(i32, float)); // NOTE the compiled zig for float formatting seems to use LLVM11-specific features
// const result = std.fmt.allocPrint(std.heap.c_allocator, "{}", .{@as(f32, foobar)}) catch unreachable; // hopefully we can use zig instead of snprintf in the future when we upgrade
const float = @bitCast(f64, int);
var buf: [100]u8 = undefined; var buf: [100]u8 = undefined;
const result = c.snprintf(&buf, 100, "%f", float); const result = c.snprintf(&buf, 100, "%f", float);

View file

@ -281,11 +281,8 @@ pub fn str_from_float<'a, 'ctx, 'env>(
int_symbol: Symbol, int_symbol: Symbol,
) -> BasicValueEnum<'ctx> { ) -> BasicValueEnum<'ctx> {
let float = load_symbol(scope, &int_symbol); let float = load_symbol(scope, &int_symbol);
let int = env
.builder
.build_bitcast(float, env.context.i64_type(), "to_bits");
let zig_result = call_bitcode_fn(env, &[int], &bitcode::STR_FROM_FLOAT).into_struct_value(); let zig_result = call_bitcode_fn(env, &[float], &bitcode::STR_FROM_FLOAT).into_struct_value();
zig_str_to_struct(env, zig_result).into() zig_str_to_struct(env, zig_result).into()
} }