| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #pragma once
- #include "quickjs-libc.h"
- #include "quickjs.h"
- #include <stdbool.h>
- #include <string.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))
|