diff --git a/misc/wasm/wasm_exec.js b/misc/wasm/wasm_exec.js index f616b5a1a6faa47a98fa39a854ae7fbd70c9c6ba..d61bbcc95a45adb61f04a4f1566009f4f9b0f499 100755 --- a/misc/wasm/wasm_exec.js +++ b/misc/wasm/wasm_exec.js @@ -77,11 +77,7 @@ const setInt64 = (addr, v) => { mem().setUint32(addr + 0, v, true); - if (v >= 0) { - mem().setUint32(addr + 4, v / 4294967296, true); - } else { - mem().setUint32(addr + 4, -1, true); // FIXME - } + mem().setUint32(addr + 4, Math.floor(v / 4294967296), true); } const getInt64 = (addr) => { diff --git a/src/syscall/js/js_test.go b/src/syscall/js/js_test.go index 39e3744a995ae03a4e1f714dc85b0ffa956f1b11..ca065e321d33c2d6ef0f9a681c373fdc4660b3b3 100644 --- a/src/syscall/js/js_test.go +++ b/src/syscall/js/js_test.go @@ -58,6 +58,24 @@ func TestInt(t *testing.T) { } } +func TestIntConversion(t *testing.T) { + testIntConversion(t, 0) + testIntConversion(t, 1) + testIntConversion(t, -1) + testIntConversion(t, 1<<20) + testIntConversion(t, -1<<20) + testIntConversion(t, 1<<40) + testIntConversion(t, -1<<40) + testIntConversion(t, 1<<60) + testIntConversion(t, -1<<60) +} + +func testIntConversion(t *testing.T, want int) { + if got := js.ValueOf(want).Int(); got != want { + t.Errorf("got %#v, want %#v", got, want) + } +} + func TestFloat(t *testing.T) { want := 42.123 o := dummys.Get("someFloat")