bootstrap with serialized mach

This commit is contained in:
2026-02-09 22:54:42 -06:00
parent 930dcfba36
commit b8b110b616
17 changed files with 89 additions and 247144 deletions

View File

@@ -13,7 +13,7 @@ use_cache['fd'] = fd
use_cache['os'] = os
use_cache['json'] = json
// Bootstrap: load tokenize.cm and parse.cm from pre-compiled AST JSON
// Bootstrap: load tokenize.cm, parse.cm, fold.cm from pre-compiled mach bytecode
function use_basic(path) {
if (use_cache[path])
return use_cache[path]
@@ -22,18 +22,27 @@ function use_basic(path) {
return result
}
var tok_ast_path = "tokenize.ast.json"
var par_ast_path = "parse.ast.json"
var tokenize_mod = mach_eval_ast("tokenize", text(fd.slurp(tok_ast_path)), {use: use_basic})
var parse_mod = mach_eval_ast("parse", text(fd.slurp(par_ast_path)), {use: use_basic})
var fold_ast_path = "fold.ast.json"
var fold_mod = mach_eval_ast("fold", text(fd.slurp(fold_ast_path)), {use: use_basic})
// Load a module from .mach bytecode, falling back to .ast.json
function boot_load(name, env) {
var mach_path = name + ".mach"
var data = null
if (fd.is_file(mach_path)) {
data = fd.slurp(mach_path)
return mach_load(data, env)
}
data = text(fd.slurp(name + ".ast.json"))
return mach_eval_ast(name, data, env)
}
var boot_env = {use: use_basic}
var tokenize_mod = boot_load("tokenize", boot_env)
var parse_mod = boot_load("parse", boot_env)
var fold_mod = boot_load("fold", boot_env)
// Optionally load mcode compiler module
var mcode_mod = null
var mcode_ast_path = "mcode.ast.json"
if (use_mcode) {
mcode_mod = mach_eval_ast("mcode", text(fd.slurp(mcode_ast_path)), {use: use_basic})
mcode_mod = boot_load("mcode", boot_env)
}
// analyze: tokenize + parse, check for errors