2024-08-22 23:07:22 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
2025-03-11 10:30:34 +01:00
|
|
|
#include "quickjs-libc.h"
|
2025-10-15 13:06:40 +02:00
|
|
|
#include "quickjs.h"
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
#include <string.h>
|
2024-08-22 23:07:22 +02:00
|
|
|
|
|
|
|
|
extern JSRuntime *js_runtime;
|
|
|
|
|
extern JSContext *js_ctx;
|
2025-10-15 13:06:40 +02:00
|
|
|
float js_eval(const char *s);
|
|
|
|
|
char *js_call(void *p);
|
|
|
|
|
JSValue js_call_arg(void *p, int argc, void *argv);
|
2024-08-22 23:07:22 +02:00
|
|
|
|
|
|
|
|
// ██████╗ ███████╗███████╗██╗███╗ ██╗███████╗███████╗
|
|
|
|
|
// ██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝██╔════╝
|
|
|
|
|
// ██║ ██║█████╗ █████╗ ██║██╔██╗ ██║█████╗ ███████╗
|
|
|
|
|
// ██║ ██║██╔══╝ ██╔══╝ ██║██║╚██╗██║██╔══╝ ╚════██║
|
|
|
|
|
// ██████╔╝███████╗██║ ██║██║ ╚████║███████╗███████║
|
|
|
|
|
// ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝
|
|
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define FN(name) static JSValue js_##name(JSContext *ctx, JSValue this_val, int argc, JSValue *argv)
|
2024-08-22 23:07:22 +02:00
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define VOID_FN(name) \
|
|
|
|
|
void name(); \
|
|
|
|
|
FN(name) { \
|
|
|
|
|
name(); \
|
|
|
|
|
return JS_UNDEFINED; \
|
|
|
|
|
}
|
2024-08-22 23:07:22 +02:00
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define PTR_FN(name) \
|
|
|
|
|
void *name(); \
|
|
|
|
|
FN(name) { \
|
|
|
|
|
uint64_t result = (uint64_t)name(); \
|
|
|
|
|
return JS_NewBigUint64(ctx, result); \
|
|
|
|
|
}
|
2024-08-22 23:07:22 +02:00
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define VOID_FN_STR(name) \
|
|
|
|
|
void name(char *s); \
|
|
|
|
|
FN(name) { \
|
|
|
|
|
char *s = (char *)JS_ToCString(ctx, argv[0]); \
|
|
|
|
|
name(s); \
|
|
|
|
|
return JS_UNDEFINED; \
|
|
|
|
|
}
|
2024-08-22 23:07:22 +02:00
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define VOID_FN_PTR_STR(name) \
|
|
|
|
|
void name(void *p, char *s); \
|
|
|
|
|
FN(name) { \
|
|
|
|
|
uint64_t p; \
|
|
|
|
|
JS_ToBigUint64(ctx, &p, argv[0]); \
|
|
|
|
|
char *s = (char *)JS_ToCString(ctx, argv[1]); \
|
|
|
|
|
name((void *)p, s); \
|
|
|
|
|
return JS_UNDEFINED; \
|
|
|
|
|
}
|
2024-08-22 23:07:22 +02:00
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define VOID_FN_CB(name) \
|
|
|
|
|
void name(void *p); \
|
|
|
|
|
FN(name) { \
|
|
|
|
|
JSValue dup = JS_DupValue(ctx, argv[0]); \
|
|
|
|
|
if (JS_IsNull(dup)) { \
|
|
|
|
|
name(NULL); \
|
|
|
|
|
return JS_UNDEFINED; \
|
|
|
|
|
} \
|
|
|
|
|
JSValue *p = malloc(sizeof(JSValue)); \
|
|
|
|
|
memcpy(p, &dup, sizeof(JSValue)); \
|
|
|
|
|
name(p); \
|
|
|
|
|
return JS_UNDEFINED; \
|
|
|
|
|
}
|
2024-08-22 23:07:22 +02:00
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define VOID_FN_PTR_CB(name) \
|
|
|
|
|
void name(void *p0, void *p1); \
|
|
|
|
|
FN(name) { \
|
|
|
|
|
uint64_t p0; \
|
|
|
|
|
JS_ToBigUint64(ctx, &p0, argv[0]); \
|
|
|
|
|
JSValue *p1 = malloc(sizeof(JSValue)); \
|
|
|
|
|
JSValue dup = JS_DupValue(ctx, argv[1]); \
|
|
|
|
|
memcpy(p1, &dup, sizeof(JSValue)); \
|
|
|
|
|
name((void *)p0, p1); \
|
|
|
|
|
return JS_UNDEFINED; \
|
|
|
|
|
}
|
2024-08-22 23:07:22 +02:00
|
|
|
|
2025-10-15 13:06:40 +02:00
|
|
|
#define BIND(name, argc) JS_SetPropertyStr(js_ctx, global_obj, #name, JS_NewCFunction(js_ctx, js_##name, #name, argc))
|