mirror of
https://github.com/DoneJS-Runtime/quickjs-done-nextgen.git
synced 2025-01-09 17:43:15 +00:00
Don't use rt->user_opaque in quickjs-libc.c
JS_SetRuntimeOpaque() and JS_GetRuntimeOpaque() are intended for embedders. Stop using them in quickjs-libc.c
This commit is contained in:
parent
55b829e666
commit
f641d4ff18
3 changed files with 72 additions and 27 deletions
|
@ -181,6 +181,16 @@ static BOOL my_isdigit(int c)
|
||||||
return (c >= '0' && c <= '9');
|
return (c >= '0' && c <= '9');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static JSThreadState *js_get_thread_state(JSRuntime *rt)
|
||||||
|
{
|
||||||
|
return (JSThreadState *)js_std_cmd(/*GetOpaque*/0, rt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void js_set_thread_state(JSRuntime *rt, JSThreadState *ts)
|
||||||
|
{
|
||||||
|
js_std_cmd(/*SetOpaque*/1, rt, ts);
|
||||||
|
}
|
||||||
|
|
||||||
static JSValue js_printf_internal(JSContext *ctx,
|
static JSValue js_printf_internal(JSContext *ctx,
|
||||||
int argc, JSValue *argv, FILE *fp)
|
int argc, JSValue *argv, FILE *fp)
|
||||||
{
|
{
|
||||||
|
@ -831,7 +841,7 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv)
|
int argc, JSValue *argv)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
const char *str = NULL;
|
const char *str = NULL;
|
||||||
size_t len;
|
size_t len;
|
||||||
JSValue ret, obj;
|
JSValue ret, obj;
|
||||||
|
@ -905,7 +915,7 @@ static BOOL is_stdio(FILE *f)
|
||||||
|
|
||||||
static void js_std_file_finalizer(JSRuntime *rt, JSValue val)
|
static void js_std_file_finalizer(JSRuntime *rt, JSValue val)
|
||||||
{
|
{
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSSTDFile *s = JS_GetOpaque(val, ts->std_file_class_id);
|
JSSTDFile *s = JS_GetOpaque(val, ts->std_file_class_id);
|
||||||
if (s) {
|
if (s) {
|
||||||
if (s->f && !is_stdio(s->f)) {
|
if (s->f && !is_stdio(s->f)) {
|
||||||
|
@ -939,7 +949,7 @@ static JSValue js_std_strerror(JSContext *ctx, JSValue this_val,
|
||||||
static JSValue js_new_std_file(JSContext *ctx, FILE *f, BOOL is_popen)
|
static JSValue js_new_std_file(JSContext *ctx, FILE *f, BOOL is_popen)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSSTDFile *s;
|
JSSTDFile *s;
|
||||||
JSValue obj;
|
JSValue obj;
|
||||||
obj = JS_NewObjectClass(ctx, ts->std_file_class_id);
|
obj = JS_NewObjectClass(ctx, ts->std_file_class_id);
|
||||||
|
@ -1099,7 +1109,7 @@ static JSValue js_std_printf(JSContext *ctx, JSValue this_val,
|
||||||
static FILE *js_std_file_get(JSContext *ctx, JSValue obj)
|
static FILE *js_std_file_get(JSContext *ctx, JSValue obj)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSSTDFile *s = JS_GetOpaque2(ctx, obj, ts->std_file_class_id);
|
JSSTDFile *s = JS_GetOpaque2(ctx, obj, ts->std_file_class_id);
|
||||||
if (!s)
|
if (!s)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1140,7 +1150,7 @@ static JSValue js_std_file_close(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv)
|
int argc, JSValue *argv)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSSTDFile *s = JS_GetOpaque2(ctx, this_val, ts->std_file_class_id);
|
JSSTDFile *s = JS_GetOpaque2(ctx, this_val, ts->std_file_class_id);
|
||||||
int err;
|
int err;
|
||||||
if (!s)
|
if (!s)
|
||||||
|
@ -1657,7 +1667,7 @@ static int js_std_init(JSContext *ctx, JSModuleDef *m)
|
||||||
{
|
{
|
||||||
JSValue proto;
|
JSValue proto;
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
|
|
||||||
/* FILE class */
|
/* FILE class */
|
||||||
/* the class ID is created once */
|
/* the class ID is created once */
|
||||||
|
@ -1945,7 +1955,7 @@ static JSValue js_os_rename(JSContext *ctx, JSValue this_val,
|
||||||
|
|
||||||
static BOOL is_main_thread(JSRuntime *rt)
|
static BOOL is_main_thread(JSRuntime *rt)
|
||||||
{
|
{
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
return !ts->recv_pipe;
|
return !ts->recv_pipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1976,7 +1986,7 @@ static JSValue js_os_setReadHandler(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv, int magic)
|
int argc, JSValue *argv, int magic)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSOSRWHandler *rh;
|
JSOSRWHandler *rh;
|
||||||
int fd;
|
int fd;
|
||||||
JSValue func;
|
JSValue func;
|
||||||
|
@ -2046,7 +2056,7 @@ static JSValue js_os_signal(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv)
|
int argc, JSValue *argv)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSOSSignalHandler *sh;
|
JSOSSignalHandler *sh;
|
||||||
uint32_t sig_num;
|
uint32_t sig_num;
|
||||||
JSValue func;
|
JSValue func;
|
||||||
|
@ -2128,7 +2138,7 @@ static JSValue js_os_setTimeout(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv, int magic)
|
int argc, JSValue *argv, int magic)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
int64_t delay;
|
int64_t delay;
|
||||||
JSValue func;
|
JSValue func;
|
||||||
JSOSTimer *th;
|
JSOSTimer *th;
|
||||||
|
@ -2171,7 +2181,7 @@ static JSValue js_os_clearTimeout(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv)
|
int argc, JSValue *argv)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSOSTimer *th;
|
JSOSTimer *th;
|
||||||
int64_t timer_id;
|
int64_t timer_id;
|
||||||
|
|
||||||
|
@ -2189,7 +2199,7 @@ static JSValue js_os_sleepAsync(JSContext *ctx, JSValueConst this_val,
|
||||||
int argc, JSValueConst *argv)
|
int argc, JSValueConst *argv)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
int64_t delay;
|
int64_t delay;
|
||||||
JSOSTimer *th;
|
JSOSTimer *th;
|
||||||
JSValue promise, resolving_funcs[2];
|
JSValue promise, resolving_funcs[2];
|
||||||
|
@ -2228,7 +2238,7 @@ static int call_handler(JSContext *ctx, JSValue func)
|
||||||
r = 0;
|
r = 0;
|
||||||
if (JS_IsException(ret)) {
|
if (JS_IsException(ret)) {
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
ts->exc = JS_GetException(ctx);
|
ts->exc = JS_GetException(ctx);
|
||||||
r = -1;
|
r = -1;
|
||||||
}
|
}
|
||||||
|
@ -2278,7 +2288,7 @@ static int js_os_run_timers(JSRuntime *rt, JSContext *ctx, JSThreadState *ts, in
|
||||||
static int js_os_poll(JSContext *ctx)
|
static int js_os_poll(JSContext *ctx)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
int min_delay, console_fd;
|
int min_delay, console_fd;
|
||||||
JSOSRWHandler *rh;
|
JSOSRWHandler *rh;
|
||||||
struct list_head *el;
|
struct list_head *el;
|
||||||
|
@ -2407,7 +2417,7 @@ static int handle_posted_message(JSRuntime *rt, JSContext *ctx,
|
||||||
static int js_os_poll(JSContext *ctx)
|
static int js_os_poll(JSContext *ctx)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
int ret, fd_max, min_delay;
|
int ret, fd_max, min_delay;
|
||||||
fd_set rfds, wfds;
|
fd_set rfds, wfds;
|
||||||
JSOSRWHandler *rh;
|
JSOSRWHandler *rh;
|
||||||
|
@ -3415,7 +3425,7 @@ static void js_free_port(JSRuntime *rt, JSWorkerMessageHandler *port)
|
||||||
|
|
||||||
static void js_worker_finalizer(JSRuntime *rt, JSValue val)
|
static void js_worker_finalizer(JSRuntime *rt, JSValue val)
|
||||||
{
|
{
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSWorkerData *worker = JS_GetOpaque(val, ts->worker_class_id);
|
JSWorkerData *worker = JS_GetOpaque(val, ts->worker_class_id);
|
||||||
if (worker) {
|
if (worker) {
|
||||||
js_free_message_pipe(worker->recv_pipe);
|
js_free_message_pipe(worker->recv_pipe);
|
||||||
|
@ -3448,7 +3458,7 @@ static void *worker_func(void *opaque)
|
||||||
JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL);
|
JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL);
|
||||||
|
|
||||||
/* set the pipe to communicate with the parent */
|
/* set the pipe to communicate with the parent */
|
||||||
ts = JS_GetRuntimeOpaque(rt);
|
ts = js_get_thread_state(rt);
|
||||||
ts->recv_pipe = args->recv_pipe;
|
ts->recv_pipe = args->recv_pipe;
|
||||||
ts->send_pipe = args->send_pipe;
|
ts->send_pipe = args->send_pipe;
|
||||||
|
|
||||||
|
@ -3485,7 +3495,7 @@ static JSValue js_worker_ctor_internal(JSContext *ctx, JSValue new_target,
|
||||||
JSWorkerMessagePipe *send_pipe)
|
JSWorkerMessagePipe *send_pipe)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSValue obj = JS_UNDEFINED, proto;
|
JSValue obj = JS_UNDEFINED, proto;
|
||||||
JSWorkerData *s;
|
JSWorkerData *s;
|
||||||
|
|
||||||
|
@ -3602,7 +3612,7 @@ static JSValue js_worker_postMessage(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv)
|
int argc, JSValue *argv)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, ts->worker_class_id);
|
JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, ts->worker_class_id);
|
||||||
JSWorkerMessagePipe *ps;
|
JSWorkerMessagePipe *ps;
|
||||||
size_t data_len, i;
|
size_t data_len, i;
|
||||||
|
@ -3681,7 +3691,7 @@ static JSValue js_worker_set_onmessage(JSContext *ctx, JSValue this_val,
|
||||||
JSValue func)
|
JSValue func)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, ts->worker_class_id);
|
JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, ts->worker_class_id);
|
||||||
JSWorkerMessageHandler *port;
|
JSWorkerMessageHandler *port;
|
||||||
|
|
||||||
|
@ -3715,7 +3725,7 @@ static JSValue js_worker_set_onmessage(JSContext *ctx, JSValue this_val,
|
||||||
static JSValue js_worker_get_onmessage(JSContext *ctx, JSValue this_val)
|
static JSValue js_worker_get_onmessage(JSContext *ctx, JSValue this_val)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, ts->worker_class_id);
|
JSWorkerData *worker = JS_GetOpaque2(ctx, this_val, ts->worker_class_id);
|
||||||
JSWorkerMessageHandler *port;
|
JSWorkerMessageHandler *port;
|
||||||
if (!worker)
|
if (!worker)
|
||||||
|
@ -3862,7 +3872,7 @@ static const JSCFunctionListEntry js_os_funcs[] = {
|
||||||
static int js_os_init(JSContext *ctx, JSModuleDef *m)
|
static int js_os_init(JSContext *ctx, JSModuleDef *m)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
|
|
||||||
ts->can_js_os_poll = TRUE;
|
ts->can_js_os_poll = TRUE;
|
||||||
|
|
||||||
|
@ -3989,6 +3999,13 @@ void js_std_add_helpers(JSContext *ctx, int argc, char **argv)
|
||||||
JS_FreeValue(ctx, global_obj);
|
JS_FreeValue(ctx, global_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void js_std_finalize(JSRuntime *rt, void *arg)
|
||||||
|
{
|
||||||
|
JSThreadState *ts = arg;
|
||||||
|
js_set_thread_state(rt, NULL);
|
||||||
|
js_free_rt(rt, ts);
|
||||||
|
}
|
||||||
|
|
||||||
void js_std_init_handlers(JSRuntime *rt)
|
void js_std_init_handlers(JSRuntime *rt)
|
||||||
{
|
{
|
||||||
JSThreadState *ts;
|
JSThreadState *ts;
|
||||||
|
@ -4006,8 +4023,8 @@ void js_std_init_handlers(JSRuntime *rt)
|
||||||
ts->next_timer_id = 1;
|
ts->next_timer_id = 1;
|
||||||
ts->exc = JS_UNDEFINED;
|
ts->exc = JS_UNDEFINED;
|
||||||
|
|
||||||
JS_SetRuntimeOpaque(rt, ts);
|
js_set_thread_state(rt, ts);
|
||||||
JS_AddRuntimeFinalizer(rt, js_free_rt, ts);
|
JS_AddRuntimeFinalizer(rt, js_std_finalize, ts);
|
||||||
|
|
||||||
#ifdef USE_WORKER
|
#ifdef USE_WORKER
|
||||||
/* set the SharedArrayBuffer memory handlers */
|
/* set the SharedArrayBuffer memory handlers */
|
||||||
|
@ -4024,7 +4041,7 @@ void js_std_init_handlers(JSRuntime *rt)
|
||||||
|
|
||||||
void js_std_free_handlers(JSRuntime *rt)
|
void js_std_free_handlers(JSRuntime *rt)
|
||||||
{
|
{
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
struct list_head *el, *el1;
|
struct list_head *el, *el1;
|
||||||
|
|
||||||
list_for_each_safe(el, el1, &ts->os_rw_handlers) {
|
list_for_each_safe(el, el1, &ts->os_rw_handlers) {
|
||||||
|
@ -4101,7 +4118,7 @@ void js_std_promise_rejection_tracker(JSContext *ctx, JSValue promise,
|
||||||
JSValue js_std_loop(JSContext *ctx)
|
JSValue js_std_loop(JSContext *ctx)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSContext *ctx1;
|
JSContext *ctx1;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -4131,7 +4148,7 @@ done:
|
||||||
JSValue js_std_await(JSContext *ctx, JSValue obj)
|
JSValue js_std_await(JSContext *ctx, JSValue obj)
|
||||||
{
|
{
|
||||||
JSRuntime *rt = JS_GetRuntime(ctx);
|
JSRuntime *rt = JS_GetRuntime(ctx);
|
||||||
JSThreadState *ts = JS_GetRuntimeOpaque(rt);
|
JSThreadState *ts = js_get_thread_state(rt);
|
||||||
JSValue ret;
|
JSValue ret;
|
||||||
int state;
|
int state;
|
||||||
|
|
||||||
|
|
25
quickjs.c
25
quickjs.c
|
@ -298,6 +298,7 @@ struct JSRuntime {
|
||||||
JSShape **shape_hash;
|
JSShape **shape_hash;
|
||||||
bf_context_t bf_ctx;
|
bf_context_t bf_ctx;
|
||||||
void *user_opaque;
|
void *user_opaque;
|
||||||
|
void *libc_opaque;
|
||||||
JSRuntimeFinalizerState *finalizers;
|
JSRuntimeFinalizerState *finalizers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -55424,6 +55425,30 @@ BOOL JS_DetectModule(const char *input, size_t input_len)
|
||||||
return is_module;
|
return is_module;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uintptr_t js_std_cmd(int cmd, ...) {
|
||||||
|
JSRuntime *rt;
|
||||||
|
uintptr_t rv;
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
rv = 0;
|
||||||
|
va_start(ap, cmd);
|
||||||
|
switch (cmd) {
|
||||||
|
case 0: // GetOpaque
|
||||||
|
rt = va_arg(ap, JSRuntime *);
|
||||||
|
rv = (uintptr_t)rt->libc_opaque;
|
||||||
|
break;
|
||||||
|
case 1: // SetOpaque
|
||||||
|
rt = va_arg(ap, JSRuntime *);
|
||||||
|
rt->libc_opaque = va_arg(ap, void *);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
rv = -1;
|
||||||
|
}
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
#undef malloc
|
#undef malloc
|
||||||
#undef free
|
#undef free
|
||||||
#undef realloc
|
#undef realloc
|
||||||
|
|
|
@ -1031,6 +1031,9 @@ JS_EXTERN int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m,
|
||||||
|
|
||||||
JS_EXTERN const char* JS_GetVersion(void);
|
JS_EXTERN const char* JS_GetVersion(void);
|
||||||
|
|
||||||
|
/* Integration point for quickjs-libc.c, not for public use. */
|
||||||
|
JS_EXTERN uintptr_t js_std_cmd(int cmd, ...);
|
||||||
|
|
||||||
#undef JS_EXTERN
|
#undef JS_EXTERN
|
||||||
#undef js_force_inline
|
#undef js_force_inline
|
||||||
#undef __js_printf_like
|
#undef __js_printf_like
|
||||||
|
|
Loading…
Reference in a new issue