summaryrefslogtreecommitdiff
path: root/cli/js/compiler_bootstrap.ts
diff options
context:
space:
mode:
authorKitson Kelly <me@kitsonkelly.com>2020-01-12 22:20:33 +1100
committerBartek IwaƄczuk <biwanczuk@gmail.com>2020-01-12 12:20:33 +0100
commit737ab94ea1bdf65eeef323ea37e84bcf430fb92c (patch)
treeb6a239195a960557a5d32f1762886f77a71a9104 /cli/js/compiler_bootstrap.ts
parent8fac8ab130b3cb8a93d7e0e37fa1ea6ea4cc2e4a (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.ts34
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"
+});