diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2020-01-12 22:20:33 +1100 |
---|---|---|
committer | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-01-12 12:20:33 +0100 |
commit | 737ab94ea1bdf65eeef323ea37e84bcf430fb92c (patch) | |
tree | b6a239195a960557a5d32f1762886f77a71a9104 /cli/js/compiler_bootstrap.ts | |
parent | 8fac8ab130b3cb8a93d7e0e37fa1ea6ea4cc2e4a (diff) |
Create an old program to be used in snapshot. (#3644)
Diffstat (limited to 'cli/js/compiler_bootstrap.ts')
-rw-r--r-- | cli/js/compiler_bootstrap.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/cli/js/compiler_bootstrap.ts b/cli/js/compiler_bootstrap.ts new file mode 100644 index 000000000..6de978750 --- /dev/null +++ b/cli/js/compiler_bootstrap.ts @@ -0,0 +1,34 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. + +import { ASSETS, Host } from "./compiler_host.ts"; +import { core } from "./core.ts"; +import * as dispatch from "./dispatch.ts"; +import { sendSync } from "./dispatch_json.ts"; + +// This registers ops that are available during the snapshotting process. +const ops = core.ops(); +for (const [name, opId] of Object.entries(ops)) { + const opName = `OP_${name.toUpperCase()}`; + // TODO This type casting is dangerous, and should be improved when the same + // code in `os.ts` is done. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (dispatch as any)[opName] = opId; +} + +const host = new Host({ writeFile(): void {} }); +const options = host.getCompilationSettings(); + +/** Used to generate the foundational AST for all other compilations, so it can + * be cached as part of the snapshot and available to speed up startup */ +export const oldProgram = ts.createProgram({ + rootNames: [`${ASSETS}/bootstrap.ts`], + options, + host +}); + +/** A module loader which is concatenated into bundle files. We read all static + * assets during the snapshotting process, which is why this is located in + * compiler_bootstrap. */ +export const bundleLoader = sendSync(dispatch.OP_FETCH_ASSET, { + name: "bundle_loader.js" +}); |