Skip to content

Commit ba10d44

Browse files
authored
update node-api (#1)
1 parent 78b91d3 commit ba10d44

File tree

165 files changed

+20954
-23070
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+20954
-23070
lines changed

NativeScript/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ if(ENABLE_JS_RUNTIME)
168168

169169
elseif(TARGET_ENGINE_QUICKJS)
170170
set(MI_BUILD_OBJECT OFF)
171+
set(MI_OVERRIDE OFF)
171172
add_subdirectory(napi/quickjs/mimalloc-dev mimalloc)
172173

173174
include_directories(
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#ifndef CONCURRENT_MAP_H
2+
#define CONCURRENT_MAP_H
3+
4+
#include "spinmutex.h"
5+
#include "mutex"
6+
#include "robin_hood.h"
7+
8+
namespace tns {
9+
template<class TKey, class TValue>
10+
class SimpleMap {
11+
public:
12+
inline void Insert(TKey &key, TValue value) {
13+
this->container_[key] = value;
14+
}
15+
16+
inline TValue Get(TKey &key) {
17+
bool found;
18+
return this->Get(key, found);
19+
}
20+
21+
inline TValue Get(TKey &key, bool &found) {
22+
auto it = this->container_.find(key);
23+
found = it != this->container_.end();
24+
if (found) {
25+
return it->second;
26+
}
27+
return nullptr;
28+
}
29+
30+
inline bool ContainsKey(TKey &key) {
31+
auto it = this->container_.find(key);
32+
return it != this->container_.end();
33+
}
34+
35+
inline void Remove(TKey &key) {
36+
this->container_.erase(key);
37+
}
38+
39+
inline void ForEach(const std::function<bool(TKey &, TValue &)> &func) {
40+
for (auto i: this->container_) {
41+
if (func(i.first, i.second)) {
42+
break;
43+
}
44+
}
45+
}
46+
47+
SimpleMap() = default;
48+
49+
SimpleMap(const SimpleMap &) = delete;
50+
51+
SimpleMap &operator=(const SimpleMap &) = delete;
52+
53+
private:
54+
robin_hood::unordered_map<TKey, TValue> container_;
55+
};
56+
57+
template<class TKey, class TValue>
58+
class ConcurrentMap {
59+
public:
60+
inline void Insert(TKey &key, TValue value) {
61+
62+
std::lock_guard<mz::spin_mutex> writerLock(this->containerMutex_);
63+
64+
this->container_[key] = value;
65+
}
66+
67+
inline TValue Get(TKey &key) {
68+
bool found;
69+
return this->Get(key, found);
70+
}
71+
72+
inline TValue Get(TKey &key, bool &found) {
73+
std::lock_guard<mz::spin_mutex> writerLock(this->containerMutex_);
74+
auto it = this->container_.find(key);
75+
found = it != this->container_.end();
76+
if (found) {
77+
return it->second;
78+
}
79+
return nullptr;
80+
}
81+
82+
inline bool ContainsKey(TKey &key) {
83+
std::lock_guard<mz::spin_mutex> writerLock(this->containerMutex_);
84+
auto it = this->container_.find(key);
85+
return it != this->container_.end();
86+
}
87+
88+
inline void Remove(TKey &key) {
89+
std::lock_guard<mz::spin_mutex> writerLock(this->containerMutex_);
90+
this->container_.erase(key);
91+
}
92+
93+
inline void ForEach(const std::function<bool(TKey &, TValue &)> &func) {
94+
std::lock_guard<mz::spin_mutex> writerLock(this->containerMutex_);
95+
for (auto i: this->container_) {
96+
if (func(i.first, i.second)) {
97+
break;
98+
}
99+
}
100+
}
101+
102+
ConcurrentMap() = default;
103+
104+
ConcurrentMap(const ConcurrentMap &) = delete;
105+
106+
ConcurrentMap &operator=(const ConcurrentMap &) = delete;
107+
108+
private:
109+
mz::spin_mutex containerMutex_;
110+
robin_hood::unordered_map<TKey, TValue> container_;
111+
};
112+
}
113+
114+
#endif

NativeScript/napi/quickjs/js_native_api.h renamed to NativeScript/napi/common/js_native_api.h

Lines changed: 33 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ EXTERN_C_START
1414
#include <stdint.h> // NOLINT(modernize-deprecated-headers)
1515

1616
#define NAPI_AUTO_LENGTH SIZE_MAX
17-
17+
#define NAPI_VERSION_EXPERIMENTAL 2147483647
1818
#define NAPI_VERSION 8
1919

2020
NAPI_EXTERN napi_status napi_get_last_error_info(napi_env env, const napi_extended_error_info **result);
@@ -50,7 +50,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_create_int64(napi_env env,
5050
int64_t value,
5151
napi_value *result);
5252
NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_latin1(
53-
napi_env env, const char *str, size_t length, napi_value *result);
53+
napi_env env, const char *str, size_t length, napi_value *result);
5454
NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf8(napi_env env,
5555
const char *str,
5656
size_t length,
@@ -110,11 +110,11 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bool(napi_env env,
110110

111111
// Copies LATIN-1 encoded bytes from a string into a buffer.
112112
NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_latin1(
113-
napi_env env, napi_value value, char *buf, size_t bufsize, size_t *result);
113+
napi_env env, napi_value value, char *buf, size_t bufsize, size_t *result);
114114

115115
// Copies UTF-8 encoded bytes from a string into a buffer.
116116
NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf8(
117-
napi_env env, napi_value value, char *str, size_t length, size_t *result);
117+
napi_env env, napi_value value, char *str, size_t length, size_t *result);
118118

119119
// Copies UTF-16 encoded bytes from a string into a buffer.
120120
NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_string_utf16(napi_env env,
@@ -241,16 +241,16 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_instanceof(napi_env env,
241241

242242
// Gets all callback info in a single call. (Ugly, but faster.)
243243
NAPI_EXTERN napi_status NAPI_CDECL napi_get_cb_info(
244-
napi_env env, // [in] NAPI environment handle
245-
napi_callback_info cbinfo, // [in] Opaque callback-info handle
246-
size_t *argc, // [in-out] Specifies the size of the provided argv array
247-
// and receives the actual count of args.
248-
napi_value *argv, // [out] Array of values
249-
napi_value *this_arg, // [out] Receives the JS 'this' arg for the call
250-
void **data); // [out] Receives the data pointer for the callback.
244+
napi_env env, // [in] NAPI environment handle
245+
napi_callback_info cbinfo, // [in] Opaque callback-info handle
246+
size_t *argc, // [in-out] Specifies the size of the provided argv array
247+
// and receives the actual count of args.
248+
napi_value *argv, // [out] Array of values
249+
napi_value *this_arg, // [out] Receives the JS 'this' arg for the call
250+
void **data); // [out] Receives the data pointer for the callback.
251251

252252
NAPI_EXTERN napi_status NAPI_CDECL napi_get_new_target(
253-
napi_env env, napi_callback_info cbinfo, napi_value *result);
253+
napi_env env, napi_callback_info cbinfo, napi_value *result);
254254
NAPI_EXTERN napi_status NAPI_CDECL
255255
napi_define_class(napi_env env,
256256
const char *utf8name,
@@ -327,9 +327,9 @@ napi_open_handle_scope(napi_env env, napi_handle_scope *result);
327327
NAPI_EXTERN napi_status NAPI_CDECL
328328
napi_close_handle_scope(napi_env env, napi_handle_scope scope);
329329
NAPI_EXTERN napi_status NAPI_CDECL napi_open_escapable_handle_scope(
330-
napi_env env, napi_escapable_handle_scope *result);
330+
napi_env env, napi_escapable_handle_scope *result);
331331
NAPI_EXTERN napi_status NAPI_CDECL napi_close_escapable_handle_scope(
332-
napi_env env, napi_escapable_handle_scope scope);
332+
napi_env env, napi_escapable_handle_scope scope);
333333

