| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #pragma once
- #include <string.h>
- #include <stdbool.h>
- #include "quickjs.h"
- #include "quickjs-libc.h"
- extern JSRuntime *js_runtime;
- extern JSContext *js_ctx;
- float js_eval(const char *s);
- char *js_call(void *p);
- JSValue js_call_arg(void *p, int argc, void *argv);
- // ██████╗ ███████╗███████╗██╗███╗ ██╗███████╗███████╗
- // ██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝██╔════╝
- // ██║ ██║█████╗ █████╗ ██║██╔██╗ ██║█████╗ ███████╗
- // ██║ ██║██╔══╝ ██╔══╝ ██║██║╚██╗██║██╔══╝ ╚════██║
- // ██████╔╝███████╗██║ ██║██║ ╚████║███████╗███████║
- // ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝
- #define FN(name)\
- static JSValue js_##name(JSContext *ctx, JSValue this_val, int argc, JSValue *argv)
- #define VOID_FN(name)\
- void name();\
- FN(name) {\
- name();\
- return JS_UNDEFINED;\
- }
- #define PTR_FN(name)\
- void *name();\
- FN(name) {\
- uint64_t result = (uint64_t)name();\
- return JS_NewBigUint64(ctx, result);\
- }
- #define VOID_FN_STR(name)\
- void name(char *s);\
- FN(name) {\
- char *s = (char *)JS_ToCString(ctx, argv[0]);\
- name(s);\
- return JS_UNDEFINED;\
- }
- #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;\
- }
- #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;\
- }
- #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;\
- }
- #define BIND(name, argc)\
- JS_SetPropertyStr(js_ctx, global_obj, #name, JS_NewCFunction(js_ctx, js_##name, #name, argc))
|