This commit is contained in:
2026-02-23 18:08:13 -06:00
parent a34566a0c1
commit 4da15d2a3e
16 changed files with 408 additions and 592 deletions

View File

@@ -1,13 +1,11 @@
#include "cell.h"
#include "cell_internal.h"
#include "quickjs-internal.h"
#include "pit_internal.h"
#include <stdlib.h>
#include <string.h>
JSC_CCALL(os_createactor,
cell_rt *rt = JS_GetContextOpaque(js);
if (rt->disrupt)
if (js->disrupt)
return JS_RaiseDisrupt(js, "Can't start a new actor while disrupting.");
void *startup = value2wota(js, argv[0], JS_NULL, NULL);
@@ -57,14 +55,12 @@ JSC_CCALL(os_mailbox_push,
)
JSC_CCALL(os_register_actor,
cell_rt *rt = JS_GetContextOpaque(js);
const char *id = JS_ToCString(js, argv[0]);
double ar;
JS_ToFloat64(js, &ar, argv[3]);
const char *err = register_actor(id, rt, JS_ToBool(js, argv[2]), ar);
const char *err = register_actor(id, js, JS_ToBool(js, argv[2]), ar);
if (err) return JS_RaiseDisrupt(js, "Could not register actor: %s", err);
rt->message_handle_ref.val = argv[1];
rt->context = js;
js->message_handle_ref.val = argv[1];
JS_FreeCString(js, id);
)
@@ -77,56 +73,49 @@ JSC_CCALL(os_mailbox_exist,
)
JSC_CCALL(os_unneeded,
cell_rt *actor = JS_GetContextOpaque(js);
double secs;
JS_ToFloat64(js, &secs, argv[1]);
actor_unneeded(actor, argv[0], secs);
actor_unneeded(js, argv[0], secs);
)
JSC_CCALL(actor_disrupt,
cell_rt *crt = JS_GetContextOpaque(js);
actor_disrupt(crt);
actor_disrupt(js);
)
JSC_SCALL(actor_setname,
cell_rt *rt = JS_GetContextOpaque(js);
rt->name = strdup(str);
js->name = strdup(str);
)
JSC_CCALL(actor_on_exception,
cell_rt *rt = JS_GetContextOpaque(js);
rt->on_exception_ref.val = argv[0];
js->on_exception_ref.val = argv[0];
)
JSC_CCALL(actor_clock,
if (!JS_IsFunction(argv[0]))
return JS_RaiseDisrupt(js, "Argument must be a function.");
cell_rt *actor = JS_GetContextOpaque(js);
actor_clock(actor, argv[0]);
actor_clock(js, argv[0]);
)
JSC_CCALL(actor_delay,
if (!JS_IsFunction(argv[0]))
return JS_RaiseDisrupt(js, "Argument must be a function.");
cell_rt *actor = JS_GetContextOpaque(js);
double seconds;
JS_ToFloat64(js, &seconds, argv[1]);
if (seconds <= 0) {
actor_clock(actor, argv[0]);
actor_clock(js, argv[0]);
return JS_NULL;
}
uint32_t id = actor_delay(actor, argv[0], seconds);
uint32_t id = actor_delay(js, argv[0], seconds);
return JS_NewUint32(js, id);
)
JSC_CCALL(actor_removetimer,
cell_rt *actor = JS_GetContextOpaque(js);
uint32_t timer_id;
JS_ToUint32(js, &timer_id, argv[0]);
(void)actor_remove_timer(actor, timer_id);
(void)actor_remove_timer(js, timer_id);
)
/* Log callback bridge: called from JS_Log, calls ƿit log(channel, [msg, stack])