334334
NAPI_EXTERN napi_status NAPI_CDECL
335335
napi_escape_handle(napi_env env,
@@ -376,7 +376,7 @@ napi_create_external_arraybuffer(napi_env env,
376376
napi_value *result);
377377
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
378378
NAPI_EXTERN napi_status NAPI_CDECL napi_get_arraybuffer_info(
379-
napi_env env, napi_value arraybuffer, void **data, size_t *byte_length);
379+
napi_env env, napi_value arraybuffer, void **data, size_t *byte_length);
380380
NAPI_EXTERN napi_status NAPI_CDECL napi_is_typedarray(napi_env env,
381381
napi_value value,
382382
bool *result);
@@ -432,12 +432,17 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_is_promise(napi_env env,
432432

433433
// Running a script
434434
NAPI_EXTERN napi_status NAPI_CDECL napi_run_script(napi_env env,
435-
napi_value script,
436-
napi_value *result);
435+
napi_value script,
436+
napi_value *result);
437+
438+
NAPI_EXTERN napi_status NAPI_CDECL napi_run_script_source(napi_env env,
439+
napi_value script,
440+
const char* source_url,
441+
napi_value* result);
437442

438443
// Memory management
439444
NAPI_EXTERN napi_status NAPI_CDECL napi_adjust_external_memory(
440-
napi_env env, int64_t change_in_bytes, int64_t *adjusted_value);
445+
napi_env env, int64_t change_in_bytes, int64_t *adjusted_value);
441446

