emnapi 1.2.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +13 -3
- package/README.md +7 -18
- package/common.gypi +1 -0
- package/dist/library_napi.js +130 -41
- package/emnapi.gyp +4 -0
- package/include/node/emnapi.h +2 -2
- package/include/node/js_native_api.h +30 -25
- package/include/node/js_native_api_types.h +13 -9
- package/include/node/node_api.h +25 -13
- package/include/node/uv/threadpool.h +1 -1
- package/include/node/uv/unix.h +4 -0
- package/include/node/uv.h +49 -6
- package/index.js +1 -0
- package/lib/wasm32/libemnapi.a +0 -0
- package/lib/wasm32-emscripten/libemnapi-mt.a +0 -0
- package/lib/wasm32-emscripten/libemnapi.a +0 -0
- package/lib/wasm32-wasi/libemnapi.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi-basic-mt.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi-basic.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi-mt.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi.a +0 -0
- package/lib/wasm32-wasip1/libemnapi.a +0 -0
- package/lib/wasm32-wasip1-threads/libemnapi-basic-mt.a +0 -0
- package/lib/wasm32-wasip1-threads/libemnapi-basic.a +0 -0
- package/lib/wasm32-wasip1-threads/libemnapi-mt.a +0 -0
- package/lib/wasm32-wasip1-threads/libemnapi.a +0 -0
- package/lib/wasm64-emscripten/libemnapi-mt.a +0 -0
- package/lib/wasm64-emscripten/libemnapi.a +0 -0
- package/package.json +1 -1
- package/src/async_cleanup_hook.c +1 -1
- package/src/async_work.c +2 -2
- package/src/emnapi_internal.h +2 -2
- package/src/js_native_api.c +2 -1
- package/src/node_api.c +5 -5
- package/src/threadsafe_function.c +20 -21
- package/src/uv/queue.h +68 -86
- package/src/uv/threadpool.c +58 -40
- package/src/uv/unix/async.c +67 -64
- package/src/uv/unix/core.c +36 -1
- package/src/uv/unix/internal.h +54 -0
- package/src/uv/unix/loop.c +40 -4
- package/src/uv/unix/posix-hrtime.c +40 -0
- package/src/uv/uv-common.c +123 -7
- package/src/uv/uv-common.h +137 -9
package/CMakeLists.txt
CHANGED
|
@@ -33,6 +33,7 @@ set(UV_SRC
|
|
|
33
33
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/uv/uv-common.c"
|
|
34
34
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/uv/threadpool.c"
|
|
35
35
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/loop.c"
|
|
36
|
+
"${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/posix-hrtime.c"
|
|
36
37
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/thread.c"
|
|
37
38
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/async.c"
|
|
38
39
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/uv/unix/core.c"
|
|
@@ -139,7 +140,10 @@ endif()
|
|
|
139
140
|
|
|
140
141
|
add_library(${EMNAPI_BASIC_TARGET_NAME} STATIC ${ENAPI_BASIC_SRC})
|
|
141
142
|
target_include_directories(${EMNAPI_BASIC_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
|
|
142
|
-
target_compile_definitions(${EMNAPI_BASIC_TARGET_NAME}
|
|
143
|
+
target_compile_definitions(${EMNAPI_BASIC_TARGET_NAME}
|
|
144
|
+
PUBLIC ${EMNAPI_DEFINES}
|
|
145
|
+
PRIVATE "EMNAPI_DISABLE_UV"
|
|
146
|
+
)
|
|
143
147
|
if(IS_EMSCRIPTEN)
|
|
144
148
|
set_target_properties(${EMNAPI_BASIC_TARGET_NAME} PROPERTIES INTERFACE_LINK_DEPENDS ${EMNAPI_JS_LIB})
|
|
145
149
|
target_link_options(${EMNAPI_BASIC_TARGET_NAME} INTERFACE "--js-library=${EMNAPI_JS_LIB}")
|
|
@@ -159,7 +163,10 @@ if(EMNAPI_BUILD_BASIC_MT)
|
|
|
159
163
|
)
|
|
160
164
|
target_compile_options(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC "-matomics" "-mbulk-memory")
|
|
161
165
|
target_include_directories(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
|
|
162
|
-
target_compile_definitions(${EMNAPI_BASIC_MT_TARGET_NAME}
|
|
166
|
+
target_compile_definitions(${EMNAPI_BASIC_MT_TARGET_NAME}
|
|
167
|
+
PUBLIC ${EMNAPI_DEFINES}
|
|
168
|
+
PRIVATE "EMNAPI_DISABLE_UV"
|
|
169
|
+
)
|
|
163
170
|
|
|
164
171
|
if(IS_EMSCRIPTEN)
|
|
165
172
|
set_target_properties(${EMNAPI_BASIC_MT_TARGET_NAME} PROPERTIES INTERFACE_LINK_DEPENDS ${EMNAPI_JS_LIB})
|
|
@@ -175,7 +182,10 @@ endif()
|
|
|
175
182
|
|
|
176
183
|
if(EMNAPI_BUILD_MT)
|
|
177
184
|
add_library(${EMNAPI_MT_TARGET_NAME} STATIC ${EMNAPI_SRC} ${UV_SRC})
|
|
178
|
-
target_compile_options(${EMNAPI_MT_TARGET_NAME}
|
|
185
|
+
target_compile_options(${EMNAPI_MT_TARGET_NAME}
|
|
186
|
+
PUBLIC "-matomics" "-mbulk-memory"
|
|
187
|
+
PRIVATE ${EMNAPI_MT_CFLAGS}
|
|
188
|
+
)
|
|
179
189
|
target_include_directories(${EMNAPI_MT_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
|
|
180
190
|
target_compile_definitions(${EMNAPI_MT_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
|
|
181
191
|
if(IS_EMSCRIPTEN)
|
package/README.md
CHANGED
|
@@ -45,6 +45,7 @@ You will need to install:
|
|
|
45
45
|
- npm `>= v8`
|
|
46
46
|
- Emscripten `>= v3.1.9` / wasi-sdk / LLVM clang with wasm support
|
|
47
47
|
- (Optional) CMake `>= v3.13`
|
|
48
|
+
- (Optional) node-gyp `>= v10.2.0`
|
|
48
49
|
- (Optional) ninja
|
|
49
50
|
- (Optional) make
|
|
50
51
|
- (Optional) [node-addon-api](https://github.com/nodejs/node-addon-api) `>= 6.1.0`
|
|
@@ -68,6 +69,9 @@ emcc -v
|
|
|
68
69
|
|
|
69
70
|
cmake --version
|
|
70
71
|
|
|
72
|
+
# if you use node-gyp
|
|
73
|
+
node-gyp --version
|
|
74
|
+
|
|
71
75
|
# if you use ninja
|
|
72
76
|
ninja --version
|
|
73
77
|
|
|
@@ -629,15 +633,9 @@ Output code can run in recent version modern browsers and Node.js latest LTS. IE
|
|
|
629
633
|
|
|
630
634
|
### Using node-gyp (Experimental)
|
|
631
635
|
|
|
632
|
-
|
|
633
|
-
There are related PRs to try to make node-gyp work fine.
|
|
634
|
-
|
|
635
|
-
- https://github.com/nodejs/gyp-next/pull/222
|
|
636
|
-
- https://github.com/nodejs/gyp-next/pull/240
|
|
637
|
-
- https://github.com/nodejs/node-gyp/pull/2974
|
|
636
|
+
Require node-gyp `>= 10.2.0`
|
|
638
637
|
|
|
639
|
-
|
|
640
|
-
[emnapi-node-gyp-test](https://github.com/toyobayashi/emnapi-node-gyp-test) for examples.
|
|
638
|
+
See [emnapi-node-gyp-test](https://github.com/toyobayashi/emnapi-node-gyp-test) for examples.
|
|
641
639
|
|
|
642
640
|
- Variables
|
|
643
641
|
|
|
@@ -685,19 +683,10 @@ declare var emnapi_manual_linking: 0 | 1
|
|
|
685
683
|
["OS == 'emscripten'", {
|
|
686
684
|
"product_extension": "js", # required
|
|
687
685
|
|
|
688
|
-
# Windows and Linux
|
|
689
686
|
"cflags": [],
|
|
690
687
|
"cflags_c": [],
|
|
691
688
|
"cflags_cc": [],
|
|
692
|
-
"ldflags": []
|
|
693
|
-
|
|
694
|
-
# macOS uses following config
|
|
695
|
-
'xcode_settings': {
|
|
696
|
-
"WARNING_CFLAGS": [], # cflags
|
|
697
|
-
"OTHER_CFLAGS": [], # cflags_c
|
|
698
|
-
"OTHER_CPLUSPLUSFLAGS": [], # cflags_cc
|
|
699
|
-
"OTHER_LDFLAGS": [] # ldflags
|
|
700
|
-
}
|
|
689
|
+
"ldflags": []
|
|
701
690
|
}],
|
|
702
691
|
["OS == 'wasi'", {
|
|
703
692
|
# ...
|
package/common.gypi
CHANGED
package/dist/library_napi.js
CHANGED
|
@@ -958,7 +958,7 @@ var emnapiExternalMemory = {
|
|
|
958
958
|
var _a;
|
|
959
959
|
var info = {
|
|
960
960
|
address: 0,
|
|
961
|
-
ownership: 0 /*
|
|
961
|
+
ownership: 0 /* ReferenceOwnership.kRuntime */,
|
|
962
962
|
runtimeAllocated: 0
|
|
963
963
|
};
|
|
964
964
|
if (arrayBuffer === wasmMemory.buffer) {
|
|
@@ -971,7 +971,7 @@ var emnapiExternalMemory = {
|
|
|
971
971
|
cachedInfo.address = 0;
|
|
972
972
|
return cachedInfo;
|
|
973
973
|
}
|
|
974
|
-
if (shouldCopy && cachedInfo.ownership === 0 /*
|
|
974
|
+
if (shouldCopy && cachedInfo.ownership === 0 /* ReferenceOwnership.kRuntime */ && cachedInfo.runtimeAllocated === 1) {
|
|
975
975
|
new Uint8Array(wasmMemory.buffer).set(new Uint8Array(arrayBuffer), cachedInfo.address);
|
|
976
976
|
}
|
|
977
977
|
return cachedInfo;
|
|
@@ -987,7 +987,7 @@ var emnapiExternalMemory = {
|
|
|
987
987
|
throw new Error('Out of memory');
|
|
988
988
|
new Uint8Array(wasmMemory.buffer).set(new Uint8Array(arrayBuffer), pointer);
|
|
989
989
|
info.address = pointer;
|
|
990
|
-
info.ownership = emnapiExternalMemory.registry ? 0 /*
|
|
990
|
+
info.ownership = emnapiExternalMemory.registry ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */;
|
|
991
991
|
info.runtimeAllocated = 1;
|
|
992
992
|
emnapiExternalMemory.table.set(arrayBuffer, info);
|
|
993
993
|
(_a = emnapiExternalMemory.registry) === null || _a === void 0 ? void 0 : _a.register(arrayBuffer, pointer);
|
|
@@ -1000,7 +1000,7 @@ var emnapiExternalMemory = {
|
|
|
1000
1000
|
Ctor: view.constructor,
|
|
1001
1001
|
address: view.byteOffset,
|
|
1002
1002
|
length: view instanceof DataView ? view.byteLength : view.length,
|
|
1003
|
-
ownership: 1 /*
|
|
1003
|
+
ownership: 1 /* ReferenceOwnership.kUserland */,
|
|
1004
1004
|
runtimeAllocated: 0
|
|
1005
1005
|
});
|
|
1006
1006
|
}
|
|
@@ -1031,7 +1031,7 @@ var emnapiExternalMemory = {
|
|
|
1031
1031
|
var _a = emnapiExternalMemory.wasmMemoryViewTable.get(view), address_1 = _a.address, ownership_1 = _a.ownership, runtimeAllocated_1 = _a.runtimeAllocated;
|
|
1032
1032
|
return { address: address_1, ownership: ownership_1, runtimeAllocated: runtimeAllocated_1, view: view };
|
|
1033
1033
|
}
|
|
1034
|
-
return { address: view.byteOffset, ownership: 1 /*
|
|
1034
|
+
return { address: view.byteOffset, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0, view: view };
|
|
1035
1035
|
}
|
|
1036
1036
|
var _b = emnapiExternalMemory.getArrayBufferPointer(view.buffer, shouldCopy), address = _b.address, ownership = _b.ownership, runtimeAllocated = _b.runtimeAllocated;
|
|
1037
1037
|
return { address: address === 0 ? 0 : (address + view.byteOffset), ownership: ownership, runtimeAllocated: runtimeAllocated, view: view };
|
|
@@ -1237,6 +1237,9 @@ function _napi_get_buffer_info(env, buffer, data, length) {
|
|
|
1237
1237
|
var handle = emnapiCtx.handleStore.get(buffer);
|
|
1238
1238
|
if (!handle.isBuffer(emnapiCtx.feature.Buffer))
|
|
1239
1239
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
1240
|
+
if (handle.isDataView()) {
|
|
1241
|
+
return _napi_get_dataview_info(env, buffer, length, data, 0, 0);
|
|
1242
|
+
}
|
|
1240
1243
|
return _napi_get_typedarray_info(env, buffer, 0, length, data, 0, 0);
|
|
1241
1244
|
}
|
|
1242
1245
|
/**
|
|
@@ -1867,6 +1870,18 @@ function _node_api_create_external_string_latin1(env, str, length, finalize_call
|
|
|
1867
1870
|
function _node_api_create_external_string_utf16(env, str, length, finalize_callback, finalize_hint, result, copied) {
|
|
1868
1871
|
return emnapiString.newExternalString(env, str, length, finalize_callback, finalize_hint, result, copied, _napi_create_string_utf16, undefined);
|
|
1869
1872
|
}
|
|
1873
|
+
/**
|
|
1874
|
+
* @__sig ipppp
|
|
1875
|
+
*/
|
|
1876
|
+
function _node_api_create_property_key_latin1(env, str, length, result) {
|
|
1877
|
+
return _napi_create_string_latin1(env, str, length, result);
|
|
1878
|
+
}
|
|
1879
|
+
/**
|
|
1880
|
+
* @__sig ipppp
|
|
1881
|
+
*/
|
|
1882
|
+
function _node_api_create_property_key_utf8(env, str, length, result) {
|
|
1883
|
+
return _napi_create_string_utf8(env, str, length, result);
|
|
1884
|
+
}
|
|
1870
1885
|
/**
|
|
1871
1886
|
* @__sig ipppp
|
|
1872
1887
|
*/
|
|
@@ -2128,13 +2143,16 @@ function emnapiWrap(env, js_object, native_object, finalize_cb, finalize_hint, r
|
|
|
2128
2143
|
if (result) {
|
|
2129
2144
|
if (!finalize_cb)
|
|
2130
2145
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
2131
|
-
reference = emnapiCtx.
|
|
2146
|
+
reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, 1 /* ReferenceOwnership.kUserland */, finalize_cb, native_object, finalize_hint);
|
|
2132
2147
|
{{{ from64('result') }}};
|
|
2133
2148
|
referenceId = reference.id;
|
|
2134
2149
|
{{{ makeSetValue('result', 0, 'referenceId', '*') }}};
|
|
2135
2150
|
}
|
|
2151
|
+
else if (finalize_cb) {
|
|
2152
|
+
reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, 0 /* ReferenceOwnership.kRuntime */, finalize_cb, native_object, finalize_hint);
|
|
2153
|
+
}
|
|
2136
2154
|
else {
|
|
2137
|
-
reference = emnapiCtx.
|
|
2155
|
+
reference = emnapiCtx.createReferenceWithData(envObject, handle.id, 0, 0 /* ReferenceOwnership.kRuntime */, native_object);
|
|
2138
2156
|
}
|
|
2139
2157
|
envObject.getObjectBinding(handle.value).wrapped = reference.id;
|
|
2140
2158
|
return envObject.getReturnStatus();
|
|
@@ -2181,7 +2199,7 @@ function emnapiUnwrap(env, js_object, result, action) {
|
|
|
2181
2199
|
}
|
|
2182
2200
|
if (action === 1 /* UnwrapAction.RemoveWrap */) {
|
|
2183
2201
|
binding.wrapped = 0;
|
|
2184
|
-
if (ref.ownership() === 1 /*
|
|
2202
|
+
if (ref.ownership() === 1 /* ReferenceOwnership.kUserland */) {
|
|
2185
2203
|
// When the wrap is been removed, the finalizer should be reset.
|
|
2186
2204
|
ref.resetFinalizer();
|
|
2187
2205
|
}
|
|
@@ -2406,11 +2424,11 @@ function _napi_add_finalizer(env, js_object, finalize_data, finalize_cb, finaliz
|
|
|
2406
2424
|
return envObject.setLastError(handleResult.status);
|
|
2407
2425
|
}
|
|
2408
2426
|
var handle = handleResult.handle;
|
|
2409
|
-
var ownership = !result ? 0 /*
|
|
2427
|
+
var ownership = !result ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */;
|
|
2410
2428
|
{{{ from64('finalize_data') }}};
|
|
2411
2429
|
{{{ from64('finalize_cb') }}};
|
|
2412
2430
|
{{{ from64('finalize_hint') }}};
|
|
2413
|
-
var reference = emnapiCtx.
|
|
2431
|
+
var reference = emnapiCtx.createReferenceWithFinalizer(envObject, handle.id, 0, ownership, finalize_cb, finalize_data, finalize_hint);
|
|
2414
2432
|
if (result) {
|
|
2415
2433
|
{{{ from64('result') }}};
|
|
2416
2434
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -2467,46 +2485,46 @@ function _emnapi_create_memory_view(env, typedarray_type, external_data, byte_le
|
|
|
2467
2485
|
var viewDescriptor = void 0;
|
|
2468
2486
|
switch (typedarray_type) {
|
|
2469
2487
|
case 0 /* emnapi_memory_view_type.emnapi_int8_array */:
|
|
2470
|
-
viewDescriptor = { Ctor: Int8Array, address: external_data, length: byte_length, ownership: 1 /*
|
|
2488
|
+
viewDescriptor = { Ctor: Int8Array, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2471
2489
|
break;
|
|
2472
2490
|
case 1 /* emnapi_memory_view_type.emnapi_uint8_array */:
|
|
2473
|
-
viewDescriptor = { Ctor: Uint8Array, address: external_data, length: byte_length, ownership: 1 /*
|
|
2491
|
+
viewDescriptor = { Ctor: Uint8Array, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2474
2492
|
break;
|
|
2475
2493
|
case 2 /* emnapi_memory_view_type.emnapi_uint8_clamped_array */:
|
|
2476
|
-
viewDescriptor = { Ctor: Uint8ClampedArray, address: external_data, length: byte_length, ownership: 1 /*
|
|
2494
|
+
viewDescriptor = { Ctor: Uint8ClampedArray, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2477
2495
|
break;
|
|
2478
2496
|
case 3 /* emnapi_memory_view_type.emnapi_int16_array */:
|
|
2479
|
-
viewDescriptor = { Ctor: Int16Array, address: external_data, length: byte_length >> 1, ownership: 1 /*
|
|
2497
|
+
viewDescriptor = { Ctor: Int16Array, address: external_data, length: byte_length >> 1, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2480
2498
|
break;
|
|
2481
2499
|
case 4 /* emnapi_memory_view_type.emnapi_uint16_array */:
|
|
2482
|
-
viewDescriptor = { Ctor: Uint16Array, address: external_data, length: byte_length >> 1, ownership: 1 /*
|
|
2500
|
+
viewDescriptor = { Ctor: Uint16Array, address: external_data, length: byte_length >> 1, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2483
2501
|
break;
|
|
2484
2502
|
case 5 /* emnapi_memory_view_type.emnapi_int32_array */:
|
|
2485
|
-
viewDescriptor = { Ctor: Int32Array, address: external_data, length: byte_length >> 2, ownership: 1 /*
|
|
2503
|
+
viewDescriptor = { Ctor: Int32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2486
2504
|
break;
|
|
2487
2505
|
case 6 /* emnapi_memory_view_type.emnapi_uint32_array */:
|
|
2488
|
-
viewDescriptor = { Ctor: Uint32Array, address: external_data, length: byte_length >> 2, ownership: 1 /*
|
|
2506
|
+
viewDescriptor = { Ctor: Uint32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2489
2507
|
break;
|
|
2490
2508
|
case 7 /* emnapi_memory_view_type.emnapi_float32_array */:
|
|
2491
|
-
viewDescriptor = { Ctor: Float32Array, address: external_data, length: byte_length >> 2, ownership: 1 /*
|
|
2509
|
+
viewDescriptor = { Ctor: Float32Array, address: external_data, length: byte_length >> 2, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2492
2510
|
break;
|
|
2493
2511
|
case 8 /* emnapi_memory_view_type.emnapi_float64_array */:
|
|
2494
|
-
viewDescriptor = { Ctor: Float64Array, address: external_data, length: byte_length >> 3, ownership: 1 /*
|
|
2512
|
+
viewDescriptor = { Ctor: Float64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2495
2513
|
break;
|
|
2496
2514
|
case 9 /* emnapi_memory_view_type.emnapi_bigint64_array */:
|
|
2497
|
-
viewDescriptor = { Ctor: BigInt64Array, address: external_data, length: byte_length >> 3, ownership: 1 /*
|
|
2515
|
+
viewDescriptor = { Ctor: BigInt64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2498
2516
|
break;
|
|
2499
2517
|
case 10 /* emnapi_memory_view_type.emnapi_biguint64_array */:
|
|
2500
|
-
viewDescriptor = { Ctor: BigUint64Array, address: external_data, length: byte_length >> 3, ownership: 1 /*
|
|
2518
|
+
viewDescriptor = { Ctor: BigUint64Array, address: external_data, length: byte_length >> 3, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2501
2519
|
break;
|
|
2502
2520
|
case -1 /* emnapi_memory_view_type.emnapi_data_view */:
|
|
2503
|
-
viewDescriptor = { Ctor: DataView, address: external_data, length: byte_length, ownership: 1 /*
|
|
2521
|
+
viewDescriptor = { Ctor: DataView, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2504
2522
|
break;
|
|
2505
2523
|
case -2 /* emnapi_memory_view_type.emnapi_buffer */: {
|
|
2506
2524
|
if (!emnapiCtx.feature.Buffer) {
|
|
2507
2525
|
throw emnapiCtx.createNotSupportBufferError('emnapi_create_memory_view', '');
|
|
2508
2526
|
}
|
|
2509
|
-
viewDescriptor = { Ctor: emnapiCtx.feature.Buffer, address: external_data, length: byte_length, ownership: 1 /*
|
|
2527
|
+
viewDescriptor = { Ctor: emnapiCtx.feature.Buffer, address: external_data, length: byte_length, ownership: 1 /* ReferenceOwnership.kUserland */, runtimeAllocated: 0 };
|
|
2510
2528
|
break;
|
|
2511
2529
|
}
|
|
2512
2530
|
default: return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
@@ -2869,7 +2887,7 @@ function _napi_create_external(env, data, finalize_cb, finalize_hint, result) {
|
|
|
2869
2887
|
}
|
|
2870
2888
|
var externalHandle = emnapiCtx.getCurrentScope().addExternal(envObject, data);
|
|
2871
2889
|
if (finalize_cb) {
|
|
2872
|
-
emnapiCtx.
|
|
2890
|
+
emnapiCtx.createReferenceWithFinalizer(envObject, externalHandle.id, 0, 0 /* ReferenceOwnership.kRuntime */, finalize_cb, data, finalize_hint);
|
|
2873
2891
|
}
|
|
2874
2892
|
{{{ from64('result') }}};
|
|
2875
2893
|
value = externalHandle.id;
|
|
@@ -2927,7 +2945,7 @@ function _napi_create_external_arraybuffer(env, external_data, byte_length, fina
|
|
|
2927
2945
|
u8arr.set(new Uint8Array(wasmMemory.buffer).subarray(external_data, external_data + byte_length));
|
|
2928
2946
|
emnapiExternalMemory.table.set(arrayBuffer, {
|
|
2929
2947
|
address: external_data,
|
|
2930
|
-
ownership: 1 /*
|
|
2948
|
+
ownership: 1 /* ReferenceOwnership.kUserland */,
|
|
2931
2949
|
runtimeAllocated: 0
|
|
2932
2950
|
});
|
|
2933
2951
|
}
|
|
@@ -3020,10 +3038,10 @@ function _napi_create_typedarray(env, type, length, arraybuffer, byte_offset, re
|
|
|
3020
3038
|
if (!result)
|
|
3021
3039
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
3022
3040
|
var handle = emnapiCtx.handleStore.get(arraybuffer);
|
|
3023
|
-
|
|
3024
|
-
if (!(buffer instanceof ArrayBuffer)) {
|
|
3041
|
+
if (!handle.isArrayBuffer()) {
|
|
3025
3042
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
3026
3043
|
}
|
|
3044
|
+
var buffer = handle.value;
|
|
3027
3045
|
{{{ from64('byte_offset') }}};
|
|
3028
3046
|
{{{ from64('length') }}};
|
|
3029
3047
|
var createTypedArray = function (envObject, Type, size_of_element, buffer, byte_offset, length) {
|
|
@@ -3051,7 +3069,7 @@ function _napi_create_typedarray(env, type, length, arraybuffer, byte_offset, re
|
|
|
3051
3069
|
Ctor: Type,
|
|
3052
3070
|
address: byte_offset,
|
|
3053
3071
|
length: length,
|
|
3054
|
-
ownership: 1 /*
|
|
3072
|
+
ownership: 1 /* ReferenceOwnership.kUserland */,
|
|
3055
3073
|
runtimeAllocated: 0
|
|
3056
3074
|
});
|
|
3057
3075
|
}
|
|
@@ -3138,7 +3156,7 @@ function _napi_create_buffer(env, size, data, result) {
|
|
|
3138
3156
|
Ctor: Buffer,
|
|
3139
3157
|
address: pointer,
|
|
3140
3158
|
length: size,
|
|
3141
|
-
ownership: emnapiExternalMemory.registry ? 0 /*
|
|
3159
|
+
ownership: emnapiExternalMemory.registry ? 0 /* ReferenceOwnership.kRuntime */ : 1 /* ReferenceOwnership.kUserland */,
|
|
3142
3160
|
runtimeAllocated: 1
|
|
3143
3161
|
};
|
|
3144
3162
|
emnapiExternalMemory.wasmMemoryViewTable.set(buffer_1, viewDescriptor);
|
|
@@ -3199,6 +3217,68 @@ function _napi_create_buffer_copy(env, length, data, result_data, result) {
|
|
|
3199
3217
|
function _napi_create_external_buffer(env, length, data, finalize_cb, finalize_hint, result) {
|
|
3200
3218
|
return _emnapi_create_memory_view(env, -2 /* emnapi_memory_view_type.emnapi_buffer */, data, length, finalize_cb, finalize_hint, result);
|
|
3201
3219
|
}
|
|
3220
|
+
/**
|
|
3221
|
+
* @__sig ippppp
|
|
3222
|
+
*/
|
|
3223
|
+
function _node_api_create_buffer_from_arraybuffer(env, arraybuffer, byte_offset, byte_length, result) {
|
|
3224
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3225
|
+
var value;
|
|
3226
|
+
if (!env)
|
|
3227
|
+
return 1 /* napi_status.napi_invalid_arg */;
|
|
3228
|
+
// @ts-expect-error
|
|
3229
|
+
var envObject = emnapiCtx.envStore.get(env);
|
|
3230
|
+
envObject.checkGCAccess();
|
|
3231
|
+
if (!envObject.tryCatch.isEmpty())
|
|
3232
|
+
return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
|
|
3233
|
+
if (!envObject.canCallIntoJs())
|
|
3234
|
+
return envObject.setLastError(envObject.moduleApiVersion === 2147483647 /* Version.NAPI_VERSION_EXPERIMENTAL */ ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
|
|
3235
|
+
envObject.clearLastError();
|
|
3236
|
+
try {
|
|
3237
|
+
if (!arraybuffer)
|
|
3238
|
+
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
3239
|
+
if (!result)
|
|
3240
|
+
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
3241
|
+
{{{ from64('byte_offset') }}};
|
|
3242
|
+
{{{ from64('byte_length') }}};
|
|
3243
|
+
byte_offset = byte_offset >>> 0;
|
|
3244
|
+
byte_length = byte_length >>> 0;
|
|
3245
|
+
var handle = emnapiCtx.handleStore.get(arraybuffer);
|
|
3246
|
+
if (!handle.isArrayBuffer()) {
|
|
3247
|
+
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
3248
|
+
}
|
|
3249
|
+
var buffer = handle.value;
|
|
3250
|
+
if ((byte_length + byte_offset) > buffer.byteLength) {
|
|
3251
|
+
var err = new RangeError('The byte offset + length is out of range');
|
|
3252
|
+
err.code = 'ERR_OUT_OF_RANGE';
|
|
3253
|
+
throw err;
|
|
3254
|
+
}
|
|
3255
|
+
var Buffer = emnapiCtx.feature.Buffer;
|
|
3256
|
+
if (!Buffer) {
|
|
3257
|
+
throw emnapiCtx.createNotSupportBufferError('node_api_create_buffer_from_arraybuffer', '');
|
|
3258
|
+
}
|
|
3259
|
+
var out = Buffer.from(buffer, byte_offset, byte_length);
|
|
3260
|
+
if (buffer === wasmMemory.buffer) {
|
|
3261
|
+
if (!emnapiExternalMemory.wasmMemoryViewTable.has(out)) {
|
|
3262
|
+
emnapiExternalMemory.wasmMemoryViewTable.set(out, {
|
|
3263
|
+
Ctor: Buffer,
|
|
3264
|
+
address: byte_offset,
|
|
3265
|
+
length: byte_length,
|
|
3266
|
+
ownership: 1 /* ReferenceOwnership.kUserland */,
|
|
3267
|
+
runtimeAllocated: 0
|
|
3268
|
+
});
|
|
3269
|
+
}
|
|
3270
|
+
}
|
|
3271
|
+
{{{ from64('result') }}};
|
|
3272
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3273
|
+
value = emnapiCtx.addToCurrentScope(out).id;
|
|
3274
|
+
{{{ makeSetValue('result', 0, 'value', '*') }}};
|
|
3275
|
+
return envObject.getReturnStatus();
|
|
3276
|
+
}
|
|
3277
|
+
catch (err) {
|
|
3278
|
+
envObject.tryCatch.setError(err);
|
|
3279
|
+
return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
|
|
3280
|
+
}
|
|
3281
|
+
}
|
|
3202
3282
|
/**
|
|
3203
3283
|
* @__sig ippppp
|
|
3204
3284
|
*/
|
|
@@ -3225,10 +3305,10 @@ function _napi_create_dataview(env, byte_length, arraybuffer, byte_offset, resul
|
|
|
3225
3305
|
byte_length = byte_length >>> 0;
|
|
3226
3306
|
byte_offset = byte_offset >>> 0;
|
|
3227
3307
|
var handle = emnapiCtx.handleStore.get(arraybuffer);
|
|
3228
|
-
|
|
3229
|
-
if (!(buffer instanceof ArrayBuffer)) {
|
|
3308
|
+
if (!handle.isArrayBuffer()) {
|
|
3230
3309
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
3231
3310
|
}
|
|
3311
|
+
var buffer = handle.value;
|
|
3232
3312
|
if ((byte_length + byte_offset) > buffer.byteLength) {
|
|
3233
3313
|
var err = new RangeError('byte_offset + byte_length should be less than or equal to the size in bytes of the array passed in');
|
|
3234
3314
|
err.code = 'ERR_NAPI_INVALID_DATAVIEW_ARGS';
|
|
@@ -3241,7 +3321,7 @@ function _napi_create_dataview(env, byte_length, arraybuffer, byte_offset, resul
|
|
|
3241
3321
|
Ctor: DataView,
|
|
3242
3322
|
address: byte_offset,
|
|
3243
3323
|
length: byte_length,
|
|
3244
|
-
ownership: 1 /*
|
|
3324
|
+
ownership: 1 /* ReferenceOwnership.kUserland */,
|
|
3245
3325
|
runtimeAllocated: 0
|
|
3246
3326
|
});
|
|
3247
3327
|
}
|
|
@@ -4032,7 +4112,7 @@ function _napi_create_reference(env, value, initial_refcount, result) {
|
|
|
4032
4112
|
}
|
|
4033
4113
|
}
|
|
4034
4114
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4035
|
-
var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1 /*
|
|
4115
|
+
var ref = emnapiCtx.createReference(envObject, handle.id, initial_refcount >>> 0, 1 /* ReferenceOwnership.kUserland */);
|
|
4036
4116
|
{{{ from64('result') }}};
|
|
4037
4117
|
{{{ makeSetValue('result', 0, 'ref.id', '*') }}};
|
|
4038
4118
|
return envObject.clearLastError();
|
|
@@ -4076,7 +4156,7 @@ function _napi_reference_unref(env, ref, result) {
|
|
|
4076
4156
|
if (!ref)
|
|
4077
4157
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
4078
4158
|
var reference = emnapiCtx.refStore.get(ref);
|
|
4079
|
-
var refcount = reference.
|
|
4159
|
+
var refcount = reference.refcount();
|
|
4080
4160
|
if (refcount === 0) {
|
|
4081
4161
|
return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
|
|
4082
4162
|
}
|
|
@@ -4101,7 +4181,7 @@ function _napi_get_reference_value(env, ref, result) {
|
|
|
4101
4181
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
4102
4182
|
var reference = emnapiCtx.refStore.get(ref);
|
|
4103
4183
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4104
|
-
var handleId = reference.get();
|
|
4184
|
+
var handleId = reference.get(envObject);
|
|
4105
4185
|
{{{ from64('result') }}};
|
|
4106
4186
|
{{{ makeSetValue('result', 0, 'handleId', '*') }}};
|
|
4107
4187
|
return envObject.clearLastError();
|
|
@@ -5911,7 +5991,7 @@ function _napi_create_threadsafe_function(env, func, async_resource, async_resou
|
|
|
5911
5991
|
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
5912
5992
|
}
|
|
5913
5993
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5914
|
-
ref = emnapiCtx.createReference(envObject, func, 1, 1 /*
|
|
5994
|
+
ref = emnapiCtx.createReference(envObject, func, 1, 1 /* ReferenceOwnership.kUserland */).id;
|
|
5915
5995
|
}
|
|
5916
5996
|
var asyncResourceObject;
|
|
5917
5997
|
if (async_resource) {
|
|
@@ -5937,7 +6017,7 @@ function _napi_create_threadsafe_function(env, func, async_resource, async_resou
|
|
|
5937
6017
|
if (!tsfn)
|
|
5938
6018
|
return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
|
|
5939
6019
|
new Uint8Array(wasmMemory.buffer).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
|
|
5940
|
-
var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /*
|
|
6020
|
+
var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /* ReferenceOwnership.kUserland */);
|
|
5941
6021
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5942
6022
|
var resource_ = resourceRef.id;
|
|
5943
6023
|
{{{ makeSetValue('tsfn', 0, 'resource_', '*') }}};
|
|
@@ -6834,18 +6914,18 @@ function _napi_get_version(env, result) {
|
|
|
6834
6914
|
napi_get_boolean: _napi_get_boolean,
|
|
6835
6915
|
napi_get_boolean__deps: ["$emnapiCtx"],
|
|
6836
6916
|
napi_get_boolean__sig: "ipip",
|
|
6917
|
+
napi_get_dataview_info: _napi_get_dataview_info,
|
|
6918
|
+
napi_get_dataview_info__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
|
|
6919
|
+
napi_get_dataview_info__sig: "ipppppp",
|
|
6837
6920
|
napi_get_typedarray_info: _napi_get_typedarray_info,
|
|
6838
6921
|
napi_get_typedarray_info__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
|
|
6839
6922
|
napi_get_typedarray_info__sig: "ippppppp",
|
|
6840
6923
|
napi_get_buffer_info: _napi_get_buffer_info,
|
|
6841
|
-
napi_get_buffer_info__deps: ["$emnapiCtx", "napi_get_typedarray_info"],
|
|
6924
|
+
napi_get_buffer_info__deps: ["$emnapiCtx", "napi_get_dataview_info", "napi_get_typedarray_info"],
|
|
6842
6925
|
napi_get_buffer_info__sig: "ipppp",
|
|
6843
6926
|
napi_get_cb_info: _napi_get_cb_info,
|
|
6844
6927
|
napi_get_cb_info__deps: ["$emnapiCtx"],
|
|
6845
6928
|
napi_get_cb_info__sig: "ipppppp",
|
|
6846
|
-
napi_get_dataview_info: _napi_get_dataview_info,
|
|
6847
|
-
napi_get_dataview_info__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
|
|
6848
|
-
napi_get_dataview_info__sig: "ipppppp",
|
|
6849
6929
|
napi_get_date_value: _napi_get_date_value,
|
|
6850
6930
|
napi_get_date_value__deps: ["$emnapiCtx"],
|
|
6851
6931
|
napi_get_date_value__sig: "ippp",
|
|
@@ -7068,15 +7148,24 @@ function _napi_get_version(env, result) {
|
|
|
7068
7148
|
napi_wrap: _napi_wrap,
|
|
7069
7149
|
napi_wrap__deps: ["$emnapiWrap"],
|
|
7070
7150
|
napi_wrap__sig: "ipppppp",
|
|
7151
|
+
node_api_create_buffer_from_arraybuffer: _node_api_create_buffer_from_arraybuffer,
|
|
7152
|
+
node_api_create_buffer_from_arraybuffer__deps: ["$emnapiCtx", "$emnapiExternalMemory"],
|
|
7153
|
+
node_api_create_buffer_from_arraybuffer__sig: "ippppp",
|
|
7071
7154
|
node_api_create_external_string_latin1: _node_api_create_external_string_latin1,
|
|
7072
7155
|
node_api_create_external_string_latin1__deps: ["$emnapiString", "napi_create_string_latin1"],
|
|
7073
7156
|
node_api_create_external_string_latin1__sig: "ippppppp",
|
|
7074
7157
|
node_api_create_external_string_utf16: _node_api_create_external_string_utf16,
|
|
7075
7158
|
node_api_create_external_string_utf16__deps: ["$emnapiString", "napi_create_string_utf16"],
|
|
7076
7159
|
node_api_create_external_string_utf16__sig: "ippppppp",
|
|
7160
|
+
node_api_create_property_key_latin1: _node_api_create_property_key_latin1,
|
|
7161
|
+
node_api_create_property_key_latin1__deps: ["napi_create_string_latin1"],
|
|
7162
|
+
node_api_create_property_key_latin1__sig: "ipppp",
|
|
7077
7163
|
node_api_create_property_key_utf16: _node_api_create_property_key_utf16,
|
|
7078
7164
|
node_api_create_property_key_utf16__deps: ["napi_create_string_utf16"],
|
|
7079
7165
|
node_api_create_property_key_utf16__sig: "ipppp",
|
|
7166
|
+
node_api_create_property_key_utf8: _node_api_create_property_key_utf8,
|
|
7167
|
+
node_api_create_property_key_utf8__deps: ["napi_create_string_utf8"],
|
|
7168
|
+
node_api_create_property_key_utf8__sig: "ipppp",
|
|
7080
7169
|
node_api_create_syntax_error: _node_api_create_syntax_error,
|
|
7081
7170
|
node_api_create_syntax_error__deps: ["$emnapiCtx"],
|
|
7082
7171
|
node_api_create_syntax_error__sig: "ipppp",
|
package/emnapi.gyp
CHANGED
|
@@ -47,6 +47,9 @@
|
|
|
47
47
|
{
|
|
48
48
|
'target_name': 'emnapi_basic',
|
|
49
49
|
'type': 'static_library',
|
|
50
|
+
'defines': [
|
|
51
|
+
'EMNAPI_DISABLE_UV'
|
|
52
|
+
],
|
|
50
53
|
'sources': [
|
|
51
54
|
'src/js_native_api.c',
|
|
52
55
|
'src/node_api.c',
|
|
@@ -99,6 +102,7 @@
|
|
|
99
102
|
'src/uv/uv-common.c',
|
|
100
103
|
'src/uv/threadpool.c',
|
|
101
104
|
'src/uv/unix/loop.c',
|
|
105
|
+
'src/uv/unix/posix-hrtime.c',
|
|
102
106
|
'src/uv/unix/thread.c',
|
|
103
107
|
'src/uv/unix/async.c',
|
|
104
108
|
'src/uv/unix/core.c',
|
package/include/node/emnapi.h
CHANGED