Skip to content

Commit 14657bc

Browse files
authored
Support embind memory_views of big ints. (#19102)
1 parent 8385a1c commit 14657bc

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

system/lib/embind/bind.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ EMSCRIPTEN_BINDINGS(builtin) {
173173
register_memory_view<uint16_t>("emscripten::memory_view<uint16_t>");
174174
register_memory_view<int32_t>("emscripten::memory_view<int32_t>");
175175
register_memory_view<uint32_t>("emscripten::memory_view<uint32_t>");
176+
register_memory_view<int64_t>("emscripten::memory_view<int64_t>");
177+
register_memory_view<uint64_t>("emscripten::memory_view<uint64_t>");
176178

177179
register_memory_view<float>("emscripten::memory_view<float>");
178180
register_memory_view<double>("emscripten::memory_view<double>");

test/embind/test_i64_val.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ int main()
5959
const int64_t max_int64_t = numeric_limits<int64_t>::max();
6060
const int64_t min_int64_t = numeric_limits<int64_t>::min();
6161
const uint64_t max_uint64_t = numeric_limits<uint64_t>::max();
62+
std::array<std::uint64_t, 5> uint64Array = {0, 1, 2, 3, 4};
63+
std::array<std::int64_t, 5> int64Array = {-2, -1, 0, 1, 2};
6264

6365
printf("start\n");
6466

@@ -90,6 +92,20 @@ int main()
9092
ensure_js(compare_a_64_js(min_int64_t));
9193
ensure(val::global()["a"].as<int64_t>() == min_int64_t);
9294

95+
test("val(typed_memory_view<uint64_t>)");
96+
val::global().set("a", val(typed_memory_view(uint64Array.size(), uint64Array.data())));
97+
ensure_js("a instanceof BigUint64Array");
98+
ensure_js("a.length === 5");
99+
ensure_js("a[0] === 0n");
100+
ensure_js("a[4] === 4n");
101+
102+
test("val(typed_memory_view<int64_t>)");
103+
val::global().set("a", val(typed_memory_view(int64Array.size(), int64Array.data())));
104+
ensure_js("a instanceof BigInt64Array");
105+
ensure_js("a.length === 5");
106+
ensure_js("a[0] === -2n");
107+
ensure_js("a[4] === 2n");
108+
93109
printf("end\n");
94110
return 0;
95111
}

test/embind/test_i64_val.out

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,16 @@ pass
1616
pass
1717
pass
1818
pass
19+
test:
20+
val(typed_memory_view<uint64_t>)
21+
pass
22+
pass
23+
pass
24+
pass
25+
test:
26+
val(typed_memory_view<int64_t>)
27+
pass
28+
pass
29+
pass
30+
pass
1931
end

0 commit comments

Comments
 (0)