diff --git a/cl/_testrt/builtin/in.go b/cl/_testrt/builtin/in.go index b06eec85..e16f2465 100644 --- a/cl/_testrt/builtin/in.go +++ b/cl/_testrt/builtin/in.go @@ -25,7 +25,7 @@ func main() { data = append(data, "def"...) println(data) var i any = 100 - println(true, 100, -100, uint(255), int32(-100), 100.5, i, &i, uintptr(unsafe.Pointer(&i))) + println(true, 0, 100, -100, uint(255), int32(-100), 0.0, 100.5, i, &i, uintptr(unsafe.Pointer(&i))) var dst [3]byte n := copy(dst[:], data) println(n, dst[0], dst[1], dst[2]) diff --git a/cl/_testrt/builtin/out.ll b/cl/_testrt/builtin/out.ll index 1f205311..50204197 100644 --- a/cl/_testrt/builtin/out.ll +++ b/cl/_testrt/builtin/out.ll @@ -223,6 +223,8 @@ _llgo_0: %96 = ptrtoint ptr %92 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 true) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 0) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 100) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 -100) @@ -231,6 +233,8 @@ _llgo_0: call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 -100) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintFloat"(double 0.000000e+00) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintFloat"(double 1.005000e+02) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface" %95) diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 61566d86..9dba2f3a 100644 Binary files a/internal/runtime/llgo_autogen.lla and b/internal/runtime/llgo_autogen.lla differ diff --git a/internal/runtime/z_print.go b/internal/runtime/z_print.go index 2bb01541..4d4ea802 100644 --- a/internal/runtime/z_print.go +++ b/internal/runtime/z_print.go @@ -23,19 +23,19 @@ func PrintBool(v bool) { } func PrintFloat(v float64) { - switch { // TODO(xsw): does c.Fprintf support these special cases? + switch { case v != v: c.Fprintf(c.Stderr, c.Str("NaN")) return - case v+v == v: + case v+v == v && v != 0: if v > 0 { c.Fprintf(c.Stderr, c.Str("+Inf")) - } else if v < 0 { + } else { c.Fprintf(c.Stderr, c.Str("-Inf")) } return } - c.Fprintf(c.Stderr, c.Str("%g"), v) + c.Fprintf(c.Stderr, c.Str("%e"), v) } // func PrintComplex(c complex128) {