@virune/compiler 1.1.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/dist/src/analysis/control-flow.d.ts +9 -0
- package/dist/src/analysis/control-flow.d.ts.map +1 -0
- package/dist/src/analysis/control-flow.js +47 -0
- package/dist/src/analysis/control-flow.js.map +1 -0
- package/dist/src/ast/nodes.d.ts +495 -0
- package/dist/src/ast/nodes.d.ts.map +1 -0
- package/dist/src/ast/nodes.js +2 -0
- package/dist/src/ast/nodes.js.map +1 -0
- package/dist/src/binder/symbols.d.ts +36 -0
- package/dist/src/binder/symbols.d.ts.map +1 -0
- package/dist/src/binder/symbols.js +30 -0
- package/dist/src/binder/symbols.js.map +1 -0
- package/dist/src/checker/builtin-members.d.ts +4 -0
- package/dist/src/checker/builtin-members.d.ts.map +1 -0
- package/dist/src/checker/builtin-members.js +175 -0
- package/dist/src/checker/builtin-members.js.map +1 -0
- package/dist/src/checker/checker.d.ts +148 -0
- package/dist/src/checker/checker.d.ts.map +1 -0
- package/dist/src/checker/checker.js +2985 -0
- package/dist/src/checker/checker.js.map +1 -0
- package/dist/src/checker/effect-registry.d.ts +14 -0
- package/dist/src/checker/effect-registry.d.ts.map +1 -0
- package/dist/src/checker/effect-registry.js +11 -0
- package/dist/src/checker/effect-registry.js.map +1 -0
- package/dist/src/checker/type-operations.d.ts +27 -0
- package/dist/src/checker/type-operations.d.ts.map +1 -0
- package/dist/src/checker/type-operations.js +268 -0
- package/dist/src/checker/type-operations.js.map +1 -0
- package/dist/src/codegen/emitter.d.ts +83 -0
- package/dist/src/codegen/emitter.d.ts.map +1 -0
- package/dist/src/codegen/emitter.js +1029 -0
- package/dist/src/codegen/emitter.js.map +1 -0
- package/dist/src/codegen/helpers.d.ts +7 -0
- package/dist/src/codegen/helpers.d.ts.map +1 -0
- package/dist/src/codegen/helpers.js +48 -0
- package/dist/src/codegen/helpers.js.map +1 -0
- package/dist/src/codegen/runtime-imports.d.ts +6 -0
- package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
- package/dist/src/codegen/runtime-imports.js +45 -0
- package/dist/src/codegen/runtime-imports.js.map +1 -0
- package/dist/src/codegen/writer.d.ts +14 -0
- package/dist/src/codegen/writer.d.ts.map +1 -0
- package/dist/src/codegen/writer.js +56 -0
- package/dist/src/codegen/writer.js.map +1 -0
- package/dist/src/compiler.d.ts +24 -0
- package/dist/src/compiler.d.ts.map +1 -0
- package/dist/src/compiler.js +97 -0
- package/dist/src/compiler.js.map +1 -0
- package/dist/src/diagnostics/codes.d.ts +18 -0
- package/dist/src/diagnostics/codes.d.ts.map +1 -0
- package/dist/src/diagnostics/codes.js +43 -0
- package/dist/src/diagnostics/codes.js.map +1 -0
- package/dist/src/diagnostics/diagnostic.d.ts +41 -0
- package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/src/diagnostics/diagnostic.js +50 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -0
- package/dist/src/diagnostics/render.d.ts +44 -0
- package/dist/src/diagnostics/render.d.ts.map +1 -0
- package/dist/src/diagnostics/render.js +44 -0
- package/dist/src/diagnostics/render.js.map +1 -0
- package/dist/src/experimental-api.d.ts +19 -0
- package/dist/src/experimental-api.d.ts.map +1 -0
- package/dist/src/experimental-api.js +17 -0
- package/dist/src/experimental-api.js.map +1 -0
- package/dist/src/hir/lower.d.ts +6 -0
- package/dist/src/hir/lower.d.ts.map +1 -0
- package/dist/src/hir/lower.js +124 -0
- package/dist/src/hir/lower.js.map +1 -0
- package/dist/src/hir/nodes.d.ts +12 -0
- package/dist/src/hir/nodes.d.ts.map +1 -0
- package/dist/src/hir/nodes.js +2 -0
- package/dist/src/hir/nodes.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interop/checked-api.d.ts +21 -0
- package/dist/src/interop/checked-api.d.ts.map +1 -0
- package/dist/src/interop/checked-api.js +46 -0
- package/dist/src/interop/checked-api.js.map +1 -0
- package/dist/src/interop/decision.d.ts +24 -0
- package/dist/src/interop/decision.d.ts.map +1 -0
- package/dist/src/interop/decision.js +96 -0
- package/dist/src/interop/decision.js.map +1 -0
- package/dist/src/interop/frontend-component-emission.d.ts +17 -0
- package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
- package/dist/src/interop/frontend-component-emission.js +271 -0
- package/dist/src/interop/frontend-component-emission.js.map +1 -0
- package/dist/src/interop/jsx-view-validation.d.ts +20 -0
- package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
- package/dist/src/interop/jsx-view-validation.js +847 -0
- package/dist/src/interop/jsx-view-validation.js.map +1 -0
- package/dist/src/interop/operation-api.d.ts +32 -0
- package/dist/src/interop/operation-api.d.ts.map +1 -0
- package/dist/src/interop/operation-api.js +61 -0
- package/dist/src/interop/operation-api.js.map +1 -0
- package/dist/src/interop/operation.d.ts +136 -0
- package/dist/src/interop/operation.d.ts.map +1 -0
- package/dist/src/interop/operation.js +575 -0
- package/dist/src/interop/operation.js.map +1 -0
- package/dist/src/interop/repetition-host-locator.d.ts +25 -0
- package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-locator.js +61 -0
- package/dist/src/interop/repetition-host-locator.js.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.js +89 -0
- package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
- package/dist/src/interop/types.d.ts +365 -0
- package/dist/src/interop/types.d.ts.map +1 -0
- package/dist/src/interop/types.js +2 -0
- package/dist/src/interop/types.js.map +1 -0
- package/dist/src/mir/lower.d.ts +4 -0
- package/dist/src/mir/lower.d.ts.map +1 -0
- package/dist/src/mir/lower.js +131 -0
- package/dist/src/mir/lower.js.map +1 -0
- package/dist/src/mir/nodes.d.ts +36 -0
- package/dist/src/mir/nodes.d.ts.map +1 -0
- package/dist/src/mir/nodes.js +2 -0
- package/dist/src/mir/nodes.js.map +1 -0
- package/dist/src/project/incremental.d.ts +9 -0
- package/dist/src/project/incremental.d.ts.map +1 -0
- package/dist/src/project/incremental.js +15 -0
- package/dist/src/project/incremental.js.map +1 -0
- package/dist/src/project/project.d.ts +98 -0
- package/dist/src/project/project.d.ts.map +1 -0
- package/dist/src/project/project.js +884 -0
- package/dist/src/project/project.js.map +1 -0
- package/dist/src/public-api.d.ts +45 -0
- package/dist/src/public-api.d.ts.map +1 -0
- package/dist/src/public-api.js +37 -0
- package/dist/src/public-api.js.map +1 -0
- package/dist/src/reference/evaluator.d.ts +13 -0
- package/dist/src/reference/evaluator.d.ts.map +1 -0
- package/dist/src/reference/evaluator.js +304 -0
- package/dist/src/reference/evaluator.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
- package/dist/src/selfhost/compiler-facade.d.ts +33 -0
- package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/compiler-facade.js +65 -0
- package/dist/src/selfhost/compiler-facade.js.map +1 -0
- package/dist/src/selfhost/contract.d.ts +151 -0
- package/dist/src/selfhost/contract.d.ts.map +1 -0
- package/dist/src/selfhost/contract.js +335 -0
- package/dist/src/selfhost/contract.js.map +1 -0
- package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
- package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
- package/dist/src/selfhost/differential-artifacts.js +50 -0
- package/dist/src/selfhost/differential-artifacts.js.map +1 -0
- package/dist/src/selfhost/differential-harness.d.ts +91 -0
- package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
- package/dist/src/selfhost/differential-harness.js +246 -0
- package/dist/src/selfhost/differential-harness.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
- package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
- package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory.js +163 -0
- package/dist/src/selfhost/full-language-inventory.js.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.js +186 -0
- package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
- package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
- package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/legacy-adapter.js +186 -0
- package/dist/src/selfhost/legacy-adapter.js.map +1 -0
- package/dist/src/selfhost/module-graph.d.ts +57 -0
- package/dist/src/selfhost/module-graph.d.ts.map +1 -0
- package/dist/src/selfhost/module-graph.js +267 -0
- package/dist/src/selfhost/module-graph.js.map +1 -0
- package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
- package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/mvp-adapter.js +186 -0
- package/dist/src/selfhost/mvp-adapter.js.map +1 -0
- package/dist/src/selfhost/node-executor.d.ts +6 -0
- package/dist/src/selfhost/node-executor.d.ts.map +1 -0
- package/dist/src/selfhost/node-executor.js +138 -0
- package/dist/src/selfhost/node-executor.js.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.js +358 -0
- package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.js +65 -0
- package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
- package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
- package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-evidence.js +332 -0
- package/dist/src/selfhost/promotion-evidence.js.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-subject.d.ts +34 -0
- package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-subject.js +141 -0
- package/dist/src/selfhost/promotion-subject.js.map +1 -0
- package/dist/src/selfhost/source-manifest.d.ts +31 -0
- package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
- package/dist/src/selfhost/source-manifest.js +194 -0
- package/dist/src/selfhost/source-manifest.js.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.js +100 -0
- package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
- package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
- package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
- package/dist/src/semantic-evidence/snapshot.js +336 -0
- package/dist/src/semantic-evidence/snapshot.js.map +1 -0
- package/dist/src/source.d.ts +25 -0
- package/dist/src/source.d.ts.map +1 -0
- package/dist/src/source.js +10 -0
- package/dist/src/source.js.map +1 -0
- package/dist/src/syntax/cst-to-ast.d.ts +108 -0
- package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
- package/dist/src/syntax/cst-to-ast.js +383 -0
- package/dist/src/syntax/cst-to-ast.js.map +1 -0
- package/dist/src/syntax/documentation.d.ts +11 -0
- package/dist/src/syntax/documentation.d.ts.map +1 -0
- package/dist/src/syntax/documentation.js +261 -0
- package/dist/src/syntax/documentation.js.map +1 -0
- package/dist/src/syntax/parser.d.ts +114 -0
- package/dist/src/syntax/parser.d.ts.map +1 -0
- package/dist/src/syntax/parser.js +970 -0
- package/dist/src/syntax/parser.js.map +1 -0
- package/dist/src/syntax/syntax-metadata.d.ts +8 -0
- package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
- package/dist/src/syntax/syntax-metadata.js +14 -0
- package/dist/src/syntax/syntax-metadata.js.map +1 -0
- package/dist/src/syntax/tokens.d.ts +96 -0
- package/dist/src/syntax/tokens.d.ts.map +1 -0
- package/dist/src/syntax/tokens.js +260 -0
- package/dist/src/syntax/tokens.js.map +1 -0
- package/dist/src/types/types.d.ts +97 -0
- package/dist/src/types/types.d.ts.map +1 -0
- package/dist/src/types/types.js +105 -0
- package/dist/src/types/types.js.map +1 -0
- package/package.json +47 -0
- package/schema/diagnostics-v1.schema.json +75 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { DiagnosticBag } from '../diagnostics/diagnostic.js';
|
|
2
|
+
import { TypeArena } from '../types/types.js';
|
|
3
|
+
/** Pure type-relation and substitution operations shared by checker phases. */
|
|
4
|
+
export class TypeOperations {
|
|
5
|
+
#arena;
|
|
6
|
+
#diagnostics;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.#arena = options.arena;
|
|
9
|
+
this.#diagnostics = options.diagnostics;
|
|
10
|
+
}
|
|
11
|
+
isAssignable(source, target) {
|
|
12
|
+
if (source === this.#arena.error || target === this.#arena.error || this.#arena.equals(source, target) || source === this.#arena.never || target === this.#arena.unknown)
|
|
13
|
+
return true;
|
|
14
|
+
const targetType = this.#arena.get(target);
|
|
15
|
+
if (targetType.kind === 'option' && this.isAssignable(source, targetType.value))
|
|
16
|
+
return true;
|
|
17
|
+
const sourceType = this.#arena.get(source);
|
|
18
|
+
if (sourceType.kind === 'function' && targetType.kind === 'function') {
|
|
19
|
+
if (sourceType.async !== targetType.async || sourceType.parameters.length !== targetType.parameters.length)
|
|
20
|
+
return false;
|
|
21
|
+
if (!sourceType.parameters.every((parameter, index) => this.isAssignable(targetType.parameters[index], parameter)))
|
|
22
|
+
return false;
|
|
23
|
+
if (!this.isAssignable(sourceType.result, targetType.result))
|
|
24
|
+
return false;
|
|
25
|
+
return targetType.effects.includes('*') || sourceType.effects.every(effect => targetType.effects.includes(effect));
|
|
26
|
+
}
|
|
27
|
+
if (sourceType.kind === 'named' && sourceType.declarationKind === 'alias' && sourceType.underlying !== undefined)
|
|
28
|
+
return this.isAssignable(sourceType.underlying, target);
|
|
29
|
+
if (targetType.kind === 'named' && targetType.declarationKind === 'alias' && targetType.underlying !== undefined)
|
|
30
|
+
return this.isAssignable(source, targetType.underlying);
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
listElementOf(typeId) { if (typeId === undefined)
|
|
34
|
+
return undefined; const type = this.#arena.get(typeId); return type.kind === 'list' ? type.element : undefined; }
|
|
35
|
+
setElementOf(typeId) { if (typeId === undefined)
|
|
36
|
+
return undefined; const type = this.#arena.get(typeId); return type.kind === 'set' ? type.element : undefined; }
|
|
37
|
+
mapKeyOf(typeId) { if (typeId === undefined)
|
|
38
|
+
return undefined; const type = this.#arena.get(typeId); return type.kind === 'map' ? type.key : undefined; }
|
|
39
|
+
isMustUse(typeId, seen = new Set()) {
|
|
40
|
+
if (seen.has(typeId))
|
|
41
|
+
return false;
|
|
42
|
+
seen.add(typeId);
|
|
43
|
+
const type = this.#arena.get(typeId);
|
|
44
|
+
if (type.kind === 'future' || type.kind === 'result')
|
|
45
|
+
return true;
|
|
46
|
+
if (type.kind === 'foreign')
|
|
47
|
+
return type.snapshot.mustUse === true;
|
|
48
|
+
if (type.kind === 'named')
|
|
49
|
+
return type.mustUse === true || type.name === 'Stream' || type.name === 'FileHandle' || (type.declarationKind === 'alias' && type.underlying !== undefined && this.isMustUse(type.underlying, seen));
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
supportsHash(typeId, seen = new Set()) {
|
|
53
|
+
if (seen.has(typeId))
|
|
54
|
+
return true;
|
|
55
|
+
seen.add(typeId);
|
|
56
|
+
const type = this.#arena.get(typeId);
|
|
57
|
+
if (type.kind === 'primitive')
|
|
58
|
+
return ['Bool', 'Int', 'BigInt', 'String', 'Unit'].includes(type.name);
|
|
59
|
+
if (type.kind === 'list' || type.kind === 'set' || type.kind === 'option')
|
|
60
|
+
return this.supportsHash(type.kind === 'list' || type.kind === 'set' ? type.element : type.value, seen);
|
|
61
|
+
if (type.kind === 'map')
|
|
62
|
+
return this.supportsHash(type.key, seen) && this.supportsHash(type.value, seen);
|
|
63
|
+
if (type.kind === 'result')
|
|
64
|
+
return this.supportsHash(type.value, seen) && this.supportsHash(type.error, seen);
|
|
65
|
+
if (type.kind === 'tuple')
|
|
66
|
+
return type.items.every(item => this.supportsHash(item, seen));
|
|
67
|
+
if (type.kind === 'named') {
|
|
68
|
+
if (type.derives?.has('Hash') === true)
|
|
69
|
+
return true;
|
|
70
|
+
if ((type.declarationKind === 'newtype' || type.declarationKind === 'alias') && type.underlying !== undefined)
|
|
71
|
+
return this.supportsHash(type.underlying, seen);
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
containsTypeVariable(typeId, seen = new Set()) {
|
|
77
|
+
if (seen.has(typeId))
|
|
78
|
+
return false;
|
|
79
|
+
seen.add(typeId);
|
|
80
|
+
const type = this.#arena.get(typeId);
|
|
81
|
+
if (type.kind === 'typeVariable')
|
|
82
|
+
return true;
|
|
83
|
+
if (type.kind === 'list' || type.kind === 'set' || type.kind === 'option' || type.kind === 'future')
|
|
84
|
+
return this.containsTypeVariable(type.kind === 'list' ? type.element : type.kind === 'set' ? type.element : type.value, seen);
|
|
85
|
+
if (type.kind === 'map')
|
|
86
|
+
return this.containsTypeVariable(type.key, seen) || this.containsTypeVariable(type.value, seen);
|
|
87
|
+
if (type.kind === 'result')
|
|
88
|
+
return this.containsTypeVariable(type.value, seen) || this.containsTypeVariable(type.error, seen);
|
|
89
|
+
if (type.kind === 'tuple')
|
|
90
|
+
return type.items.some(item => this.containsTypeVariable(item, seen));
|
|
91
|
+
if (type.kind === 'function')
|
|
92
|
+
return type.parameters.some(item => this.containsTypeVariable(item, seen)) || this.containsTypeVariable(type.result, seen);
|
|
93
|
+
if (type.kind === 'named')
|
|
94
|
+
return type.arguments.some(item => this.containsTypeVariable(item, seen));
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
supportsDerive(typeId, derive, seen = new Set()) {
|
|
98
|
+
if (seen.has(typeId))
|
|
99
|
+
return true;
|
|
100
|
+
seen.add(typeId);
|
|
101
|
+
const type = this.#arena.get(typeId);
|
|
102
|
+
if (type.kind === 'primitive')
|
|
103
|
+
return type.name !== 'Unknown';
|
|
104
|
+
if (type.kind === 'list' || type.kind === 'set' || type.kind === 'option' || type.kind === 'future')
|
|
105
|
+
return this.supportsDerive(type.kind === 'future' ? type.value : type.kind === 'list' || type.kind === 'set' ? type.element : type.value, derive, seen);
|
|
106
|
+
if (type.kind === 'map')
|
|
107
|
+
return this.supportsDerive(type.key, derive, seen) && this.supportsDerive(type.value, derive, seen);
|
|
108
|
+
if (type.kind === 'result')
|
|
109
|
+
return this.supportsDerive(type.value, derive, seen) && this.supportsDerive(type.error, derive, seen);
|
|
110
|
+
if (type.kind === 'tuple')
|
|
111
|
+
return type.items.every(item => this.supportsDerive(item, derive, seen));
|
|
112
|
+
if (type.kind === 'named') {
|
|
113
|
+
if (type.derives?.has(derive) === true)
|
|
114
|
+
return true;
|
|
115
|
+
if ((type.declarationKind === 'newtype' || type.declarationKind === 'alias') && type.underlying !== undefined)
|
|
116
|
+
return this.supportsDerive(type.underlying, derive, seen);
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
supportsJson(typeId, seen = new Set()) {
|
|
122
|
+
if (seen.has(typeId))
|
|
123
|
+
return true;
|
|
124
|
+
seen.add(typeId);
|
|
125
|
+
const type = this.#arena.get(typeId);
|
|
126
|
+
if (type.kind === 'primitive')
|
|
127
|
+
return ['Bool', 'Int', 'Float', 'String', 'Unit', 'Unknown'].includes(type.name);
|
|
128
|
+
if (type.kind === 'list' || type.kind === 'set' || type.kind === 'option')
|
|
129
|
+
return this.supportsJson(type.kind === 'list' ? type.element : type.kind === 'set' ? type.element : type.value, seen);
|
|
130
|
+
if (type.kind === 'map')
|
|
131
|
+
return this.#arena.equals(type.key, this.#arena.string) && this.supportsJson(type.value, seen);
|
|
132
|
+
if (type.kind === 'result')
|
|
133
|
+
return this.supportsJson(type.value, seen) && this.supportsJson(type.error, seen);
|
|
134
|
+
if (type.kind === 'tuple')
|
|
135
|
+
return type.items.every(item => this.supportsJson(item, seen));
|
|
136
|
+
if (type.kind === 'named') {
|
|
137
|
+
if (type.derives?.has('Json') === true || type.name === 'JsonError')
|
|
138
|
+
return true;
|
|
139
|
+
if ((type.declarationKind === 'newtype' || type.declarationKind === 'alias') && type.underlying !== undefined)
|
|
140
|
+
return this.supportsJson(type.underlying, seen);
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
supportsDerivedEq(typeId, owner, seen = new Set()) {
|
|
146
|
+
if (typeId === owner || seen.has(typeId))
|
|
147
|
+
return true;
|
|
148
|
+
seen.add(typeId);
|
|
149
|
+
const type = this.#arena.get(typeId);
|
|
150
|
+
if (type.kind === 'primitive')
|
|
151
|
+
return ['Bool', 'Int', 'BigInt', 'String', 'Unit'].includes(type.name);
|
|
152
|
+
if (type.kind === 'list' || type.kind === 'set' || type.kind === 'option')
|
|
153
|
+
return this.supportsDerivedEq(type.kind === 'list' ? type.element : type.kind === 'set' ? type.element : type.value, owner, seen);
|
|
154
|
+
if (type.kind === 'map')
|
|
155
|
+
return this.supportsDerivedEq(type.key, owner, seen) && this.supportsDerivedEq(type.value, owner, seen);
|
|
156
|
+
if (type.kind === 'result')
|
|
157
|
+
return this.supportsDerivedEq(type.value, owner, seen) && this.supportsDerivedEq(type.error, owner, seen);
|
|
158
|
+
if (type.kind === 'tuple')
|
|
159
|
+
return type.items.every(item => this.supportsDerivedEq(item, owner, seen));
|
|
160
|
+
if (type.kind === 'named') {
|
|
161
|
+
if (type.derives?.has('Eq') === true)
|
|
162
|
+
return true;
|
|
163
|
+
if ((type.declarationKind === 'newtype' || type.declarationKind === 'alias') && type.underlying !== undefined)
|
|
164
|
+
return this.supportsDerivedEq(type.underlying, owner, seen);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
supportsEq(typeId, seen = new Set()) {
|
|
170
|
+
if (seen.has(typeId))
|
|
171
|
+
return true;
|
|
172
|
+
seen.add(typeId);
|
|
173
|
+
const type = this.#arena.get(typeId);
|
|
174
|
+
if (type.kind === 'primitive')
|
|
175
|
+
return ['Bool', 'Int', 'Float', 'BigInt', 'String', 'Unit'].includes(type.name);
|
|
176
|
+
if (type.kind === 'list' || type.kind === 'set' || type.kind === 'option')
|
|
177
|
+
return this.supportsEq(type.kind === 'list' ? type.element : type.kind === 'set' ? type.element : type.value, seen);
|
|
178
|
+
if (type.kind === 'map')
|
|
179
|
+
return this.supportsEq(type.key, seen) && this.supportsEq(type.value, seen);
|
|
180
|
+
if (type.kind === 'result')
|
|
181
|
+
return this.supportsEq(type.value, seen) && this.supportsEq(type.error, seen);
|
|
182
|
+
if (type.kind === 'tuple')
|
|
183
|
+
return type.items.every(item => this.supportsEq(item, seen));
|
|
184
|
+
if (type.kind === 'named') {
|
|
185
|
+
if (type.derives?.has('Eq') === true)
|
|
186
|
+
return true;
|
|
187
|
+
if ((type.declarationKind === 'newtype' || type.declarationKind === 'alias') && type.underlying !== undefined)
|
|
188
|
+
return this.supportsEq(type.underlying, seen);
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
commonType(types, span) {
|
|
194
|
+
if (types.length === 0)
|
|
195
|
+
return this.#arena.unit;
|
|
196
|
+
let current = types[0];
|
|
197
|
+
for (const type of types.slice(1)) {
|
|
198
|
+
if (this.isAssignable(type, current))
|
|
199
|
+
continue;
|
|
200
|
+
if (this.isAssignable(current, type))
|
|
201
|
+
current = type;
|
|
202
|
+
else {
|
|
203
|
+
this.#diagnostics.error('L2042', `Incompatible result types ${this.#arena.display(current)} and ${this.#arena.display(type)}`, span);
|
|
204
|
+
return this.#arena.error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return current;
|
|
208
|
+
}
|
|
209
|
+
unify(pattern, actual, substitutions) {
|
|
210
|
+
const patternType = this.#arena.get(pattern);
|
|
211
|
+
const actualType = this.#arena.get(actual);
|
|
212
|
+
if (patternType.kind === 'typeVariable') {
|
|
213
|
+
const existing = substitutions.get(patternType.name);
|
|
214
|
+
if (existing === undefined)
|
|
215
|
+
substitutions.set(patternType.name, actual);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (patternType.kind === 'list' && actualType.kind === 'list')
|
|
219
|
+
this.unify(patternType.element, actualType.element, substitutions);
|
|
220
|
+
else if (patternType.kind === 'set' && actualType.kind === 'set')
|
|
221
|
+
this.unify(patternType.element, actualType.element, substitutions);
|
|
222
|
+
else if (patternType.kind === 'map' && actualType.kind === 'map') {
|
|
223
|
+
this.unify(patternType.key, actualType.key, substitutions);
|
|
224
|
+
this.unify(patternType.value, actualType.value, substitutions);
|
|
225
|
+
}
|
|
226
|
+
else if (patternType.kind === 'tuple' && actualType.kind === 'tuple' && patternType.items.length === actualType.items.length)
|
|
227
|
+
patternType.items.forEach((item, index) => this.unify(item, actualType.items[index], substitutions));
|
|
228
|
+
else if (patternType.kind === 'option' && actualType.kind === 'option')
|
|
229
|
+
this.unify(patternType.value, actualType.value, substitutions);
|
|
230
|
+
else if (patternType.kind === 'result' && actualType.kind === 'result') {
|
|
231
|
+
this.unify(patternType.value, actualType.value, substitutions);
|
|
232
|
+
this.unify(patternType.error, actualType.error, substitutions);
|
|
233
|
+
}
|
|
234
|
+
else if (patternType.kind === 'future' && actualType.kind === 'future')
|
|
235
|
+
this.unify(patternType.value, actualType.value, substitutions);
|
|
236
|
+
else if (patternType.kind === 'function' && actualType.kind === 'function' && patternType.parameters.length === actualType.parameters.length) {
|
|
237
|
+
patternType.parameters.forEach((item, index) => this.unify(item, actualType.parameters[index], substitutions));
|
|
238
|
+
this.unify(patternType.result, actualType.result, substitutions);
|
|
239
|
+
}
|
|
240
|
+
else if (patternType.kind === 'named' && actualType.kind === 'named' && patternType.definitionId === actualType.definitionId && patternType.arguments.length === actualType.arguments.length)
|
|
241
|
+
patternType.arguments.forEach((item, index) => this.unify(item, actualType.arguments[index], substitutions));
|
|
242
|
+
}
|
|
243
|
+
substitute(typeId, substitutions) {
|
|
244
|
+
const type = this.#arena.get(typeId);
|
|
245
|
+
if (type.kind === 'typeVariable')
|
|
246
|
+
return substitutions.get(type.name) ?? typeId;
|
|
247
|
+
if (type.kind === 'list')
|
|
248
|
+
return this.#arena.list(this.substitute(type.element, substitutions));
|
|
249
|
+
if (type.kind === 'set')
|
|
250
|
+
return this.#arena.set(this.substitute(type.element, substitutions));
|
|
251
|
+
if (type.kind === 'map')
|
|
252
|
+
return this.#arena.map(this.substitute(type.key, substitutions), this.substitute(type.value, substitutions));
|
|
253
|
+
if (type.kind === 'tuple')
|
|
254
|
+
return this.#arena.tuple(type.items.map(item => this.substitute(item, substitutions)));
|
|
255
|
+
if (type.kind === 'option')
|
|
256
|
+
return this.#arena.option(this.substitute(type.value, substitutions));
|
|
257
|
+
if (type.kind === 'result')
|
|
258
|
+
return this.#arena.result(this.substitute(type.value, substitutions), this.substitute(type.error, substitutions));
|
|
259
|
+
if (type.kind === 'future')
|
|
260
|
+
return this.#arena.future(this.substitute(type.value, substitutions));
|
|
261
|
+
if (type.kind === 'function')
|
|
262
|
+
return this.#arena.function(type.parameters.map(item => this.substitute(item, substitutions)), this.substitute(type.result, substitutions), type.typeParameters, type.async, type.effects);
|
|
263
|
+
if (type.kind === 'named' && (type.arguments.some(item => this.containsTypeVariable(item)) || type.fields !== undefined || type.variants !== undefined))
|
|
264
|
+
return this.#arena.namedInstance(type, type.arguments.map(item => this.substitute(item, substitutions)), { ...(type.fields === undefined ? {} : { fields: new Map([...type.fields].map(([name, field]) => [name, this.substitute(field, substitutions)])) }), ...(type.variants === undefined ? {} : { variants: new Map([...type.variants].map(([name, values]) => [name, values.map(value => this.substitute(value, substitutions))])) }), ...(type.underlying === undefined ? {} : { underlying: this.substitute(type.underlying, substitutions) }) });
|
|
265
|
+
return typeId;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=type-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-operations.js","sourceRoot":"","sources":["../../../src/checker/type-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type * as A from '../ast/nodes.js';
|
|
2
|
+
import type { HirModule } from '../hir/lower.js';
|
|
3
|
+
import type { SourceFile } from '../source.js';
|
|
4
|
+
export interface EmitResult {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
readonly map: string;
|
|
7
|
+
}
|
|
8
|
+
interface RepetitionHostEmitBinding {
|
|
9
|
+
readonly moduleSpecifier: string;
|
|
10
|
+
readonly exportName: string;
|
|
11
|
+
}
|
|
12
|
+
export interface EmitOptions {
|
|
13
|
+
readonly sourceMap?: boolean;
|
|
14
|
+
readonly sourcesContent?: boolean;
|
|
15
|
+
readonly sourcePath?: string;
|
|
16
|
+
readonly repetitionHost?: RepetitionHostEmitBinding;
|
|
17
|
+
}
|
|
18
|
+
export declare class JavaScriptEmitter {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(hir: HirModule, source: SourceFile, outputFile: string, options?: EmitOptions);
|
|
21
|
+
emit(module: A.ModuleNode): EmitResult;
|
|
22
|
+
private emitHeader;
|
|
23
|
+
private outputMapName;
|
|
24
|
+
private emitImport;
|
|
25
|
+
private emitExternImports;
|
|
26
|
+
private emitDeclaration;
|
|
27
|
+
private emitRecordDeclaration;
|
|
28
|
+
private emitEnumDeclaration;
|
|
29
|
+
private emitNewtypeDeclaration;
|
|
30
|
+
private emitFunction;
|
|
31
|
+
private emitComponent;
|
|
32
|
+
private emitJsExportWrapper;
|
|
33
|
+
private emitExternDeclaration;
|
|
34
|
+
private externIndex;
|
|
35
|
+
private currentModuleDeclarations;
|
|
36
|
+
private emitTest;
|
|
37
|
+
private emitBlock;
|
|
38
|
+
private emitStatement;
|
|
39
|
+
private emitIf;
|
|
40
|
+
private expression;
|
|
41
|
+
private expressionRaw;
|
|
42
|
+
private viewBlockExpression;
|
|
43
|
+
private viewBlockContents;
|
|
44
|
+
private viewChild;
|
|
45
|
+
private viewChildExpression;
|
|
46
|
+
private nativeChildrenSlotExpression;
|
|
47
|
+
private viewElement;
|
|
48
|
+
private frontendViewPropertyValue;
|
|
49
|
+
private nativeComponentPropertyValue;
|
|
50
|
+
private viewConditionalExpression;
|
|
51
|
+
private checkedViewRepetitionEvidence;
|
|
52
|
+
private viewRepetitionExpression;
|
|
53
|
+
private hostViewRepetitionExpression;
|
|
54
|
+
private contextualAggregate;
|
|
55
|
+
private lambdaExpression;
|
|
56
|
+
private inlineBlock;
|
|
57
|
+
private inlineStatement;
|
|
58
|
+
private inlineIf;
|
|
59
|
+
private literal;
|
|
60
|
+
private interpolatedString;
|
|
61
|
+
private identifier;
|
|
62
|
+
private call;
|
|
63
|
+
private frontendViewCallbackProjection;
|
|
64
|
+
private callableProjection;
|
|
65
|
+
private callableFfiDescriptor;
|
|
66
|
+
private field;
|
|
67
|
+
private binary;
|
|
68
|
+
private match;
|
|
69
|
+
private pattern;
|
|
70
|
+
private parallelExpression;
|
|
71
|
+
private acceptsTaskContext;
|
|
72
|
+
private typeDescriptorFromTypeId;
|
|
73
|
+
private recordFieldDescriptor;
|
|
74
|
+
private typeDescriptor;
|
|
75
|
+
private safeFfiBoundary;
|
|
76
|
+
private declarationTypeId;
|
|
77
|
+
private nameOf;
|
|
78
|
+
private moduleExported;
|
|
79
|
+
private exportPrefix;
|
|
80
|
+
}
|
|
81
|
+
export declare function emitJavaScript(hir: HirModule, source: SourceFile, outputFile: string, options?: EmitOptions): EmitResult;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/codegen/emitter.ts"],"names":[],"mappings":"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"}
|