openalgo-script 0.5.0 → 0.6.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/CHANGELOG.md +121 -0
- package/README.md +53 -22
- package/dist/adapters/charts/run.d.ts.map +1 -1
- package/dist/adapters/charts/run.js +6 -0
- package/dist/adapters/charts/run.js.map +1 -1
- package/dist/adapters/charts/tables.d.ts +6 -19
- package/dist/adapters/charts/tables.d.ts.map +1 -1
- package/dist/adapters/charts/tables.js.map +1 -1
- package/dist/adapters/charts/undrawable.d.ts +4 -0
- package/dist/adapters/charts/undrawable.d.ts.map +1 -0
- package/dist/adapters/charts/undrawable.js +47 -0
- package/dist/adapters/charts/undrawable.js.map +1 -0
- package/dist/core/backtest/drive.d.ts +36 -1
- package/dist/core/backtest/drive.d.ts.map +1 -1
- package/dist/core/backtest/drive.js +13 -107
- package/dist/core/backtest/drive.js.map +1 -1
- package/dist/core/backtest/index.d.ts +2 -0
- package/dist/core/backtest/index.d.ts.map +1 -1
- package/dist/core/backtest/index.js.map +1 -1
- package/dist/core/backtest/walk.d.ts +39 -0
- package/dist/core/backtest/walk.d.ts.map +1 -0
- package/dist/core/backtest/walk.js +125 -0
- package/dist/core/backtest/walk.js.map +1 -0
- package/dist/core/catalogue/catalogue.generated.d.ts +178 -1
- package/dist/core/catalogue/catalogue.generated.d.ts.map +1 -1
- package/dist/core/catalogue/catalogue.generated.js +18 -1
- package/dist/core/catalogue/catalogue.generated.js.map +1 -1
- package/dist/core/catalogue/types.d.ts +8 -2
- package/dist/core/catalogue/types.d.ts.map +1 -1
- package/dist/core/catalogue/values.generated.d.ts +51 -0
- package/dist/core/catalogue/values.generated.d.ts.map +1 -1
- package/dist/core/check/assigned.d.ts +19 -0
- package/dist/core/check/assigned.d.ts.map +1 -0
- package/dist/core/check/assigned.js +14 -0
- package/dist/core/check/assigned.js.map +1 -0
- package/dist/core/check/call-sites.d.ts.map +1 -1
- package/dist/core/check/call-sites.js +9 -4
- package/dist/core/check/call-sites.js.map +1 -1
- package/dist/core/check/calls.d.ts.map +1 -1
- package/dist/core/check/calls.js +12 -4
- package/dist/core/check/calls.js.map +1 -1
- package/dist/core/check/check.d.ts.map +1 -1
- package/dist/core/check/check.js +15 -2
- package/dist/core/check/check.js.map +1 -1
- package/dist/core/check/checker.d.ts +26 -0
- package/dist/core/check/checker.d.ts.map +1 -1
- package/dist/core/check/checker.js +38 -2
- package/dist/core/check/checker.js.map +1 -1
- package/dist/core/check/constant.d.ts +16 -0
- package/dist/core/check/constant.d.ts.map +1 -1
- package/dist/core/check/constant.js +52 -0
- package/dist/core/check/constant.js.map +1 -1
- package/dist/core/check/deleted.d.ts +3 -0
- package/dist/core/check/deleted.d.ts.map +1 -0
- package/dist/core/check/deleted.js +109 -0
- package/dist/core/check/deleted.js.map +1 -0
- package/dist/core/check/expressions.js +1 -1
- package/dist/core/check/expressions.js.map +1 -1
- package/dist/core/check/library-output.d.ts.map +1 -1
- package/dist/core/check/library-output.js +1 -0
- package/dist/core/check/library-output.js.map +1 -1
- package/dist/core/check/library-prose.generated.js +10 -10
- package/dist/core/check/library-prose.generated.js.map +1 -1
- package/dist/core/check/library.d.ts +7 -0
- package/dist/core/check/library.d.ts.map +1 -1
- package/dist/core/check/library.js +1 -0
- package/dist/core/check/library.js.map +1 -1
- package/dist/core/check/surface.d.ts +9 -0
- package/dist/core/check/surface.d.ts.map +1 -1
- package/dist/core/check/surface.js +13 -0
- package/dist/core/check/surface.js.map +1 -1
- package/dist/core/engine/bar-source.d.ts +65 -0
- package/dist/core/engine/bar-source.d.ts.map +1 -0
- package/dist/core/engine/bar-source.js +58 -0
- package/dist/core/engine/bar-source.js.map +1 -0
- package/dist/core/engine/engine.d.ts +9 -11
- package/dist/core/engine/engine.d.ts.map +1 -1
- package/dist/core/engine/engine.js +24 -24
- package/dist/core/engine/engine.js.map +1 -1
- package/dist/core/engine/guard.d.ts.map +1 -1
- package/dist/core/engine/guard.js +10 -0
- package/dist/core/engine/guard.js.map +1 -1
- package/dist/core/engine/host.d.ts +4 -2
- package/dist/core/engine/host.d.ts.map +1 -1
- package/dist/core/engine/host.js.map +1 -1
- package/dist/core/engine/index.d.ts +1 -0
- package/dist/core/engine/index.d.ts.map +1 -1
- package/dist/core/engine/index.js.map +1 -1
- package/dist/core/engine/library/binding.d.ts +2 -0
- package/dist/core/engine/library/binding.d.ts.map +1 -1
- package/dist/core/engine/library/binding.js.map +1 -1
- package/dist/core/engine/library/index.d.ts +8 -0
- package/dist/core/engine/library/index.d.ts.map +1 -1
- package/dist/core/engine/library/index.js +10 -0
- package/dist/core/engine/library/index.js.map +1 -1
- package/dist/core/engine/library/objects.d.ts.map +1 -1
- package/dist/core/engine/library/objects.js +1 -1
- package/dist/core/engine/library/objects.js.map +1 -1
- package/dist/core/engine/request-body.d.ts +3 -1
- package/dist/core/engine/request-body.d.ts.map +1 -1
- package/dist/core/engine/request-body.js +3 -1
- package/dist/core/engine/request-body.js.map +1 -1
- package/dist/core/engine/request-plan.d.ts +3 -3
- package/dist/core/engine/request-plan.js +3 -3
- package/dist/core/engine/requests.d.ts +2 -2
- package/dist/core/engine/requests.d.ts.map +1 -1
- package/dist/core/engine/requests.js +5 -4
- package/dist/core/engine/requests.js.map +1 -1
- package/dist/core/engine/series.d.ts +18 -6
- package/dist/core/engine/series.d.ts.map +1 -1
- package/dist/core/engine/series.js +24 -5
- package/dist/core/engine/series.js.map +1 -1
- package/dist/core/engine/session/record.d.ts +4 -4
- package/dist/core/engine/session/record.js +4 -4
- package/dist/core/importer/calls.d.ts +29 -0
- package/dist/core/importer/calls.d.ts.map +1 -0
- package/dist/core/importer/calls.js +267 -0
- package/dist/core/importer/calls.js.map +1 -0
- package/dist/core/importer/context.d.ts +118 -0
- package/dist/core/importer/context.d.ts.map +1 -0
- package/dist/core/importer/context.js +120 -0
- package/dist/core/importer/context.js.map +1 -0
- package/dist/core/importer/expressions.d.ts +44 -0
- package/dist/core/importer/expressions.d.ts.map +1 -0
- package/dist/core/importer/expressions.js +223 -0
- package/dist/core/importer/expressions.js.map +1 -0
- package/dist/core/importer/importer.d.ts +13 -0
- package/dist/core/importer/importer.d.ts.map +1 -0
- package/dist/core/importer/importer.js +220 -0
- package/dist/core/importer/importer.js.map +1 -0
- package/dist/core/importer/index.d.ts +20 -0
- package/dist/core/importer/index.d.ts.map +1 -0
- package/dist/core/importer/index.js +18 -0
- package/dist/core/importer/index.js.map +1 -0
- package/dist/core/importer/lexer.d.ts +68 -0
- package/dist/core/importer/lexer.d.ts.map +1 -0
- package/dist/core/importer/lexer.js +207 -0
- package/dist/core/importer/lexer.js.map +1 -0
- package/dist/core/importer/names.d.ts +41 -0
- package/dist/core/importer/names.d.ts.map +1 -0
- package/dist/core/importer/names.js +78 -0
- package/dist/core/importer/names.js.map +1 -0
- package/dist/core/importer/orders.d.ts +8 -0
- package/dist/core/importer/orders.d.ts.map +1 -0
- package/dist/core/importer/orders.js +332 -0
- package/dist/core/importer/orders.js.map +1 -0
- package/dist/core/importer/outputs.d.ts +19 -0
- package/dist/core/importer/outputs.d.ts.map +1 -0
- package/dist/core/importer/outputs.js +266 -0
- package/dist/core/importer/outputs.js.map +1 -0
- package/dist/core/importer/parser.d.ts +5 -0
- package/dist/core/importer/parser.d.ts.map +1 -0
- package/dist/core/importer/parser.js +439 -0
- package/dist/core/importer/parser.js.map +1 -0
- package/dist/core/importer/presence.d.ts +32 -0
- package/dist/core/importer/presence.d.ts.map +1 -0
- package/dist/core/importer/presence.js +146 -0
- package/dist/core/importer/presence.js.map +1 -0
- package/dist/core/importer/settle.d.ts +23 -0
- package/dist/core/importer/settle.d.ts.map +1 -0
- package/dist/core/importer/settle.js +135 -0
- package/dist/core/importer/settle.js.map +1 -0
- package/dist/core/importer/statements.d.ts +4 -0
- package/dist/core/importer/statements.d.ts.map +1 -0
- package/dist/core/importer/statements.js +339 -0
- package/dist/core/importer/statements.js.map +1 -0
- package/dist/core/importer/syntax.d.ts +182 -0
- package/dist/core/importer/syntax.d.ts.map +1 -0
- package/dist/core/importer/syntax.js +14 -0
- package/dist/core/importer/syntax.js.map +1 -0
- package/dist/core/importer/table.d.ts +52 -0
- package/dist/core/importer/table.d.ts.map +1 -0
- package/dist/core/importer/table.js +156 -0
- package/dist/core/importer/table.js.map +1 -0
- package/dist/core/importer/values.d.ts +27 -0
- package/dist/core/importer/values.d.ts.map +1 -0
- package/dist/core/importer/values.js +236 -0
- package/dist/core/importer/values.js.map +1 -0
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/stdlib/calendar/civil.d.ts.map +1 -1
- package/dist/core/stdlib/calendar/civil.js +5 -2
- package/dist/core/stdlib/calendar/civil.js.map +1 -1
- package/dist/core/version/version.generated.d.ts +1 -1
- package/dist/core/version/version.generated.js +1 -1
- package/package.json +5 -2
- package/spec/errors.json +380 -20
- package/src/adapters/charts/run.ts +6 -0
- package/src/adapters/charts/tables.ts +6 -19
- package/src/adapters/charts/undrawable.ts +51 -0
- package/src/core/backtest/drive.ts +66 -154
- package/src/core/backtest/index.ts +2 -0
- package/src/core/backtest/walk.ts +182 -0
- package/src/core/catalogue/catalogue.generated.ts +18 -1
- package/src/core/catalogue/types.ts +8 -2
- package/src/core/catalogue/values.generated.ts +16 -0
- package/src/core/check/assigned.ts +31 -0
- package/src/core/check/call-sites.ts +11 -4
- package/src/core/check/calls.ts +13 -4
- package/src/core/check/check.ts +14 -2
- package/src/core/check/checker.ts +39 -2
- package/src/core/check/constant.ts +57 -0
- package/src/core/check/deleted.ts +135 -0
- package/src/core/check/expressions.ts +1 -1
- package/src/core/check/library-output.ts +1 -0
- package/src/core/check/library-prose.generated.ts +10 -10
- package/src/core/check/library.ts +8 -0
- package/src/core/check/surface.ts +16 -0
- package/src/core/engine/bar-source.ts +113 -0
- package/src/core/engine/engine.ts +26 -25
- package/src/core/engine/guard.ts +12 -1
- package/src/core/engine/host.ts +4 -2
- package/src/core/engine/index.ts +1 -0
- package/src/core/engine/library/binding.ts +2 -0
- package/src/core/engine/library/index.ts +11 -0
- package/src/core/engine/library/objects.ts +1 -6
- package/src/core/engine/request-body.ts +5 -7
- package/src/core/engine/request-plan.ts +3 -3
- package/src/core/engine/requests.ts +11 -8
- package/src/core/engine/series.ts +30 -6
- package/src/core/engine/session/record.ts +4 -4
- package/src/core/importer/calls.ts +274 -0
- package/src/core/importer/context.ts +197 -0
- package/src/core/importer/expressions.ts +247 -0
- package/src/core/importer/importer.ts +226 -0
- package/src/core/importer/index.ts +19 -0
- package/src/core/importer/lexer.ts +285 -0
- package/src/core/importer/names.ts +104 -0
- package/src/core/importer/orders.ts +307 -0
- package/src/core/importer/outputs.ts +245 -0
- package/src/core/importer/parser.ts +436 -0
- package/src/core/importer/presence.ts +164 -0
- package/src/core/importer/settle.ts +141 -0
- package/src/core/importer/statements.ts +331 -0
- package/src/core/importer/syntax.ts +144 -0
- package/src/core/importer/table.ts +191 -0
- package/src/core/importer/values.ts +241 -0
- package/src/core/index.ts +13 -0
- package/src/core/stdlib/calendar/civil.ts +5 -2
- package/src/core/version/version.generated.ts +1 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the translators share while they work through one script.
|
|
3
|
+
*
|
|
4
|
+
* A translation is kept or refused per top level statement, never per line
|
|
5
|
+
* inside one: a block with one line missing is a block that means something
|
|
6
|
+
* the original did not, so the unit that is kept as a comment is the whole
|
|
7
|
+
* statement at the top level. `Node` is that unit, and everything a refusal or
|
|
8
|
+
* a warning needs to point at is recorded against it rather than decided on the
|
|
9
|
+
* spot, because a statement translated now can still be refused later: by the
|
|
10
|
+
* compiler, or because an earlier statement it reads was refused.
|
|
11
|
+
*/
|
|
12
|
+
import type { Diagnostic } from '../diagnostics/index.js';
|
|
13
|
+
import type { SourceFile } from '../source/index.js';
|
|
14
|
+
import type { Span } from '../span/index.js';
|
|
15
|
+
import { Namer, Scope } from './names.js';
|
|
16
|
+
import type { Binding } from './names.js';
|
|
17
|
+
import type { Expr, Lines, Named, Place, Stmt } from './syntax.js';
|
|
18
|
+
export interface OutLine {
|
|
19
|
+
readonly depth: number;
|
|
20
|
+
readonly text: string;
|
|
21
|
+
}
|
|
22
|
+
/** A finding on a statement that is kept, and the key that makes it once per script where it is once per built-in. */
|
|
23
|
+
export interface Note {
|
|
24
|
+
readonly diagnostic: Diagnostic;
|
|
25
|
+
readonly once: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface Node {
|
|
28
|
+
readonly stmt: Stmt;
|
|
29
|
+
readonly lines: Lines;
|
|
30
|
+
/** Top level names the statement declares, so what reads them can follow it. */
|
|
31
|
+
readonly declares: readonly Named[];
|
|
32
|
+
/** Top level names it reads, in source order, with where. */
|
|
33
|
+
readonly reads: Named[];
|
|
34
|
+
output: OutLine[];
|
|
35
|
+
/** Why its translation was refused, if it was. */
|
|
36
|
+
refusal: Diagnostic | undefined;
|
|
37
|
+
/** Why the compiler refused the translation, if it did. */
|
|
38
|
+
failed: Diagnostic | undefined;
|
|
39
|
+
/** Why it reads a name a refused statement declared, recomputed on every pass. */
|
|
40
|
+
lost: Diagnostic | undefined;
|
|
41
|
+
readonly notes: Note[];
|
|
42
|
+
/** The declaration, which is placed first and is never kept as a comment. */
|
|
43
|
+
readonly declaration: boolean;
|
|
44
|
+
}
|
|
45
|
+
export declare function isKept(node: Node): boolean;
|
|
46
|
+
/** The first reason a node is not kept, in the order the reasons are found. */
|
|
47
|
+
export declare function reasonOf(node: Node): Diagnostic | undefined;
|
|
48
|
+
export type Version = 5 | 6;
|
|
49
|
+
export interface Reassignment {
|
|
50
|
+
readonly op: string;
|
|
51
|
+
readonly value: Expr;
|
|
52
|
+
}
|
|
53
|
+
/** Everything about the script the translators need before they start. */
|
|
54
|
+
export interface Facts {
|
|
55
|
+
readonly file: SourceFile;
|
|
56
|
+
readonly version: Version;
|
|
57
|
+
/** Every identifier the source writes. */
|
|
58
|
+
readonly used: ReadonlySet<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Every reassignment the source makes, by name, anywhere in the file. A name
|
|
61
|
+
* with any is never a constant, and is present only if every value it is
|
|
62
|
+
* given is.
|
|
63
|
+
*/
|
|
64
|
+
readonly reassigned: ReadonlyMap<string, readonly Reassignment[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Every name the file declares at the top level, wherever. OpenScript lets a
|
|
67
|
+
* block or a function see one declared below it, so an inner declaration of
|
|
68
|
+
* the same name is renamed, which the source dialect's meaning allows.
|
|
69
|
+
*/
|
|
70
|
+
readonly globals: ReadonlySet<string>;
|
|
71
|
+
/** The side each literal entry id opens, from the script's entry calls. */
|
|
72
|
+
readonly entries: ReadonlyMap<string, 'long' | 'short'>;
|
|
73
|
+
}
|
|
74
|
+
export declare class Context {
|
|
75
|
+
readonly namer: Namer;
|
|
76
|
+
readonly fileScope: Scope;
|
|
77
|
+
scope: Scope;
|
|
78
|
+
/** The statement being translated. */
|
|
79
|
+
node: Node | undefined;
|
|
80
|
+
/** Lines a statement needs evaluated before it, and whether it may have them. */
|
|
81
|
+
hoisted: OutLine[];
|
|
82
|
+
mayHoist: boolean;
|
|
83
|
+
/** Inside a ternary arm, where the source dialect evaluates lazily as OpenScript does. */
|
|
84
|
+
lazy: number;
|
|
85
|
+
depth: number;
|
|
86
|
+
/** The declaration's pyramiding, read as the source dialect reads it: 0 is 1. */
|
|
87
|
+
pyramiding: number;
|
|
88
|
+
/**
|
|
89
|
+
* Whether the declaration sizes orders in units. The source dialect counts a
|
|
90
|
+
* quantity written on an entry in contracts whatever the declaration says,
|
|
91
|
+
* and OpenScript counts it in the declaration's own unit.
|
|
92
|
+
*/
|
|
93
|
+
qtyInUnits: boolean;
|
|
94
|
+
readonly titles: Map<string, Set<string>>;
|
|
95
|
+
readonly facts: Facts;
|
|
96
|
+
constructor(facts: Facts);
|
|
97
|
+
span(at: Place): Span;
|
|
98
|
+
/** Records the first reason the current statement cannot be translated. */
|
|
99
|
+
refuse(diagnostic: Diagnostic): void;
|
|
100
|
+
get refused(): boolean;
|
|
101
|
+
note(diagnostic: Diagnostic, once?: string): void;
|
|
102
|
+
/** Whether declaring `name` in the current scope needs a new spelling to keep it apart. */
|
|
103
|
+
hides(name: string): boolean;
|
|
104
|
+
/** The binding a source name has here, recording a read of a top level one. */
|
|
105
|
+
lookup(name: string, at: Place): Binding | undefined;
|
|
106
|
+
/** Enters a block scope for the length of `work`. */
|
|
107
|
+
within<T>(work: () => T): T;
|
|
108
|
+
/**
|
|
109
|
+
* Moves an expression to its own line before the current statement, and
|
|
110
|
+
* returns the name it is read under, or undefined where it cannot be moved.
|
|
111
|
+
*/
|
|
112
|
+
hoist(text: string): string | undefined;
|
|
113
|
+
/** A title for a declared output that no other output of its kind has. */
|
|
114
|
+
title(kind: string, wanted: string): string;
|
|
115
|
+
}
|
|
116
|
+
/** A string literal in OpenScript's spelling of it (`language.md` 3.6). */
|
|
117
|
+
export declare function quoted(value: string): string;
|
|
118
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/importer/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,sHAAsH;AACtH,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,SAAS,KAAK,EAAE,CAAC;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IACxB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,kDAAkD;IAClD,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,2DAA2D;IAC3D,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,kFAAkF;IAClF,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAE1C;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,CAE3D;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACtB;AAED,0EAA0E;AAC1E,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;IAClE;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACzD;AAED,qBAAa,OAAO;IAClB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,QAAwB;IAC1C,KAAK,EAAE,KAAK,CAAkB;IAC9B,sCAAsC;IACtC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,iFAAiF;IACjF,OAAO,EAAE,OAAO,EAAE,CAAM;IACxB,QAAQ,UAAS;IACjB,0FAA0F;IAC1F,IAAI,SAAK;IACT,KAAK,SAAK;IACV,iFAAiF;IACjF,UAAU,SAAK;IACf;;;;OAIG;IACH,UAAU,UAAQ;IAClB,QAAQ,CAAC,MAAM,2BAAkC;IACjD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBAEV,KAAK,EAAE,KAAK;IAKxB,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI;IAIrB,2EAA2E;IAC3E,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIpC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjD,2FAA2F;IAC3F,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI5B,+EAA+E;IAC/E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS;IAMpD,qDAAqD;IACrD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;IAU3B;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOvC,0EAA0E;IAC1E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;CAW5C;AAID,2EAA2E;AAC3E,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAa5C"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { canonicalNumber } from '../emit/index.js';
|
|
2
|
+
import { Namer, Scope } from './names.js';
|
|
3
|
+
export function isKept(node) {
|
|
4
|
+
return node.refusal === undefined && node.failed === undefined && node.lost === undefined;
|
|
5
|
+
}
|
|
6
|
+
/** The first reason a node is not kept, in the order the reasons are found. */
|
|
7
|
+
export function reasonOf(node) {
|
|
8
|
+
return node.refusal ?? node.failed ?? node.lost;
|
|
9
|
+
}
|
|
10
|
+
export class Context {
|
|
11
|
+
namer;
|
|
12
|
+
fileScope = new Scope(undefined);
|
|
13
|
+
scope = this.fileScope;
|
|
14
|
+
/** The statement being translated. */
|
|
15
|
+
node;
|
|
16
|
+
/** Lines a statement needs evaluated before it, and whether it may have them. */
|
|
17
|
+
hoisted = [];
|
|
18
|
+
mayHoist = false;
|
|
19
|
+
/** Inside a ternary arm, where the source dialect evaluates lazily as OpenScript does. */
|
|
20
|
+
lazy = 0;
|
|
21
|
+
depth = 0;
|
|
22
|
+
/** The declaration's pyramiding, read as the source dialect reads it: 0 is 1. */
|
|
23
|
+
pyramiding = 1;
|
|
24
|
+
/**
|
|
25
|
+
* Whether the declaration sizes orders in units. The source dialect counts a
|
|
26
|
+
* quantity written on an entry in contracts whatever the declaration says,
|
|
27
|
+
* and OpenScript counts it in the declaration's own unit.
|
|
28
|
+
*/
|
|
29
|
+
qtyInUnits = true;
|
|
30
|
+
titles = new Map();
|
|
31
|
+
facts;
|
|
32
|
+
constructor(facts) {
|
|
33
|
+
this.facts = facts;
|
|
34
|
+
this.namer = new Namer(facts.used);
|
|
35
|
+
}
|
|
36
|
+
span(at) {
|
|
37
|
+
return this.facts.file.spanAt(at.offset, at.length);
|
|
38
|
+
}
|
|
39
|
+
/** Records the first reason the current statement cannot be translated. */
|
|
40
|
+
refuse(diagnostic) {
|
|
41
|
+
if (this.node !== undefined && this.node.refusal === undefined)
|
|
42
|
+
this.node.refusal = diagnostic;
|
|
43
|
+
}
|
|
44
|
+
get refused() {
|
|
45
|
+
return this.node?.refusal !== undefined;
|
|
46
|
+
}
|
|
47
|
+
note(diagnostic, once) {
|
|
48
|
+
this.node?.notes.push({ diagnostic, once });
|
|
49
|
+
}
|
|
50
|
+
/** Whether declaring `name` in the current scope needs a new spelling to keep it apart. */
|
|
51
|
+
hides(name) {
|
|
52
|
+
return this.scope.find(name) !== undefined || (!this.scope.isGlobal && this.facts.globals.has(name));
|
|
53
|
+
}
|
|
54
|
+
/** The binding a source name has here, recording a read of a top level one. */
|
|
55
|
+
lookup(name, at) {
|
|
56
|
+
const found = this.scope.find(name);
|
|
57
|
+
if (found !== undefined && found.topLevel)
|
|
58
|
+
this.node?.reads.push({ name, at });
|
|
59
|
+
return found;
|
|
60
|
+
}
|
|
61
|
+
/** Enters a block scope for the length of `work`. */
|
|
62
|
+
within(work) {
|
|
63
|
+
const outer = this.scope;
|
|
64
|
+
this.scope = new Scope(outer);
|
|
65
|
+
try {
|
|
66
|
+
return work();
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
this.scope = outer;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Moves an expression to its own line before the current statement, and
|
|
74
|
+
* returns the name it is read under, or undefined where it cannot be moved.
|
|
75
|
+
*/
|
|
76
|
+
hoist(text) {
|
|
77
|
+
if (!this.mayHoist || this.lazy > 0)
|
|
78
|
+
return undefined;
|
|
79
|
+
const name = this.namer.fresh('everyBar');
|
|
80
|
+
this.hoisted.push({ depth: this.depth, text: `${name} = ${text}` });
|
|
81
|
+
return name;
|
|
82
|
+
}
|
|
83
|
+
/** A title for a declared output that no other output of its kind has. */
|
|
84
|
+
title(kind, wanted) {
|
|
85
|
+
let seen = this.titles.get(kind);
|
|
86
|
+
if (seen === undefined) {
|
|
87
|
+
seen = new Set();
|
|
88
|
+
this.titles.set(kind, seen);
|
|
89
|
+
}
|
|
90
|
+
let title = wanted;
|
|
91
|
+
for (let n = 2; seen.has(title); n += 1)
|
|
92
|
+
title = `${wanted} ${canonicalNumber(n)}`;
|
|
93
|
+
seen.add(title);
|
|
94
|
+
return title;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const HEX = '0123456789abcdef';
|
|
98
|
+
/** A string literal in OpenScript's spelling of it (`language.md` 3.6). */
|
|
99
|
+
export function quoted(value) {
|
|
100
|
+
let out = '"';
|
|
101
|
+
for (const c of value) {
|
|
102
|
+
const code = c.codePointAt(0) ?? 0;
|
|
103
|
+
if (c === '"')
|
|
104
|
+
out += '\\"';
|
|
105
|
+
else if (c === '\\')
|
|
106
|
+
out += '\\\\';
|
|
107
|
+
else if (c === '\n')
|
|
108
|
+
out += '\\n';
|
|
109
|
+
else if (c === '\t')
|
|
110
|
+
out += '\\t';
|
|
111
|
+
else if (c === '\r')
|
|
112
|
+
out += '\\r';
|
|
113
|
+
else if (code < 0x20)
|
|
114
|
+
out += `\\u00${HEX[code >> 4] ?? '0'}${HEX[code & 15] ?? '0'}`;
|
|
115
|
+
else
|
|
116
|
+
out += c;
|
|
117
|
+
}
|
|
118
|
+
return `${out}"`;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/importer/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expressions in the source dialect, read by recursive descent.
|
|
3
|
+
*
|
|
4
|
+
* The precedence ladder is the source dialect's, and it is the same shape as
|
|
5
|
+
* OpenScript's (`language.md` 9.1): the ternary lowest, then `or`, `and`,
|
|
6
|
+
* equality, comparison, the additive and multiplicative operators, and the
|
|
7
|
+
* unary operators with `not` among them. So a tree read here prints back into
|
|
8
|
+
* OpenScript with parentheses only where the tree needs them, and never with a
|
|
9
|
+
* different grouping.
|
|
10
|
+
*
|
|
11
|
+
* What the reader does not accept it reports by throwing `Unreadable` with the
|
|
12
|
+
* place and a few words naming the form, and the statement reader turns that
|
|
13
|
+
* into a statement kept whole. It is the one exception in the importer, and it
|
|
14
|
+
* never leaves this module and the statement reader beside it.
|
|
15
|
+
*/
|
|
16
|
+
import type { Token } from './lexer.js';
|
|
17
|
+
import type { Expr, Place } from './syntax.js';
|
|
18
|
+
/** A form the reader does not accept, and where it starts. */
|
|
19
|
+
export declare class Unreadable extends Error {
|
|
20
|
+
readonly at: Place;
|
|
21
|
+
readonly construct: string;
|
|
22
|
+
constructor(at: Place, construct: string);
|
|
23
|
+
}
|
|
24
|
+
/** The words the reader takes for a form it does not read, per bad token. */
|
|
25
|
+
export declare function badConstruct(token: Token): string;
|
|
26
|
+
export declare const UNREAD = "a statement in a form its reader does not accept";
|
|
27
|
+
export declare class Cursor {
|
|
28
|
+
index: number;
|
|
29
|
+
readonly tokens: readonly Token[];
|
|
30
|
+
constructor(tokens: readonly Token[]);
|
|
31
|
+
peek(ahead?: number): Token | undefined;
|
|
32
|
+
/** Whether the next token is this operator or word. */
|
|
33
|
+
sees(text: string, ahead?: number): boolean;
|
|
34
|
+
done(): boolean;
|
|
35
|
+
take(): Token;
|
|
36
|
+
expect(text: string): Token;
|
|
37
|
+
/** Refuse at the next token, or at the end of the line when there is none. */
|
|
38
|
+
fail(): never;
|
|
39
|
+
/** Zero width, just after the last token. */
|
|
40
|
+
endPlace(): Place;
|
|
41
|
+
}
|
|
42
|
+
export declare function placeOf(token: Token): Place;
|
|
43
|
+
export declare function expression(c: Cursor): Expr;
|
|
44
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/core/importer/expressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,KAAK,EAAO,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpD,8DAA8D;AAC9D,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM;CAKzC;AAUD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAIjD;AAED,eAAO,MAAM,MAAM,qDAAqD,CAAC;AAEzE,qBAAa,MAAM;IACjB,KAAK,SAAK;IACV,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;gBAEtB,MAAM,EAAE,SAAS,KAAK,EAAE;IAIpC,IAAI,CAAC,KAAK,SAAI,GAAG,KAAK,GAAG,SAAS;IAIlC,uDAAuD;IACvD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO;IAKtC,IAAI,IAAI,OAAO;IAIf,IAAI,IAAI,KAAK;IAOb,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAK3B,8EAA8E;IAC9E,IAAI,IAAI,KAAK;IAOb,6CAA6C;IAC7C,QAAQ,IAAI,KAAK;CAIlB;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE3C;AAwBD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAE1C"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { joined } from './syntax.js';
|
|
2
|
+
/** A form the reader does not accept, and where it starts. */
|
|
3
|
+
export class Unreadable extends Error {
|
|
4
|
+
at;
|
|
5
|
+
construct;
|
|
6
|
+
constructor(at, construct) {
|
|
7
|
+
super(construct);
|
|
8
|
+
this.at = at;
|
|
9
|
+
this.construct = construct;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Words that open a statement form and are never a value. */
|
|
13
|
+
const STATEMENT_WORDS = {
|
|
14
|
+
if: 'an if used as a value',
|
|
15
|
+
switch: 'a switch used as a value',
|
|
16
|
+
for: 'a for loop used as a value',
|
|
17
|
+
while: 'a while loop used as a value',
|
|
18
|
+
};
|
|
19
|
+
/** The words the reader takes for a form it does not read, per bad token. */
|
|
20
|
+
export function badConstruct(token) {
|
|
21
|
+
if (token.text.startsWith('"') || token.text.startsWith("'"))
|
|
22
|
+
return 'a string that is never closed';
|
|
23
|
+
if (token.text.startsWith('#'))
|
|
24
|
+
return `the colour literal ${token.text}`;
|
|
25
|
+
return `the character ${token.text}`;
|
|
26
|
+
}
|
|
27
|
+
export const UNREAD = 'a statement in a form its reader does not accept';
|
|
28
|
+
export class Cursor {
|
|
29
|
+
index = 0;
|
|
30
|
+
tokens;
|
|
31
|
+
constructor(tokens) {
|
|
32
|
+
this.tokens = tokens;
|
|
33
|
+
}
|
|
34
|
+
peek(ahead = 0) {
|
|
35
|
+
return this.tokens[this.index + ahead];
|
|
36
|
+
}
|
|
37
|
+
/** Whether the next token is this operator or word. */
|
|
38
|
+
sees(text, ahead = 0) {
|
|
39
|
+
const token = this.peek(ahead);
|
|
40
|
+
return token !== undefined && (token.kind === 'op' || token.kind === 'name') && token.text === text;
|
|
41
|
+
}
|
|
42
|
+
done() {
|
|
43
|
+
return this.index >= this.tokens.length;
|
|
44
|
+
}
|
|
45
|
+
take() {
|
|
46
|
+
const token = this.tokens[this.index];
|
|
47
|
+
if (token === undefined)
|
|
48
|
+
throw new Unreadable(this.endPlace(), UNREAD);
|
|
49
|
+
this.index += 1;
|
|
50
|
+
return token;
|
|
51
|
+
}
|
|
52
|
+
expect(text) {
|
|
53
|
+
if (!this.sees(text))
|
|
54
|
+
this.fail();
|
|
55
|
+
return this.take();
|
|
56
|
+
}
|
|
57
|
+
/** Refuse at the next token, or at the end of the line when there is none. */
|
|
58
|
+
fail() {
|
|
59
|
+
const token = this.peek();
|
|
60
|
+
if (token === undefined)
|
|
61
|
+
throw new Unreadable(this.endPlace(), UNREAD);
|
|
62
|
+
if (token.kind === 'bad')
|
|
63
|
+
throw new Unreadable(placeOf(token), badConstruct(token));
|
|
64
|
+
throw new Unreadable(placeOf(token), UNREAD);
|
|
65
|
+
}
|
|
66
|
+
/** Zero width, just after the last token. */
|
|
67
|
+
endPlace() {
|
|
68
|
+
const last = this.tokens[this.tokens.length - 1];
|
|
69
|
+
return last === undefined ? { offset: 0, length: 0 } : { offset: last.offset + last.length, length: 0 };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function placeOf(token) {
|
|
73
|
+
return { offset: token.offset, length: token.length };
|
|
74
|
+
}
|
|
75
|
+
const COMPARISON = new Set(['<', '<=', '>', '>=']);
|
|
76
|
+
const EQUALITY = new Set(['==', '!=']);
|
|
77
|
+
const ADDITIVE = new Set(['+', '-']);
|
|
78
|
+
const MULTIPLICATIVE = new Set(['*', '/', '%']);
|
|
79
|
+
/** One left associative level of binary operators. */
|
|
80
|
+
function binaryLevel(operators, next, words = false) {
|
|
81
|
+
return (c) => {
|
|
82
|
+
let left = next(c);
|
|
83
|
+
for (;;) {
|
|
84
|
+
const token = c.peek();
|
|
85
|
+
if (token === undefined || !operators.has(token.text))
|
|
86
|
+
return left;
|
|
87
|
+
if (words ? token.kind !== 'name' : token.kind !== 'op')
|
|
88
|
+
return left;
|
|
89
|
+
c.take();
|
|
90
|
+
const right = next(c);
|
|
91
|
+
left = { kind: 'binary', op: token.text, left, right, at: joined(left.at, right.at), opAt: placeOf(token) };
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export function expression(c) {
|
|
96
|
+
return ternary(c);
|
|
97
|
+
}
|
|
98
|
+
function ternary(c) {
|
|
99
|
+
const condition = orLevel(c);
|
|
100
|
+
if (!c.sees('?'))
|
|
101
|
+
return condition;
|
|
102
|
+
c.take();
|
|
103
|
+
const then = ternary(c);
|
|
104
|
+
c.expect(':');
|
|
105
|
+
const otherwise = ternary(c);
|
|
106
|
+
return { kind: 'ternary', condition, then, otherwise, at: joined(condition.at, otherwise.at) };
|
|
107
|
+
}
|
|
108
|
+
function unary(c) {
|
|
109
|
+
const token = c.peek();
|
|
110
|
+
if (token !== undefined) {
|
|
111
|
+
const sign = token.kind === 'op' && (token.text === '-' || token.text === '+');
|
|
112
|
+
const not = token.kind === 'name' && token.text === 'not';
|
|
113
|
+
if (sign || not) {
|
|
114
|
+
c.take();
|
|
115
|
+
const operand = unary(c);
|
|
116
|
+
return { kind: 'unary', op: token.text, operand, at: joined(placeOf(token), operand.at) };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return postfix(c);
|
|
120
|
+
}
|
|
121
|
+
const multiplicative = binaryLevel(MULTIPLICATIVE, unary);
|
|
122
|
+
const additive = binaryLevel(ADDITIVE, multiplicative);
|
|
123
|
+
const comparison = binaryLevel(COMPARISON, additive);
|
|
124
|
+
const equality = binaryLevel(EQUALITY, comparison);
|
|
125
|
+
const andLevel = binaryLevel(new Set(['and']), equality, true);
|
|
126
|
+
const orLevel = binaryLevel(new Set(['or']), andLevel, true);
|
|
127
|
+
function argumentsOf(c) {
|
|
128
|
+
const args = [];
|
|
129
|
+
if (c.sees(')'))
|
|
130
|
+
return args;
|
|
131
|
+
for (;;) {
|
|
132
|
+
const first = c.peek();
|
|
133
|
+
let label;
|
|
134
|
+
if (first !== undefined && first.kind === 'name' && c.sees('=', 1)) {
|
|
135
|
+
label = first.text;
|
|
136
|
+
c.take();
|
|
137
|
+
c.take();
|
|
138
|
+
}
|
|
139
|
+
const value = expression(c);
|
|
140
|
+
args.push({ label, value, at: first === undefined ? value.at : joined(placeOf(first), value.at) });
|
|
141
|
+
if (!c.sees(','))
|
|
142
|
+
return args;
|
|
143
|
+
c.take();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function postfix(c) {
|
|
147
|
+
let expr = primary(c);
|
|
148
|
+
for (;;) {
|
|
149
|
+
if (c.sees('(')) {
|
|
150
|
+
c.take();
|
|
151
|
+
const args = argumentsOf(c);
|
|
152
|
+
const close = c.expect(')');
|
|
153
|
+
expr = { kind: 'call', callee: expr, args, at: joined(expr.at, placeOf(close)) };
|
|
154
|
+
}
|
|
155
|
+
else if (c.sees('[')) {
|
|
156
|
+
c.take();
|
|
157
|
+
const index = expression(c);
|
|
158
|
+
const close = c.expect(']');
|
|
159
|
+
expr = { kind: 'index', target: expr, index, at: joined(expr.at, placeOf(close)) };
|
|
160
|
+
}
|
|
161
|
+
else if (c.sees('.')) {
|
|
162
|
+
c.take();
|
|
163
|
+
const property = c.take();
|
|
164
|
+
if (property.kind !== 'name')
|
|
165
|
+
throw new Unreadable(placeOf(property), UNREAD);
|
|
166
|
+
expr = { kind: 'member', object: expr, property: property.text, at: joined(expr.at, placeOf(property)) };
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
return expr;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function primary(c) {
|
|
174
|
+
const token = c.peek();
|
|
175
|
+
if (token === undefined)
|
|
176
|
+
c.fail();
|
|
177
|
+
const at = placeOf(token);
|
|
178
|
+
switch (token.kind) {
|
|
179
|
+
case 'number':
|
|
180
|
+
c.take();
|
|
181
|
+
return { kind: 'number', text: token.text, at };
|
|
182
|
+
case 'string':
|
|
183
|
+
c.take();
|
|
184
|
+
return { kind: 'string', value: token.value, at };
|
|
185
|
+
case 'color':
|
|
186
|
+
c.take();
|
|
187
|
+
return { kind: 'color', text: token.text, at };
|
|
188
|
+
case 'bad':
|
|
189
|
+
throw new Unreadable(at, badConstruct(token));
|
|
190
|
+
case 'name': {
|
|
191
|
+
const word = STATEMENT_WORDS[token.text];
|
|
192
|
+
if (word !== undefined)
|
|
193
|
+
throw new Unreadable(at, word);
|
|
194
|
+
c.take();
|
|
195
|
+
if (token.text === 'true' || token.text === 'false') {
|
|
196
|
+
return { kind: 'bool', value: token.text === 'true', at };
|
|
197
|
+
}
|
|
198
|
+
return { kind: 'name', name: token.text, at };
|
|
199
|
+
}
|
|
200
|
+
case 'op':
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
if (token.text === '(') {
|
|
204
|
+
c.take();
|
|
205
|
+
const inner = expression(c);
|
|
206
|
+
const close = c.expect(')');
|
|
207
|
+
return { kind: 'group', inner, at: joined(at, placeOf(close)) };
|
|
208
|
+
}
|
|
209
|
+
if (token.text === '[') {
|
|
210
|
+
c.take();
|
|
211
|
+
const items = [];
|
|
212
|
+
while (!c.sees(']')) {
|
|
213
|
+
items.push(expression(c));
|
|
214
|
+
if (!c.sees(','))
|
|
215
|
+
break;
|
|
216
|
+
c.take();
|
|
217
|
+
}
|
|
218
|
+
const close = c.expect(']');
|
|
219
|
+
return { kind: 'list', items, at: joined(at, placeOf(close)) };
|
|
220
|
+
}
|
|
221
|
+
return c.fail();
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../../src/core/importer/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Diagnostic } from '../diagnostics/index.js';
|
|
2
|
+
export interface ImportResult {
|
|
3
|
+
/** The OpenScript text, or the empty string where nothing could be translated. */
|
|
4
|
+
readonly source: string;
|
|
5
|
+
/** Every finding, positioned in the imported text, in the order a reader walks it. */
|
|
6
|
+
readonly findings: readonly Diagnostic[];
|
|
7
|
+
}
|
|
8
|
+
export interface ImportOptions {
|
|
9
|
+
/** What the imported text is called, for the first line of a rendered finding. */
|
|
10
|
+
readonly name?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function importScript(text: string, options?: ImportOptions): ImportResult;
|
|
13
|
+
//# sourceMappingURL=importer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../src/core/importer/importer.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAgB1D,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AA2GD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,CA4EpF"}
|