openalgo-script 0.5.0 → 0.7.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 +226 -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/channels.js +2 -2
- package/dist/core/engine/channels.js.map +1 -1
- 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 +26 -27
- 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/maths.js +2 -2
- package/dist/core/engine/library/maths.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/machine.js +5 -5
- package/dist/core/engine/machine.js.map +1 -1
- package/dist/core/engine/memory.js +2 -2
- package/dist/core/engine/memory.js.map +1 -1
- package/dist/core/engine/registers.js +2 -2
- package/dist/core/engine/registers.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/engine/values/index.d.ts +1 -1
- package/dist/core/engine/values/index.d.ts.map +1 -1
- package/dist/core/engine/values/index.js +1 -1
- package/dist/core/engine/values/index.js.map +1 -1
- package/dist/core/engine/values/value.d.ts +2 -0
- package/dist/core/engine/values/value.d.ts.map +1 -1
- package/dist/core/engine/values/value.js +4 -0
- package/dist/core/engine/values/value.js.map +1 -1
- 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/averages/exponential.d.ts.map +1 -1
- package/dist/core/stdlib/averages/exponential.js +3 -6
- package/dist/core/stdlib/averages/exponential.js.map +1 -1
- package/dist/core/stdlib/averages/gaussian.d.ts +15 -0
- package/dist/core/stdlib/averages/gaussian.d.ts.map +1 -0
- package/dist/core/stdlib/averages/gaussian.js +55 -0
- package/dist/core/stdlib/averages/gaussian.js.map +1 -0
- package/dist/core/stdlib/averages/shaped.d.ts +2 -6
- package/dist/core/stdlib/averages/shaped.d.ts.map +1 -1
- package/dist/core/stdlib/averages/shaped.js +8 -22
- package/dist/core/stdlib/averages/shaped.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/stdlib/maths/arithmetic.d.ts.map +1 -1
- package/dist/core/stdlib/maths/arithmetic.js +2 -1
- package/dist/core/stdlib/maths/arithmetic.js.map +1 -1
- package/dist/core/stdlib/maths/elementary.d.ts +3 -20
- package/dist/core/stdlib/maths/elementary.d.ts.map +1 -1
- package/dist/core/stdlib/maths/elementary.js +17 -13
- package/dist/core/stdlib/maths/elementary.js.map +1 -1
- package/dist/core/stdlib/maths/hypot.d.ts +8 -0
- package/dist/core/stdlib/maths/hypot.d.ts.map +1 -0
- package/dist/core/stdlib/maths/hypot.js +68 -0
- package/dist/core/stdlib/maths/hypot.js.map +1 -0
- package/dist/core/stdlib/maths/power.d.ts +3 -0
- package/dist/core/stdlib/maths/power.d.ts.map +1 -0
- package/dist/core/stdlib/maths/power.js +83 -0
- package/dist/core/stdlib/maths/power.js.map +1 -0
- package/dist/core/stdlib/maths/transcendental.d.ts +15 -0
- package/dist/core/stdlib/maths/transcendental.d.ts.map +1 -0
- package/dist/core/stdlib/maths/transcendental.js +185 -0
- package/dist/core/stdlib/maths/transcendental.js.map +1 -0
- package/dist/core/stdlib/maths/trigonometric.d.ts +4 -0
- package/dist/core/stdlib/maths/trigonometric.d.ts.map +1 -0
- package/dist/core/stdlib/maths/trigonometric.js +196 -0
- package/dist/core/stdlib/maths/trigonometric.js.map +1 -0
- package/dist/core/stdlib/series/conditions.d.ts +2 -4
- package/dist/core/stdlib/series/conditions.d.ts.map +1 -1
- package/dist/core/stdlib/series/conditions.js +9 -13
- package/dist/core/stdlib/series/conditions.js.map +1 -1
- package/dist/core/stdlib/series/statistics.d.ts.map +1 -1
- package/dist/core/stdlib/series/statistics.js +2 -0
- package/dist/core/stdlib/series/statistics.js.map +1 -1
- package/dist/core/stdlib/values/history.d.ts +26 -0
- package/dist/core/stdlib/values/history.d.ts.map +1 -0
- package/dist/core/stdlib/values/history.js +52 -0
- package/dist/core/stdlib/values/history.js.map +1 -0
- package/dist/core/stdlib/values/index.d.ts +1 -0
- package/dist/core/stdlib/values/index.d.ts.map +1 -1
- package/dist/core/stdlib/values/index.js +1 -0
- package/dist/core/stdlib/values/index.js.map +1 -1
- package/dist/core/stdlib/values/lookback.d.ts +4 -1
- package/dist/core/stdlib/values/lookback.d.ts.map +1 -1
- package/dist/core/stdlib/values/lookback.js +48 -45
- package/dist/core/stdlib/values/lookback.js.map +1 -1
- package/dist/core/stdlib/values/region.d.ts +6 -5
- package/dist/core/stdlib/values/region.d.ts.map +1 -1
- package/dist/core/stdlib/values/region.js +3 -3
- package/dist/core/stdlib/values/region.js.map +1 -1
- package/dist/core/stdlib/volatility/measures.d.ts.map +1 -1
- package/dist/core/stdlib/volatility/measures.js +6 -4
- package/dist/core/stdlib/volatility/measures.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 +13 -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/channels.ts +2 -2
- package/src/core/engine/engine.ts +29 -28
- 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/maths.ts +2 -2
- package/src/core/engine/library/objects.ts +1 -6
- package/src/core/engine/machine.ts +5 -5
- package/src/core/engine/memory.ts +2 -2
- package/src/core/engine/registers.ts +2 -2
- 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/engine/values/index.ts +1 -0
- package/src/core/engine/values/value.ts +5 -0
- 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/averages/exponential.ts +3 -4
- package/src/core/stdlib/averages/gaussian.ts +52 -0
- package/src/core/stdlib/averages/shaped.ts +8 -21
- package/src/core/stdlib/calendar/civil.ts +5 -2
- package/src/core/stdlib/maths/arithmetic.ts +2 -1
- package/src/core/stdlib/maths/elementary.ts +20 -33
- package/src/core/stdlib/maths/hypot.ts +63 -0
- package/src/core/stdlib/maths/power.ts +57 -0
- package/src/core/stdlib/maths/transcendental.ts +160 -0
- package/src/core/stdlib/maths/trigonometric.ts +160 -0
- package/src/core/stdlib/series/conditions.ts +9 -12
- package/src/core/stdlib/series/statistics.ts +1 -0
- package/src/core/stdlib/values/history.ts +70 -0
- package/src/core/stdlib/values/index.ts +1 -0
- package/src/core/stdlib/values/lookback.ts +51 -47
- package/src/core/stdlib/values/region.ts +7 -5
- package/src/core/stdlib/volatility/measures.ts +6 -4
- package/src/core/version/version.generated.ts +1 -1
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statements, written out as OpenScript lines.
|
|
3
|
+
*
|
|
4
|
+
* Each statement is translated inside a frame that collects the lines it needs
|
|
5
|
+
* evaluated before it: version 5's always evaluated right operand of `and` and
|
|
6
|
+
* `or`, moved to a line of its own (see `values.ts`). A frame allows that only
|
|
7
|
+
* where the moved line runs exactly as often as the statement did, so it is
|
|
8
|
+
* allowed for a plain statement and for the first condition of an `if`, and
|
|
9
|
+
* refused for an `else if`, a `while` and a `switch` arm, whose conditions the
|
|
10
|
+
* source evaluates only on some passes.
|
|
11
|
+
*/
|
|
12
|
+
import { diagnosticFor } from '../diagnostics/index.js';
|
|
13
|
+
import { canonicalNumber } from '../emit/index.js';
|
|
14
|
+
import { generic } from './calls.js';
|
|
15
|
+
import { binding } from './names.js';
|
|
16
|
+
import { fillLine, paintLine, plotCall, levelCall, shapeLines, translateInput } from './outputs.js';
|
|
17
|
+
import { closeLines, entryLines, exitLines } from './orders.js';
|
|
18
|
+
import { holdsState, mentions, neverAbsent, wholeConstant } from './presence.js';
|
|
19
|
+
import { pathOf } from './syntax.js';
|
|
20
|
+
import { CALLS } from './table.js';
|
|
21
|
+
import { translate, wrap, PREC } from './values.js';
|
|
22
|
+
/** Runs `work` in a frame of its own, and puts the lines it moved before its own. */
|
|
23
|
+
function framed(ctx, depth, mayHoist, work) {
|
|
24
|
+
const held = { hoisted: ctx.hoisted, mayHoist: ctx.mayHoist, depth: ctx.depth };
|
|
25
|
+
ctx.hoisted = [];
|
|
26
|
+
ctx.mayHoist = mayHoist;
|
|
27
|
+
ctx.depth = depth;
|
|
28
|
+
try {
|
|
29
|
+
const lines = work();
|
|
30
|
+
return [...ctx.hoisted, ...lines];
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
ctx.hoisted = held.hoisted;
|
|
34
|
+
ctx.mayHoist = held.mayHoist;
|
|
35
|
+
ctx.depth = held.depth;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** A condition read where nothing may be moved out of it. */
|
|
39
|
+
function fixedCondition(ctx, expr) {
|
|
40
|
+
const may = ctx.mayHoist;
|
|
41
|
+
ctx.mayHoist = false;
|
|
42
|
+
try {
|
|
43
|
+
return translate(ctx, expr).text;
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
ctx.mayHoist = may;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function translateBody(ctx, body, depth) {
|
|
50
|
+
const lines = [];
|
|
51
|
+
for (const entry of body) {
|
|
52
|
+
if (entry.kind === 'remark')
|
|
53
|
+
lines.push({ depth, text: `//${entry.remark.text}` });
|
|
54
|
+
else if (entry.kind === 'blank')
|
|
55
|
+
lines.push({ depth, text: '' });
|
|
56
|
+
else
|
|
57
|
+
lines.push(...translateStatement(ctx, entry.stmt, depth));
|
|
58
|
+
}
|
|
59
|
+
return lines;
|
|
60
|
+
}
|
|
61
|
+
function block(ctx, body, depth) {
|
|
62
|
+
return ctx.within(() => translateBody(ctx, body, depth));
|
|
63
|
+
}
|
|
64
|
+
/** Where the value is a call, its path, unless the script declares the name. */
|
|
65
|
+
function builtInPath(ctx, expr) {
|
|
66
|
+
if (expr.kind !== 'call')
|
|
67
|
+
return undefined;
|
|
68
|
+
const path = pathOf(expr.callee);
|
|
69
|
+
if (path === undefined || ctx.scope.find(path.split('.')[0] ?? '') !== undefined)
|
|
70
|
+
return undefined;
|
|
71
|
+
return path;
|
|
72
|
+
}
|
|
73
|
+
function declare(ctx, stmt, depth) {
|
|
74
|
+
const name = stmt.name.name;
|
|
75
|
+
const output = ctx.namer.declare(name, ctx.hides(name));
|
|
76
|
+
const bound = binding(output, 'variable', ctx.scope.isGlobal);
|
|
77
|
+
// The source may read the name's own history in its first value, as OpenScript may.
|
|
78
|
+
if (mentions(stmt.value, name))
|
|
79
|
+
ctx.scope.names.set(name, bound);
|
|
80
|
+
const path = builtInPath(ctx, stmt.value);
|
|
81
|
+
const special = path === undefined ? undefined : CALLS.get(path)?.special;
|
|
82
|
+
let value;
|
|
83
|
+
if (special === 'input' && path !== undefined)
|
|
84
|
+
value = translateInput(ctx, stmt.value, path, true);
|
|
85
|
+
else if (special === 'plot' && path !== undefined)
|
|
86
|
+
value = plotCall(ctx, stmt.value, path);
|
|
87
|
+
else if (special === 'hline' && path !== undefined)
|
|
88
|
+
value = levelCall(ctx, stmt.value, path);
|
|
89
|
+
else
|
|
90
|
+
value = translate(ctx, stmt.value);
|
|
91
|
+
bound.handle = special === 'plot' ? 'plot' : special === 'hline' ? 'level' : undefined;
|
|
92
|
+
const reassigned = ctx.facts.reassigned.get(name);
|
|
93
|
+
bound.present = neverAbsent(ctx, stmt.value);
|
|
94
|
+
bound.whole = reassigned === undefined && stmt.mode === 'plain' && ctx.scope.isGlobal && wholeConstant(ctx, stmt.value);
|
|
95
|
+
ctx.scope.names.set(name, bound);
|
|
96
|
+
// Present only if every later value is, each read as if the name itself were.
|
|
97
|
+
if (bound.present && reassigned !== undefined) {
|
|
98
|
+
bound.present = reassigned.every((one) => one.op !== '/=' && one.op !== '%=' && neverAbsent(ctx, one.value));
|
|
99
|
+
}
|
|
100
|
+
const prefix = stmt.mode === 'var' ? 'var ' : stmt.mode === 'varip' ? 'live var ' : '';
|
|
101
|
+
return [{ depth, text: `${prefix}${output} = ${value.text}` }];
|
|
102
|
+
}
|
|
103
|
+
/** How each tuple built-in's elements line up with OpenScript's array. */
|
|
104
|
+
const ELEMENTS = {
|
|
105
|
+
'ta.macd': [0, 1, 2],
|
|
106
|
+
'ta.bb': [0, 1, 2],
|
|
107
|
+
'ta.supertrend': [0, 1],
|
|
108
|
+
'ta.dmi': [1, 2, 0],
|
|
109
|
+
};
|
|
110
|
+
function tuple(ctx, stmt, depth) {
|
|
111
|
+
const bindAll = () => {
|
|
112
|
+
for (const one of stmt.names) {
|
|
113
|
+
const out = ctx.namer.declare(one.name, ctx.hides(one.name));
|
|
114
|
+
ctx.scope.names.set(one.name, binding(out, 'variable', ctx.scope.isGlobal));
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const path = builtInPath(ctx, stmt.value);
|
|
118
|
+
const row = path === undefined ? undefined : CALLS.get(path);
|
|
119
|
+
const order = path === undefined ? undefined : ELEMENTS[path];
|
|
120
|
+
if (path === undefined || row === undefined || order === undefined || order.length !== stmt.names.length) {
|
|
121
|
+
if (path !== undefined && row === undefined && stmt.value.kind === 'call') {
|
|
122
|
+
ctx.refuse(diagnosticFor('OS9003', ctx.span(stmt.value.callee.at), { name: path }));
|
|
123
|
+
}
|
|
124
|
+
else
|
|
125
|
+
ctx.refuse(diagnosticFor('OS9002', ctx.span(stmt.at), { construct: 'a tuple assignment' }));
|
|
126
|
+
bindAll();
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
const value = generic(ctx, stmt.value, row, path);
|
|
130
|
+
const holder = ctx.namer.fresh(`${row.target}Result`);
|
|
131
|
+
const lines = [{ depth, text: `${holder} = ${value.text}` }];
|
|
132
|
+
stmt.names.forEach((one, i) => {
|
|
133
|
+
const out = ctx.namer.declare(one.name, ctx.hides(one.name));
|
|
134
|
+
ctx.scope.names.set(one.name, binding(out, 'variable', ctx.scope.isGlobal));
|
|
135
|
+
if (one.name !== '_')
|
|
136
|
+
lines.push({ depth, text: `${out} = ${holder}[${canonicalNumber(order[i] ?? 0)}]` });
|
|
137
|
+
});
|
|
138
|
+
return lines;
|
|
139
|
+
}
|
|
140
|
+
function assign(ctx, stmt, depth) {
|
|
141
|
+
const target = ctx.lookup(stmt.name.name, stmt.name.at);
|
|
142
|
+
if (target === undefined) {
|
|
143
|
+
ctx.refuse(diagnosticFor('OS9003', ctx.span(stmt.name.at), { name: stmt.name.name }));
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
if (target.kind !== 'variable') {
|
|
147
|
+
ctx.refuse(diagnosticFor('OS9002', ctx.span(stmt.name.at), { construct: 'an assignment to a loop variable or a parameter' }));
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
const value = translate(ctx, stmt.value);
|
|
151
|
+
return [{ depth, text: `${target.output} ${stmt.op === ':=' ? '=' : stmt.op} ${value.text}` }];
|
|
152
|
+
}
|
|
153
|
+
function evaluate(ctx, stmt, depth) {
|
|
154
|
+
const path = builtInPath(ctx, stmt.expr);
|
|
155
|
+
const call = stmt.expr;
|
|
156
|
+
switch (path === undefined ? undefined : CALLS.get(path)?.special) {
|
|
157
|
+
case 'declaration':
|
|
158
|
+
ctx.refuse(diagnosticFor('OS9004', ctx.span(call.callee.at), { found: 'makes a second one here' }));
|
|
159
|
+
return [];
|
|
160
|
+
case 'fill':
|
|
161
|
+
return fillLine(ctx, call, path ?? '', depth);
|
|
162
|
+
case 'paint':
|
|
163
|
+
return paintLine(ctx, call, path ?? '', path === 'bgcolor' ? 'background' : 'barColor', depth);
|
|
164
|
+
case 'shape':
|
|
165
|
+
return shapeLines(ctx, call, path ?? '', depth);
|
|
166
|
+
case 'entry':
|
|
167
|
+
return entryLines(ctx, call, path ?? '', depth);
|
|
168
|
+
case 'close':
|
|
169
|
+
case 'closeAll':
|
|
170
|
+
return closeLines(ctx, call, path ?? '', depth);
|
|
171
|
+
case 'exit':
|
|
172
|
+
return exitLines(ctx, call, path ?? '', depth);
|
|
173
|
+
}
|
|
174
|
+
return [{ depth, text: translate(ctx, stmt.expr).text }];
|
|
175
|
+
}
|
|
176
|
+
function ifLines(ctx, stmt, depth) {
|
|
177
|
+
const lines = [];
|
|
178
|
+
stmt.branches.forEach((branch, i) => {
|
|
179
|
+
const condition = i === 0 ? translate(ctx, branch.condition).text : fixedCondition(ctx, branch.condition);
|
|
180
|
+
lines.push({ depth, text: `${i === 0 ? 'if' : 'else if'} ${condition}` }, ...block(ctx, branch.body, depth + 1));
|
|
181
|
+
});
|
|
182
|
+
if (stmt.otherwise !== undefined)
|
|
183
|
+
lines.push({ depth, text: 'else' }, ...block(ctx, stmt.otherwise, depth + 1));
|
|
184
|
+
return lines;
|
|
185
|
+
}
|
|
186
|
+
/** A literal number, signed or not, as its value. */
|
|
187
|
+
function literalValue(expr) {
|
|
188
|
+
if (expr.kind === 'number')
|
|
189
|
+
return Number(expr.text);
|
|
190
|
+
if (expr.kind === 'unary' && expr.op === '-' && expr.operand.kind === 'number')
|
|
191
|
+
return -Number(expr.operand.text);
|
|
192
|
+
if (expr.kind === 'group')
|
|
193
|
+
return literalValue(expr.inner);
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
/** Names a loop body assigns, which a bound that is read again on each pass would see change. */
|
|
197
|
+
function assigned(body, into) {
|
|
198
|
+
for (const entry of body) {
|
|
199
|
+
if (entry.kind !== 'stmt')
|
|
200
|
+
continue;
|
|
201
|
+
const stmt = entry.stmt;
|
|
202
|
+
if (stmt.kind === 'assign' || stmt.kind === 'declare')
|
|
203
|
+
into.add(stmt.name.name);
|
|
204
|
+
if (stmt.kind === 'if') {
|
|
205
|
+
for (const branch of stmt.branches)
|
|
206
|
+
assigned(branch.body, into);
|
|
207
|
+
if (stmt.otherwise !== undefined)
|
|
208
|
+
assigned(stmt.otherwise, into);
|
|
209
|
+
}
|
|
210
|
+
if (stmt.kind === 'for' || stmt.kind === 'while')
|
|
211
|
+
assigned(stmt.body, into);
|
|
212
|
+
if (stmt.kind === 'switch')
|
|
213
|
+
for (const arm of stmt.arms)
|
|
214
|
+
assigned(arm.body, into);
|
|
215
|
+
}
|
|
216
|
+
return into;
|
|
217
|
+
}
|
|
218
|
+
function forLines(ctx, stmt, depth) {
|
|
219
|
+
const changes = assigned(stmt.body, new Set());
|
|
220
|
+
const bounds = [stmt.from, stmt.to, ...(stmt.by === undefined ? [] : [stmt.by])];
|
|
221
|
+
if (bounds.some((bound) => holdsState(ctx, bound) || [...changes].some((name) => mentions(bound, name)))) {
|
|
222
|
+
ctx.refuse(diagnosticFor('OS9002', ctx.span(stmt.at), { construct: 'a for loop whose bounds change as it runs' }));
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
const from = translate(ctx, stmt.from);
|
|
226
|
+
const to = translate(ctx, stmt.to);
|
|
227
|
+
const start = literalValue(stmt.from);
|
|
228
|
+
const end = literalValue(stmt.to);
|
|
229
|
+
const step = stmt.by === undefined ? undefined : literalValue(stmt.by);
|
|
230
|
+
let stepText = '';
|
|
231
|
+
if (stmt.by !== undefined) {
|
|
232
|
+
if (start === undefined || end === undefined || step === undefined || step <= 0 || start > end) {
|
|
233
|
+
ctx.refuse(diagnosticFor('OS9002', ctx.span(stmt.at), { construct: 'a for loop with a step whose direction the importer cannot settle' }));
|
|
234
|
+
return [];
|
|
235
|
+
}
|
|
236
|
+
stepText = ` step ${translate(ctx, stmt.by).text}`;
|
|
237
|
+
}
|
|
238
|
+
else if (start !== undefined && end !== undefined) {
|
|
239
|
+
if (start > end)
|
|
240
|
+
stepText = ' step -1';
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
stepText = ` step (${wrap(to, PREC.comparison + 1)} >= ${wrap(from, PREC.comparison + 1)} ? 1 : -1)`;
|
|
244
|
+
}
|
|
245
|
+
return ctx.within(() => {
|
|
246
|
+
const name = stmt.variable.name;
|
|
247
|
+
const output = ctx.namer.declare(name, ctx.hides(name));
|
|
248
|
+
ctx.scope.names.set(name, binding(output, 'loop', false));
|
|
249
|
+
const header = { depth, text: `for ${output} = ${from.text} to ${to.text}${stepText}` };
|
|
250
|
+
return [header, ...translateBody(ctx, stmt.body, depth + 1)];
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
function switchLines(ctx, stmt, depth) {
|
|
254
|
+
const subject = stmt.subject === undefined ? '' : ` ${fixedCondition(ctx, stmt.subject)}`;
|
|
255
|
+
const lines = [{ depth, text: `switch${subject}` }];
|
|
256
|
+
for (const arm of stmt.arms) {
|
|
257
|
+
const head = arm.match === undefined ? 'default' : `case ${fixedCondition(ctx, arm.match)}`;
|
|
258
|
+
lines.push({ depth: depth + 1, text: head }, ...block(ctx, arm.body, depth + 2));
|
|
259
|
+
}
|
|
260
|
+
return lines;
|
|
261
|
+
}
|
|
262
|
+
function functionLines(ctx, stmt, depth) {
|
|
263
|
+
const output = ctx.namer.declare(stmt.name.name, ctx.hides(stmt.name.name));
|
|
264
|
+
const fn = binding(output, 'function', ctx.scope.isGlobal);
|
|
265
|
+
ctx.scope.names.set(stmt.name.name, fn);
|
|
266
|
+
return ctx.within(() => {
|
|
267
|
+
const labels = new Map();
|
|
268
|
+
const params = stmt.params.map((param) => {
|
|
269
|
+
const fallback = param.fallback === undefined ? '' : ` = ${translate(ctx, param.fallback).text}`;
|
|
270
|
+
const out = ctx.namer.declare(param.name, ctx.hides(param.name));
|
|
271
|
+
ctx.scope.names.set(param.name, binding(out, 'parameter', false));
|
|
272
|
+
labels.set(param.name, out);
|
|
273
|
+
return `${out}${fallback}`;
|
|
274
|
+
});
|
|
275
|
+
fn.labels = labels;
|
|
276
|
+
const header = `fn ${output}(${params.join(', ')}) =>`;
|
|
277
|
+
if (!Array.isArray(stmt.body)) {
|
|
278
|
+
const body = stmt.body;
|
|
279
|
+
const lines = framed(ctx, depth + 1, true, () => [{ depth: depth + 1, text: translate(ctx, body).text }]);
|
|
280
|
+
if (lines.length === 1)
|
|
281
|
+
return [{ depth, text: `${header} ${lines[0]?.text ?? ''}` }];
|
|
282
|
+
return [{ depth, text: header }, ...lines];
|
|
283
|
+
}
|
|
284
|
+
const body = stmt.body;
|
|
285
|
+
const lines = translateBody(ctx, body, depth + 1);
|
|
286
|
+
const last = [...body].reverse().find((entry) => entry.kind === 'stmt');
|
|
287
|
+
const tail = last?.kind === 'stmt' ? last.stmt : undefined;
|
|
288
|
+
if (tail !== undefined && ['if', 'for', 'while', 'switch'].includes(tail.kind)) {
|
|
289
|
+
ctx.refuse(diagnosticFor('OS9002', ctx.span(tail.at), { construct: 'a function whose last line is a block' }));
|
|
290
|
+
return [];
|
|
291
|
+
}
|
|
292
|
+
if (tail !== undefined && (tail.kind === 'declare' || tail.kind === 'assign')) {
|
|
293
|
+
lines.push({ depth: depth + 1, text: ctx.scope.find(tail.name.name)?.output ?? tail.name.name });
|
|
294
|
+
}
|
|
295
|
+
return [{ depth, text: header }, ...lines];
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
/** A statement's own lines, before anything it moved out of itself is put in front. */
|
|
299
|
+
function ownLines(ctx, stmt, depth) {
|
|
300
|
+
switch (stmt.kind) {
|
|
301
|
+
case 'declare':
|
|
302
|
+
return declare(ctx, stmt, depth);
|
|
303
|
+
case 'tuple':
|
|
304
|
+
return tuple(ctx, stmt, depth);
|
|
305
|
+
case 'assign':
|
|
306
|
+
return assign(ctx, stmt, depth);
|
|
307
|
+
case 'evaluate':
|
|
308
|
+
return evaluate(ctx, stmt, depth);
|
|
309
|
+
case 'if':
|
|
310
|
+
return ifLines(ctx, stmt, depth);
|
|
311
|
+
case 'for':
|
|
312
|
+
return forLines(ctx, stmt, depth);
|
|
313
|
+
case 'while':
|
|
314
|
+
return [{ depth, text: `while ${fixedCondition(ctx, stmt.condition)}` }, ...block(ctx, stmt.body, depth + 1)];
|
|
315
|
+
case 'switch':
|
|
316
|
+
return switchLines(ctx, stmt, depth);
|
|
317
|
+
case 'break':
|
|
318
|
+
case 'continue':
|
|
319
|
+
return [{ depth, text: stmt.kind }];
|
|
320
|
+
case 'function':
|
|
321
|
+
return functionLines(ctx, stmt, depth);
|
|
322
|
+
case 'refused':
|
|
323
|
+
ctx.refuse(diagnosticFor('OS9002', ctx.span(stmt.at), { construct: stmt.construct }));
|
|
324
|
+
return [];
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/** Where the source wrote a comment after the statement, it goes after its first line. */
|
|
328
|
+
function remarked(stmt, lines) {
|
|
329
|
+
const first = lines[0];
|
|
330
|
+
if (first === undefined || stmt.remarks.length === 0)
|
|
331
|
+
return lines;
|
|
332
|
+
const trailing = stmt.remarks.map((one) => `//${one.text}`).join(' ');
|
|
333
|
+
return [{ depth: first.depth, text: `${first.text} ${trailing}` }, ...lines.slice(1)];
|
|
334
|
+
}
|
|
335
|
+
export function translateStatement(ctx, stmt, depth) {
|
|
336
|
+
const hoists = stmt.kind !== 'while' && stmt.kind !== 'switch' && stmt.kind !== 'function' && stmt.kind !== 'refused';
|
|
337
|
+
return framed(ctx, depth, hoists, () => remarked(stmt, ownLines(ctx, stmt, depth)));
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=statements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statements.js","sourceRoot":"","sources":["../../../src/core/importer/statements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tree the importer reads a source script into.
|
|
3
|
+
*
|
|
4
|
+
* It holds the subset of the source dialect the importer can say something
|
|
5
|
+
* about, and one node for everything else: a statement the reader could not
|
|
6
|
+
* take apart is kept whole as `refused`, carrying the few words that name what
|
|
7
|
+
* it is, so the translator can report it and keep it as a comment without
|
|
8
|
+
* having to understand it.
|
|
9
|
+
*/
|
|
10
|
+
import type { Remark } from './lexer.js';
|
|
11
|
+
/** A stretch of the input text: where a finding's caret goes. */
|
|
12
|
+
export interface Place {
|
|
13
|
+
readonly offset: number;
|
|
14
|
+
readonly length: number;
|
|
15
|
+
}
|
|
16
|
+
export type Expr = {
|
|
17
|
+
readonly kind: 'number';
|
|
18
|
+
readonly text: string;
|
|
19
|
+
readonly at: Place;
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: 'string';
|
|
22
|
+
readonly value: string;
|
|
23
|
+
readonly at: Place;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'bool';
|
|
26
|
+
readonly value: boolean;
|
|
27
|
+
readonly at: Place;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: 'color';
|
|
30
|
+
readonly text: string;
|
|
31
|
+
readonly at: Place;
|
|
32
|
+
} | {
|
|
33
|
+
readonly kind: 'name';
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly at: Place;
|
|
36
|
+
} | {
|
|
37
|
+
readonly kind: 'member';
|
|
38
|
+
readonly object: Expr;
|
|
39
|
+
readonly property: string;
|
|
40
|
+
readonly at: Place;
|
|
41
|
+
} | {
|
|
42
|
+
readonly kind: 'call';
|
|
43
|
+
readonly callee: Expr;
|
|
44
|
+
readonly args: readonly Arg[];
|
|
45
|
+
readonly at: Place;
|
|
46
|
+
} | {
|
|
47
|
+
readonly kind: 'index';
|
|
48
|
+
readonly target: Expr;
|
|
49
|
+
readonly index: Expr;
|
|
50
|
+
readonly at: Place;
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: 'unary';
|
|
53
|
+
readonly op: string;
|
|
54
|
+
readonly operand: Expr;
|
|
55
|
+
readonly at: Place;
|
|
56
|
+
} | {
|
|
57
|
+
readonly kind: 'binary';
|
|
58
|
+
readonly op: string;
|
|
59
|
+
readonly left: Expr;
|
|
60
|
+
readonly right: Expr;
|
|
61
|
+
readonly at: Place;
|
|
62
|
+
readonly opAt: Place;
|
|
63
|
+
} | {
|
|
64
|
+
readonly kind: 'ternary';
|
|
65
|
+
readonly condition: Expr;
|
|
66
|
+
readonly then: Expr;
|
|
67
|
+
readonly otherwise: Expr;
|
|
68
|
+
readonly at: Place;
|
|
69
|
+
} | {
|
|
70
|
+
readonly kind: 'group';
|
|
71
|
+
readonly inner: Expr;
|
|
72
|
+
readonly at: Place;
|
|
73
|
+
} | {
|
|
74
|
+
readonly kind: 'list';
|
|
75
|
+
readonly items: readonly Expr[];
|
|
76
|
+
readonly at: Place;
|
|
77
|
+
};
|
|
78
|
+
export type CallExpr = Extract<Expr, {
|
|
79
|
+
kind: 'call';
|
|
80
|
+
}>;
|
|
81
|
+
export interface Arg {
|
|
82
|
+
/** The label of a named argument, or undefined for a positional one. */
|
|
83
|
+
readonly label: string | undefined;
|
|
84
|
+
readonly value: Expr;
|
|
85
|
+
readonly at: Place;
|
|
86
|
+
}
|
|
87
|
+
/** The physical lines of the input a statement covers, its block included. */
|
|
88
|
+
export interface Lines {
|
|
89
|
+
readonly first: number;
|
|
90
|
+
readonly last: number;
|
|
91
|
+
}
|
|
92
|
+
interface Common {
|
|
93
|
+
/** The statement's head, where a finding about the whole statement points. */
|
|
94
|
+
readonly at: Place;
|
|
95
|
+
readonly lines: Lines;
|
|
96
|
+
readonly remarks: readonly Remark[];
|
|
97
|
+
}
|
|
98
|
+
export interface Named {
|
|
99
|
+
readonly name: string;
|
|
100
|
+
readonly at: Place;
|
|
101
|
+
}
|
|
102
|
+
export interface Param {
|
|
103
|
+
readonly name: string;
|
|
104
|
+
readonly at: Place;
|
|
105
|
+
readonly fallback: Expr | undefined;
|
|
106
|
+
}
|
|
107
|
+
export interface Branch {
|
|
108
|
+
readonly condition: Expr;
|
|
109
|
+
readonly body: Body;
|
|
110
|
+
}
|
|
111
|
+
export interface Arm {
|
|
112
|
+
/** The value or condition the arm matches, undefined for the default arm. */
|
|
113
|
+
readonly match: Expr | undefined;
|
|
114
|
+
readonly body: Body;
|
|
115
|
+
}
|
|
116
|
+
export type Stmt = (Common & {
|
|
117
|
+
readonly kind: 'declare';
|
|
118
|
+
readonly mode: 'plain' | 'var' | 'varip';
|
|
119
|
+
readonly name: Named;
|
|
120
|
+
readonly value: Expr;
|
|
121
|
+
}) | (Common & {
|
|
122
|
+
readonly kind: 'tuple';
|
|
123
|
+
readonly names: readonly Named[];
|
|
124
|
+
readonly value: Expr;
|
|
125
|
+
}) | (Common & {
|
|
126
|
+
readonly kind: 'assign';
|
|
127
|
+
readonly op: string;
|
|
128
|
+
readonly name: Named;
|
|
129
|
+
readonly value: Expr;
|
|
130
|
+
}) | (Common & {
|
|
131
|
+
readonly kind: 'evaluate';
|
|
132
|
+
readonly expr: Expr;
|
|
133
|
+
}) | (Common & {
|
|
134
|
+
readonly kind: 'if';
|
|
135
|
+
readonly branches: readonly Branch[];
|
|
136
|
+
readonly otherwise: Body | undefined;
|
|
137
|
+
}) | (Common & {
|
|
138
|
+
readonly kind: 'for';
|
|
139
|
+
readonly variable: Named;
|
|
140
|
+
readonly from: Expr;
|
|
141
|
+
readonly to: Expr;
|
|
142
|
+
readonly by: Expr | undefined;
|
|
143
|
+
readonly body: Body;
|
|
144
|
+
}) | (Common & {
|
|
145
|
+
readonly kind: 'while';
|
|
146
|
+
readonly condition: Expr;
|
|
147
|
+
readonly body: Body;
|
|
148
|
+
}) | (Common & {
|
|
149
|
+
readonly kind: 'switch';
|
|
150
|
+
readonly subject: Expr | undefined;
|
|
151
|
+
readonly arms: readonly Arm[];
|
|
152
|
+
}) | (Common & {
|
|
153
|
+
readonly kind: 'break' | 'continue';
|
|
154
|
+
}) | (Common & {
|
|
155
|
+
readonly kind: 'function';
|
|
156
|
+
readonly name: Named;
|
|
157
|
+
readonly params: readonly Param[];
|
|
158
|
+
readonly body: Expr | Body;
|
|
159
|
+
}) | (Common & {
|
|
160
|
+
readonly kind: 'refused';
|
|
161
|
+
/** A few words naming the form, which fill the finding's placeholder. */
|
|
162
|
+
readonly construct: string;
|
|
163
|
+
/** Names the statement would have declared, so what reads them follows it. */
|
|
164
|
+
readonly declares: readonly Named[];
|
|
165
|
+
});
|
|
166
|
+
export type Entry = {
|
|
167
|
+
readonly kind: 'stmt';
|
|
168
|
+
readonly stmt: Stmt;
|
|
169
|
+
} | {
|
|
170
|
+
readonly kind: 'remark';
|
|
171
|
+
readonly remark: Remark;
|
|
172
|
+
} | {
|
|
173
|
+
readonly kind: 'blank';
|
|
174
|
+
readonly line: number;
|
|
175
|
+
};
|
|
176
|
+
export type Body = readonly Entry[];
|
|
177
|
+
/** `ta.sma` for a member chain of plain names, and undefined for anything else. */
|
|
178
|
+
export declare function pathOf(expr: Expr): string | undefined;
|
|
179
|
+
/** The place covering two places and everything between them. */
|
|
180
|
+
export declare function joined(first: Place, last: Place): Place;
|
|
181
|
+
export {};
|
|
182
|
+
//# sourceMappingURL=syntax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../../src/core/importer/syntax.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** `ta.sma` for a member chain of plain names, and undefined for anything else. */
|
|
2
|
+
export function pathOf(expr) {
|
|
3
|
+
if (expr.kind === 'name')
|
|
4
|
+
return expr.name;
|
|
5
|
+
if (expr.kind !== 'member')
|
|
6
|
+
return undefined;
|
|
7
|
+
const base = pathOf(expr.object);
|
|
8
|
+
return base === undefined ? undefined : `${base}.${expr.property}`;
|
|
9
|
+
}
|
|
10
|
+
/** The place covering two places and everything between them. */
|
|
11
|
+
export function joined(first, last) {
|
|
12
|
+
return { offset: first.offset, length: Math.max(last.offset + last.length - first.offset, 0) };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=syntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../../src/core/importer/syntax.ts"],"names":[],"mappings":"AAoIA,mFAAmF;AACnF,MAAM,UAAU,MAAM,CAAC,IAAU;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACrE,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,MAAM,CAAC,KAAY,EAAE,IAAW;IAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;AACjG,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every built-in the importer translates, and what it becomes.
|
|
3
|
+
*
|
|
4
|
+
* This table is the one statement of that mapping. The importer reads it, and
|
|
5
|
+
* the documentation page's table is compared with it row for row by
|
|
6
|
+
* `tests/importer/table.test.ts`, so the page cannot teach a mapping the
|
|
7
|
+
* importer does not make. A built-in with no row here is refused with OS9003
|
|
8
|
+
* rather than guessed at.
|
|
9
|
+
*
|
|
10
|
+
* `difference` says how far a translation can be trusted, and it is the reason
|
|
11
|
+
* a row exists at all rather than a remark about it:
|
|
12
|
+
*
|
|
13
|
+
* - `exact`: the OpenScript call computes the same value on every bar where
|
|
14
|
+
* the source's value is finite, absent bars included, or the importer
|
|
15
|
+
* writes the expression that does. An OpenScript number is never infinite.
|
|
16
|
+
* - `warmup`: the same quantity, whose first bars, seed, arithmetic order and
|
|
17
|
+
* handling of an absent value inside its window are OpenScript's own
|
|
18
|
+
* (`stdlib.md` 20). The first call of each raises OS9007.
|
|
19
|
+
* - `orders`: an order call, placed under OpenScript's order model. The first
|
|
20
|
+
* call of each raises OS9010.
|
|
21
|
+
*
|
|
22
|
+
* `stateful` marks a call that keeps state at its call site in OpenScript, so
|
|
23
|
+
* that skipping it on a bar changes what it returns later (`language.md`
|
|
24
|
+
* 11.4). It decides where the source dialect's evaluation order and
|
|
25
|
+
* OpenScript's differ, which is what the logic operators' translation is about.
|
|
26
|
+
*/
|
|
27
|
+
export type Difference = 'exact' | 'warmup' | 'orders';
|
|
28
|
+
export interface Mapping {
|
|
29
|
+
/** The built-in as the source writes it, namespace included. */
|
|
30
|
+
readonly source: string;
|
|
31
|
+
/** What it becomes, as the documentation page prints it. */
|
|
32
|
+
readonly target: string;
|
|
33
|
+
/** The source's parameter names, in positional order. Empty for a value. */
|
|
34
|
+
readonly params: readonly string[];
|
|
35
|
+
/** The OpenScript parameter names the source's line up with, where they line up one to one. */
|
|
36
|
+
readonly targets: readonly string[];
|
|
37
|
+
readonly difference: Difference;
|
|
38
|
+
readonly stateful: boolean;
|
|
39
|
+
/** Set where the arguments do not line up one to one, naming the translator that handles it. */
|
|
40
|
+
readonly special: string | undefined;
|
|
41
|
+
}
|
|
42
|
+
export declare const MAPPINGS: readonly Mapping[];
|
|
43
|
+
/** The rows that are read as a value, keyed by the source spelling. */
|
|
44
|
+
export declare const VALUES: ReadonlyMap<string, Mapping>;
|
|
45
|
+
/** The rows that are called, keyed by the source spelling. */
|
|
46
|
+
export declare const CALLS: ReadonlyMap<string, Mapping>;
|
|
47
|
+
/**
|
|
48
|
+
* The colour names both languages have, which translate to OpenScript's colour
|
|
49
|
+
* of the same name. The channel values are OpenScript's (`spec/colours.json`).
|
|
50
|
+
*/
|
|
51
|
+
export declare const COLOURS: ReadonlySet<string>;
|
|
52
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/core/importer/table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,OAAO;IACtB,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+FAA+F;IAC/F,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAuHD,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAUtC,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAE/C,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAE9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,MAAM,CAGtC,CAAC"}
|