bootstrap with serialized mach
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user