Merge branch 'fix_log_err'

This commit is contained in:
2026-02-25 23:30:36 -06:00

View File

@@ -313,6 +313,26 @@ void actor_disrupt(JSContext *ctx)
JSValue js_core_internal_os_use(JSContext *js);
JSValue js_core_json_use(JSContext *js);
/* Engine-env log proxy: routes log("channel", [msg]) through JS_Log.
Before set_log is called, JS_Log falls back to stderr.
After set_log, JS_Log forwards to the engine's JS log function.
This exists so mcode-generated type-check error paths (which always
access 'log' as an intrinsic) work inside engine.cm itself. */
static JSValue js_engine_log(JSContext *js, JSValue self,
int argc, JSValue *argv) {
if (argc < 2) return JS_NULL;
const char *channel = JS_ToCString(js, argv[0]);
if (!channel) return JS_NULL;
JSValue msg_val = JS_GetPropertyNumber(js, argv[1], 0);
const char *msg = JS_ToCString(js, msg_val);
if (msg) {
JS_Log(js, channel, "%s", msg);
JS_FreeCString(js, msg);
}
JS_FreeCString(js, channel);
return JS_NULL;
}
void script_startup(JSContext *js)
{
if (!g_runtime) {
@@ -414,6 +434,8 @@ void script_startup(JSContext *js)
}
tmp = shop_path ? JS_NewString(js, shop_path) : JS_NULL;
JS_SetPropertyStr(js, env_ref.val, "shop_path", tmp);
tmp = JS_NewCFunction(js, js_engine_log, "log", 2);
JS_SetPropertyStr(js, env_ref.val, "log", tmp);
// Stone the environment
JSValue hidden_env = JS_Stone(js, env_ref.val);
@@ -761,6 +783,8 @@ int cell_init(int argc, char **argv)
}
JS_SetPropertyStr(ctx, env_ref.val, "args", args_ref.val);
JS_DeleteGCRef(ctx, &args_ref);
tmp = JS_NewCFunction(ctx, js_engine_log, "log", 2);
JS_SetPropertyStr(ctx, env_ref.val, "log", tmp);
JSValue hidden_env = JS_Stone(ctx, env_ref.val);
g_crash_ctx = ctx;