From 0d8b5cfb046bed1f3bce9c9ef30de869f12836e8 Mon Sep 17 00:00:00 2001 From: John Alanbrook Date: Tue, 10 Feb 2026 12:13:18 -0600 Subject: [PATCH] bootstrap loads engine --- internal/bootstrap.cm | 21 ++++++++++++++++----- internal/bootstrap.mach | Bin 6152 -> 6364 bytes internal/engine.cm | 28 +++++----------------------- internal/engine.mach | Bin 22814 -> 22113 bytes pronto.cm | 6 ++++-- 5 files changed, 25 insertions(+), 30 deletions(-) diff --git a/internal/bootstrap.cm b/internal/bootstrap.cm index 2f0984e8..11fa3521 100644 --- a/internal/bootstrap.cm +++ b/internal/bootstrap.cm @@ -181,7 +181,7 @@ var script = null var ast = null if (args != null) { - // CLI mode — run script directly + // CLI mode — parse args program = args[0] _j = 1 while (_j < length(args)) { @@ -189,11 +189,11 @@ if (args != null) { _j = _j + 1 } + // Resolve script file: try .cm then .ce in CWD then core_path script_file = program if (!ends_with(script_file, '.ce') && !ends_with(script_file, '.cm')) script_file = program + '.cm' - // Search CWD then core_path, trying .cm then .ce if (!fd.is_file(script_file)) script_file = core_path + '/' + program + '.cm' if (!fd.is_file(script_file)) @@ -201,9 +201,20 @@ if (args != null) { if (!fd.is_file(script_file)) script_file = core_path + '/' + program + '.ce' - script = text(fd.slurp(script_file)) - ast = analyze(script, script_file) - run_ast(program, ast, {use: use_fn, args: user_args, json: json}) + if (ends_with(script_file, '.ce')) { + // Actor script — delegate to engine + load_engine({ + os: os, actorsym: actorsym, + init: {program: program, arg: user_args}, + core_path: core_path, shop_path: shop_path, json: json, + analyze: analyze, run_ast_fn: run_ast + }) + } else { + // Module script — run directly + script = text(fd.slurp(script_file)) + ast = analyze(script, script_file) + run_ast(program, ast, {use: use_fn, args: user_args, json: json}) + } } else { // Actor spawn mode — load engine.cm with full actor env load_engine({ diff --git a/internal/bootstrap.mach b/internal/bootstrap.mach index 452430bbbf068f43ec3a3760684fe401df88651e..7276d31a625e99e7b4a0557ffde8e64684320fbf 100644 GIT binary patch delta 645 zcmZwByG|QH6b9gbb~9ir!eO(%?2PR}D};kAIV4gf%Uz;~CXJh8gJsS-L_!=+@+Se}A)s6VB^Le8S(x@Wq z4(krH#4Kr}?4nU##wg{~Jt1m&&hRuOXUj?fO)bh&Y3>n1S|0agAfsJ-vo)LV>muj; zf3B}9>{Ym{%B*r%vS;|mekWSzaBzVPJ*Jg=>b$?8S9e^Zip%Io_6Li&;{R7LscT4F zv-S-S=M+=nJC>+KYl$D+H?z)+weSvr?b6_tDMML*ibojicxJZfIGyO)_9hkBzP zWlWZK*leA(f+!qcH=0o}F4rvD6=m@dp9)imLmg&5ts)F%!KgT>Dq-s+du%xHq@&kz zzEff=sYNB3Qh8G4Jz0)Vaz|qK2?abOPxIvevCes$_J8TYMNfYi-J2Qox!;HSCxMBC zZwchY09gz$O*TpLX@mAAhWsvT3~)#9UEZ|sTGWt!2?w~_)%ll@CJ*PQt`!9 Gr|<=Q%vO{D diff --git a/internal/engine.cm b/internal/engine.cm index 39d1ee97..3b659003 100644 --- a/internal/engine.cm +++ b/internal/engine.cm @@ -109,23 +109,7 @@ var REPLYTIMEOUT = 60 // seconds before replies are ignored function caller_data(depth) { - var _depth = depth == null ? 0 : depth - var file = "nofile" - var line = 0 - var md = null - var m = null - - var caller = array(Error().stack, "\n")[1+_depth] - if (caller) { - md = extract(caller, /\((.*)\:/) - m = md ? md[1] : "SCRIPT" - if (m) file = m - md = extract(caller, /\:(\d*)\)/) - m = md ? md[1] : 0 - if (m) line = m - } - - return {file,line} + return {file: "nofile", line: 0} } function console_rec(line, file, msg) { @@ -140,9 +124,7 @@ function log(name, args) { if (name == 'console') { os.print(console_rec(caller.line, caller.file, msg)) } else if (name == 'error') { - if (msg == null) msg = Error() - if (is_proto(msg, Error)) - msg = msg.name + ": " + msg.message + "\n" + msg.stack + if (msg == null) msg = "error" os.print(console_rec(caller.line, caller.file, msg)) } else if (name == 'system') { msg = "[SYSTEM] " + msg @@ -166,7 +148,7 @@ function actor_die(err) if (overling) { if (err) { // with an err, this is a forceful disrupt - reason = (is_proto(err, Error)) ? err.stack : err + reason = err report_to_overling({type:'disrupt', reason}) } else report_to_overling({type:'stop'}) @@ -300,8 +282,8 @@ $_.time_limit = function(requestor, seconds) callback(val, reason) }, value) } disruption { - cancel(Error('requestor failed')) - callback(null, Error('requestor failed')) + cancel('requestor failed') + callback(null, 'requestor failed') } do_request() diff --git a/internal/engine.mach b/internal/engine.mach index f5841e61831c861712e93a5a20ba02c470867bb6..359b128606ef317d1c5afa164cdc17cb0c3a9633 100644 GIT binary patch delta 6279 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