442447
#if NAPI_VERSION >= 5
443448

@@ -457,7 +462,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_get_date_value(napi_env env,
457462
// Add finalizer for pointer
458463
NAPI_EXTERN napi_status NAPI_CDECL napi_add_finalizer(napi_env env,
459464
napi_value js_object,
460-
void *finalize_data,
465+
void *native_object,
461466
napi_finalize finalize_cb,
462467
void *finalize_hint,
463468
napi_ref *result);
@@ -483,7 +488,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_int64(napi_env env,
483488
int64_t *result,
484489
bool *lossless);
485490
NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_bigint_uint64(
486-
napi_env env, napi_value value, uint64_t *result, bool *lossless);
491+
napi_env env, napi_value value, uint64_t *result, bool *lossless);
487492
NAPI_EXTERN napi_status NAPI_CDECL
488493
napi_get_value_bigint_words(napi_env env,
489494
napi_value value,
@@ -502,7 +507,7 @@ napi_get_all_property_names(napi_env env,
502507

503508
// Instance data
504509
NAPI_EXTERN napi_status NAPI_CDECL napi_set_instance_data(
505-
napi_env env, void *data, napi_finalize finalize_cb, void *finalize_hint);
510+
napi_env env, void *data, napi_finalize finalize_cb, void *finalize_hint);
506511

507512
NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(napi_env env,
508513
void **data);
@@ -520,7 +525,7 @@ napi_is_detached_arraybuffer(napi_env env, napi_value value, bool *result);
520525
#if NAPI_VERSION >= 8
521526
// Type tagging
522527
NAPI_EXTERN napi_status NAPI_CDECL napi_type_tag_object(
523-
napi_env env, napi_value value, const napi_type_tag *type_tag);
528+
napi_env env, napi_value value, const napi_type_tag *type_tag);
524529

