// regen.cm — regenerate .mach bytecode files // Run with: ./cell --core . regen.cm var fd = use("fd") var json = use("json") var tokenize = use("tokenize") var parse = use("parse") var fold = use("fold") var files = [ {src: "tokenize.cm", name: "tokenize", out: "tokenize.mach"}, {src: "parse.cm", name: "parse", out: "parse.mach"}, {src: "fold.cm", name: "fold", out: "fold.mach"}, {src: "mcode.cm", name: "mcode", out: "mcode.mach"}, {src: "streamline.cm", name: "streamline", out: "streamline.mach"}, {src: "qbe.cm", name: "qbe", out: "qbe.mach"}, {src: "qbe_emit.cm", name: "qbe_emit", out: "qbe_emit.mach"}, {src: "internal/bootstrap.cm", name: "bootstrap", out: "internal/bootstrap.mach"}, {src: "internal/engine.cm", name: "engine", out: "internal/engine.mach"} ] var i = 0 var entry = null var src = null var tok_result = null var ast = null var folded = null var ast_json = null var bytecode = null var f = null while (i < length(files)) { entry = files[i] src = text(fd.slurp(entry.src)) tok_result = tokenize(src, entry.src) ast = parse(tok_result.tokens, src, entry.src, tokenize) folded = fold(ast) ast_json = json.encode(folded) bytecode = mach_compile_ast(entry.name, ast_json) f = fd.open(entry.out, "w") fd.write(f, bytecode) fd.close(f) print(`wrote ${entry.out}`) i = i + 1 }