diff --git a/internal/engine.cm b/internal/engine.cm index d49c9589..af3ad891 100644 --- a/internal/engine.cm +++ b/internal/engine.cm @@ -49,9 +49,13 @@ function ends_with(str, suffix) { return search(str, suffix, -length(suffix)) != null } +print("engine: loading js") var js = use_embed('js') +print("engine: loading fd") var fd = use_embed('fd') +print("engine: loaded fd") +print("engine: getting home") // Get the shop path from HOME environment var home = os.getenv('HOME') || os.getenv('USERPROFILE') if (!home) { @@ -76,34 +80,49 @@ function use_core(path) { if (use_cache[cache_key]) return use_cache[cache_key]; + print(`engine: use_core('${path}') - embed`) var sym = use_embed(replace(path, '/', '_')) // Core scripts are in packages/core/ var file_path = core_path + '/' + path + MOD_EXT if (fd.is_file(file_path)) { + print(`engine: use_core('${path}') - loading script`) var script_blob = fd.slurp(file_path) var script = text(script_blob) var mod = `(function setup_module(use){${script}})` var fn = mach_eval('core:' + path, mod) + if (fn == null) { + print(`engine: use_core('${path}') - mach_eval returned null!`) + return null + } + print(`engine: use_core('${path}') - calling (fn type: ${typeof(fn)})`) var result = call(fn,sym, [use_core]) + print(`engine: use_core('${path}') - done`) use_cache[cache_key] = result; return result; } + print(`engine: use_core('${path}') - using embed directly`) use_cache[cache_key] = sym; return sym; } +print("engine: loading blob") var blob = use_core('blob') +print("engine: loaded blob") function actor() { } +print("engine: loading actor") var actor_mod = use_core('actor') +print("engine: loading wota") var wota = use_core('wota') +print("engine: loading nota") var nota = use_core('nota') +print("engine: loaded nota") function is_actor(value) { return is_object(value) && value[ACTORDATA] @@ -191,10 +210,15 @@ function actor_die(err) +print("engine: setting up actor_die") actor_mod.on_exception(actor_die) +print("engine: setting cell args") +print(`engine: init is ${init}`) _cell.args = init != null ? init : {} +print("engine: args set") _cell.id = "newguy" +print("engine: id set") function create_actor(desc = {id:guid()}) { var actor = {} @@ -202,19 +226,25 @@ function create_actor(desc = {id:guid()}) { return actor } +print("engine: creating $_") var $_ = {} +print("engine: creating self actor") $_.self = create_actor() - +print("engine: setting os props") os.use_cache = use_cache os.global_shop_path = shop_path os.$_ = $_ +print("engine: os props set") +print("engine: loading shop") var shop = use_core('internal/shop') - +print("engine: loaded shop, loading json") var json = use_core('json') var time = use_core('time') +print("engine: loading pronto") var pronto = use_core('pronto') +print("engine: loaded pronto") var fallback = pronto.fallback var parallel = pronto.parallel var race = pronto.race diff --git a/internal/shop.cm b/internal/shop.cm index 676e63d5..15bc07f7 100644 --- a/internal/shop.cm +++ b/internal/shop.cm @@ -1,5 +1,6 @@ +print("shop: starting") var toml = use('toml') - +print("shop: loaded toml") var json = use('json') var fd = use('fd') var http = use('http') diff --git a/source/cell.c b/source/cell.c index 9eef6894..2828237a 100644 --- a/source/cell.c +++ b/source/cell.c @@ -215,22 +215,19 @@ void script_startup(cell_rt *prt) JS_PushGCRef(js, &env_ref); env_ref.val = JS_NewObject(js); + // Create modules with GC rooting JSGCRef os_ref, json_ref, nota_ref, wota_ref; JS_PushGCRef(js, &os_ref); JS_PushGCRef(js, &json_ref); JS_PushGCRef(js, ¬a_ref); JS_PushGCRef(js, &wota_ref); - // Create and stone each module to make them GC-immovable os_ref.val = js_os_use(js); - os_ref.val = JS_Stone(js, os_ref.val); json_ref.val = js_json_use(js); - json_ref.val = JS_Stone(js, json_ref.val); nota_ref.val = js_nota_use(js); - nota_ref.val = JS_Stone(js, nota_ref.val); wota_ref.val = js_wota_use(js); - wota_ref.val = JS_Stone(js, wota_ref.val); + // Set properties on env (SetPropertyStr internally roots its args) JS_SetPropertyStr(js, env_ref.val, "os", os_ref.val); JS_SetPropertyStr(js, env_ref.val, "json", json_ref.val); JS_SetPropertyStr(js, env_ref.val, "nota", nota_ref.val);