Ctrl K
ComunidadGuías…

packages/codemode/script/prelude.ts

Rama dev · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bun

// Compiles the built-in sources (the prelude, the VM's internal helpers) ahead of time into src/vm/prelude/bytecode.json,
// which a process loads instead of parsing and compiling them (see src/vm/prelude/bytecode.ts). Run it after changing
// either source or the compiler; test/vm/prelude-bytecode.test.ts fails until then.

import { parse } from "acorn"
import { Source } from "../src/vm/runtime/source.js"
import { saveCodes } from "../src/vm/prelude/bytecode.js"
import { code } from "../src/vm/prelude/source.js"
import { compileSource } from "../src/vm/compiler/compile.js"
import { INTERNAL_SOURCE } from "../src/vm/internal-prelude.js"

export const compileBuiltins = () =>
  Object.fromEntries(
    [
      ["@prelude", code],
      ["@vm-internal", INTERNAL_SOURCE],
    ].map(([id, text]) => {
      const source = new Source(id!, text!, parse(text!, { ecmaVersion: "latest", sourceType: "script" }))
      return [id, saveCodes(text!, compileSource(source, { internal: true }))]
    }),
  )

if (import.meta.main) {
  await Bun.write(new URL("../src/vm/prelude/bytecode.json", import.meta.url), `${JSON.stringify(compileBuiltins())}\n`)
}