525530
NAPI_EXTERN napi_status NAPI_CDECL
526531
napi_check_object_type_tag(napi_env env,
@@ -532,30 +537,15 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_object_freeze(napi_env env,
532537
NAPI_EXTERN napi_status NAPI_CDECL napi_object_seal(napi_env env,
533538
napi_value object);
534539

535-
NAPI_EXTERN napi_status NAPI_CDECL napi_is_float(napi_env env, napi_value value, bool *result);
536-
#endif // NAPI_VERSION >= 8
537-
538-
NAPI_EXTERN napi_status NAPI_CDECL qjs_create_runtime(napi_runtime *runtime);
539-
540-
NAPI_EXTERN napi_status NAPI_CDECL qjs_create_napi_env(napi_env *env, napi_runtime runtime);
541-
542-
NAPI_EXTERN napi_status NAPI_CDECL qjs_free_napi_env(napi_env env);
540+
#ifdef USE_HOST_OBJECT
541+
NAPI_EXTERN napi_status NAPI_CDECL napi_create_host_object(napi_env env, napi_value value, napi_finalize finalize, void* data, bool is_array, napi_value getter, napi_value setter, napi_value* result);
543542

544-
NAPI_EXTERN napi_status NAPI_CDECL qjs_free_runtime(napi_runtime runtime);
543+
NAPI_EXTERN napi_status NAPI_CDECL napi_get_host_object_data(napi_env env, napi_value object, void** data);
545544

546-
NAPI_EXTERN napi_status NAPI_CDECL qjs_execute_script(napi_env env,
547-
napi_value script,
548-
const char *file,
549-
napi_value *result);
550-
551-
NAPI_EXTERN napi_status NAPI_CDECL qjs_runtime_before_gc_callback(napi_env env, napi_finalize cb, void *data);
552-
553-
NAPI_EXTERN napi_status NAPI_CDECL qjs_runtime_after_gc_callback(napi_env env, napi_finalize cb, void *data);
554-
555-
556-
NAPI_EXTERN napi_status NAPI_CDECL qjs_execute_pending_jobs(napi_env env);
545+
NAPI_EXTERN napi_status NAPI_CDECL napi_is_host_object(napi_env env, napi_value object, bool* result);
546+
#endif
557547

558-
NAPI_EXTERN napi_status NAPI_CDECL qjs_update_stack_top(napi_env env);
548+
#endif // NAPI_VERSION >= 8
559549

560550
EXTERN_C_END
561551

NativeScript/napi/quickjs/js_native_api_types.h renamed to NativeScript/napi/common/js_native_api_types.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,14 @@ extern "C"
2525

2626
EXTERN_C_START
2727

28-
/**
29-
Opaque pointer to the QuickJS Runtime
30-
*/
31-
typedef struct NapiRuntime *napi_runtime;
32-
typedef struct NapiEnvironment *napi_env;
33-
typedef void * napi_value;
34-
typedef struct NapiReference *napi_ref;
35-
typedef struct NapiHandleScope *napi_handle_scope;
36-
typedef struct NapiHandleScope *napi_escapable_handle_scope;
37-
typedef struct NapiCallbackInfo *napi_callback_info;
38-
typedef struct NapiDeferred* napi_deferred;
28+
typedef struct napi_runtime__ *napi_runtime;
29+
typedef struct napi_env__ *napi_env;
30+
typedef struct napi_value__ *napi_value;
31+
typedef struct napi_ref__ *napi_ref;
32+
typedef struct napi_handle_scope__ *napi_handle_scope;
33+
typedef struct napi_handle_scope__ *napi_escapable_handle_scope;
34+
typedef struct napi_callback_info__ *napi_callback_info;
35+
typedef struct napi_deferred__* napi_deferred;
3936

4037

4138
typedef enum

NativeScript/napi/common/napi.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@
2828
#endif
2929
#endif
3030

31-
#ifdef NODE_ADDON_API_DISABLE_NODE_SPECIFIC
3231
#include "js_native_api.h"
33-
#endif
3432

3533
#include <functional>
3634
#include <initializer_list>

NativeScript/napi/common/native_api_util.h

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
#include <dlfcn.h>
66
#include <sstream>
77

8-
#define NAPI_EXPORT __attribute__((visibility("default")))
9-
108
#ifndef NAPI_PREAMBLE
119
#define NAPI_PREAMBLE napi_status status;
1210
#endif
@@ -74,9 +72,6 @@
7472

7573
#endif
7674

77-
#define NAPI_MODULE_REGISTER \
78-
napi_value napi_register_module_v1(napi_env env, napi_value exports)
79-
8075
#define NAPI_FUNCTION(name) \
8176
napi_value JS_##name(napi_env env, napi_callback_info cbinfo)
8277

@@ -313,20 +308,13 @@ namespace napi_util {
313308
}
314309

315310
inline bool is_float(napi_env env, napi_value value) {
316-
317-
#ifdef __QJS__
318-
bool result;
319-
napi_is_float(env, value, &result);
320-
return result;
321-
#else
322311
napi_value global, number, is_int, result;
323312
napi_get_global(env, &global);
324313
napi_get_named_property(env, global, "Number", &number);
325314
napi_get_named_property(env, number, "isInteger", &is_int);
326315
napi_call_function(env, number, is_int, 1, &value, &result);
327316

328-
return napi_util::get_bool(env, result) == false;
329-
#endif
317+
return !napi_util::get_bool(env, result);
330318
}
331319

332320
// Same as Object.create()`

0 commit comments

Comments
 (0)