@magnusopera/fscript 0.77.1 → 0.79.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/dist/FScript.Language/Ast.js +2 -2
- package/dist/FScript.Language/BuiltinFunctions.js +68 -67
- package/dist/FScript.Language/BuiltinSignatures.js +7 -7
- package/dist/FScript.Language/BuiltinTypes.js +3 -3
- package/dist/FScript.Language/Error.js +2 -2
- package/dist/FScript.Language/Eval.js +305 -213
- package/dist/FScript.Language/IncludeResolver.js +97 -79
- package/dist/FScript.Language/Interactive.js +149 -0
- package/dist/FScript.Language/Lexer.js +77 -77
- package/dist/FScript.Language/Parser.js +274 -272
- package/dist/FScript.Language/Pretty.js +4 -4
- package/dist/FScript.Language/Span.js +2 -2
- package/dist/FScript.Language/Token.js +59 -2
- package/dist/FScript.Language/TypeInfer.js +704 -379
- package/dist/FScript.Language/Types.js +98 -27
- package/dist/FScript.Language/Value.js +3 -2
- package/dist/Library.js +91 -79
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Array.js +36 -35
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Async.js +52 -23
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/AsyncBuilder.js +23 -2
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/BigInt.js +33 -32
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/BitConverter.js +2 -2
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/CHANGELOG.md +80 -1
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Date.js +8 -15
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/DateOffset.js +8 -17
- package/dist/fable_modules/fable-library-js.5.13.0/Directory.js +11 -0
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Double.js +8 -2
- package/dist/fable_modules/fable-library-js.5.13.0/Environment.js +3 -0
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Event.js +10 -1
- package/dist/fable_modules/fable-library-js.5.13.0/File.js +27 -0
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/List.js +35 -21
- package/dist/fable_modules/fable-library-js.5.13.0/Long.js +38 -0
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MailboxProcessor.js +11 -5
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Map.js +8 -4
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MutableMap.js +2 -2
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MutableSet.js +1 -1
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Observable.js +5 -3
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Option.js +1 -18
- package/dist/fable_modules/fable-library-js.5.13.0/Path.js +31 -0
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Reflection.js +13 -3
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/RegExp.js +53 -24
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Seq.js +109 -22
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Set.js +16 -3
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/String.js +28 -1
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/System.js +15 -9
- package/dist/fable_modules/fable-library-js.5.13.0/Task.js +27 -0
- package/dist/fable_modules/fable-library-js.5.13.0/TaskBuilder.js +72 -0
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Types.js +12 -12
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Util.js +15 -3
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/package.json +1 -1
- package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/quotation.js +25 -8
- package/dist/fable_modules/project_cracked.json +1 -1
- package/package.json +2 -2
- package/dist/fable_modules/fable-library-js.5.2.0/Long.js +0 -47
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Boolean.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Char.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Choice.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/CollectionUtil.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/ConditionalWeakTable.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/DateOnly.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Decimal.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Encoding.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/FSharp.Collections.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/FSharp.Core.CompilerServices.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/FSharp.Core.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Global.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Guid.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Int32.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/MapUtil.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Native.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Numeric.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/README.md +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Random.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Range.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Result.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Seq2.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/System.Collections.Generic.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/System.Text.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/TimeOnly.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/TimeSpan.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Timer.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Unicode.13.0.0.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/Uri.js +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/big.d.ts +0 -0
- /package/dist/fable_modules/{fable-library-js.5.2.0 → fable-library-js.5.13.0}/lib/big.js +0 -0
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
|
|
2
|
-
import { printf, toText, isNullOrWhiteSpace, concat, endsWith, substring, split, join, trimEnd, startsWith, replace, isNullOrEmpty, compare } from "../fable_modules/fable-library-js.5.
|
|
3
|
-
import { exists, choose, collect, append, map, ofArray, fold as fold_1, singleton, empty, tail as tail_2, cons, head as head_1, isEmpty, reverse } from "../fable_modules/fable-library-js.5.
|
|
4
|
-
import { fold } from "../fable_modules/fable-library-js.5.
|
|
2
|
+
import { printf, toText, isNullOrWhiteSpace, concat, endsWith, substring, split, join, trimEnd, startsWith, replace, isNullOrEmpty, compare } from "../fable_modules/fable-library-js.5.13.0/String.js";
|
|
3
|
+
import { exists, choose, collect, append, map, ofArray, fold as fold_1, singleton, empty, tail as tail_2, cons, head as head_1, isEmpty, reverse } from "../fable_modules/fable-library-js.5.13.0/List.js";
|
|
4
|
+
import { fold } from "../fable_modules/fable-library-js.5.13.0/Array.js";
|
|
5
5
|
import { ParseException, ParseError } from "./Error.js";
|
|
6
|
-
import { isLetterOrDigit, isLetter } from "../fable_modules/fable-library-js.5.
|
|
7
|
-
import { toList as toList_1, fold as fold_2, forAll } from "../fable_modules/fable-library-js.5.
|
|
8
|
-
import { union, toList, ofList, FSharpSet__Contains, empty as empty_1, add } from "../fable_modules/fable-library-js.5.
|
|
9
|
-
import { curry4, defaultOf, disposeSafe, getEnumerator, Exception, curry2, comparePrimitives } from "../fable_modules/fable-library-js.5.
|
|
10
|
-
import { empty as empty_2, add as add_1, FSharpMap__ContainsKey, FSharpMap__get_Item } from "../fable_modules/fable-library-js.5.
|
|
6
|
+
import { isLetterOrDigit, isLetter } from "../fable_modules/fable-library-js.5.13.0/Char.js";
|
|
7
|
+
import { toList as toList_1, fold as fold_2, forAll } from "../fable_modules/fable-library-js.5.13.0/Seq.js";
|
|
8
|
+
import { union, toList, ofList, FSharpSet__Contains, empty as empty_1, add } from "../fable_modules/fable-library-js.5.13.0/Set.js";
|
|
9
|
+
import { curry4, defaultOf, disposeSafe, getEnumerator, Exception, curry2, comparePrimitives } from "../fable_modules/fable-library-js.5.13.0/Util.js";
|
|
10
|
+
import { empty as empty_2, add as add_1, FSharpMap__ContainsKey, FSharpMap__get_Item } from "../fable_modules/fable-library-js.5.13.0/Map.js";
|
|
11
11
|
import { TypeDef, Stmt, InterpolatedPart, MapEntry, Param, Expr, Pattern, TypeRef } from "./Ast.js";
|
|
12
|
-
import { map as map_1 } from "../fable_modules/fable-library-js.5.2.0/Option.js";
|
|
13
12
|
import { parseProgramWithSourceName } from "./Parser.js";
|
|
14
|
-
import { FSharpRef } from "../fable_modules/fable-library-js.5.
|
|
13
|
+
import { FSharpRef } from "../fable_modules/fable-library-js.5.13.0/Types.js";
|
|
15
14
|
import { Span, Position } from "./Span.js";
|
|
16
|
-
import { addToSet, tryGetValue } from "../fable_modules/fable-library-js.5.
|
|
15
|
+
import { addToSet, tryGetValue } from "../fable_modules/fable-library-js.5.13.0/MapUtil.js";
|
|
17
16
|
|
|
18
17
|
const pathComparison = 4;
|
|
19
18
|
|
|
@@ -151,7 +150,9 @@ function ensureWithinRoot(rootDirectoryWithSeparator, path, span) {
|
|
|
151
150
|
const fullPath = normalizePath(path);
|
|
152
151
|
const fullRoot = trimTrailingDirectorySeparators(rootDirectoryWithSeparator);
|
|
153
152
|
const rootWithSeparator = endsWith(fullRoot, "/", 4) ? fullRoot : (fullRoot + "/");
|
|
154
|
-
|
|
153
|
+
const isRootItself = compare(fullPath, fullRoot, pathComparison) === 0;
|
|
154
|
+
const isUnderRoot = startsWith(fullPath, rootWithSeparator, pathComparison);
|
|
155
|
+
if (!(isRootItself ? true : isUnderRoot)) {
|
|
155
156
|
throw new ParseException(new ParseError(concat("Imported file \'", fullPath, "\' is outside of sandbox root"), span));
|
|
156
157
|
}
|
|
157
158
|
return fullPath;
|
|
@@ -304,10 +305,9 @@ function rewriteNameWithAliases(aliases, name) {
|
|
|
304
305
|
}
|
|
305
306
|
|
|
306
307
|
function rewriteNameWithSelfPrefix(selfPrefix, selfNames, boundNames, name) {
|
|
307
|
-
let prefix;
|
|
308
308
|
let matchResult, prefix_1;
|
|
309
309
|
if (selfPrefix != null) {
|
|
310
|
-
if (
|
|
310
|
+
if (FSharpSet__Contains(selfNames, name) && !FSharpSet__Contains(boundNames, name)) {
|
|
311
311
|
matchResult = 0;
|
|
312
312
|
prefix_1 = selfPrefix;
|
|
313
313
|
}
|
|
@@ -327,7 +327,6 @@ function rewriteNameWithSelfPrefix(selfPrefix, selfNames, boundNames, name) {
|
|
|
327
327
|
}
|
|
328
328
|
|
|
329
329
|
function rewriteTypeName(aliases, selfPrefix, selfTypeNames, name) {
|
|
330
|
-
let prefix;
|
|
331
330
|
const aliasRewritten = rewriteNameWithAliases(aliases, name);
|
|
332
331
|
if (aliasRewritten !== name) {
|
|
333
332
|
return aliasRewritten;
|
|
@@ -335,7 +334,7 @@ function rewriteTypeName(aliases, selfPrefix, selfTypeNames, name) {
|
|
|
335
334
|
else {
|
|
336
335
|
let matchResult, prefix_1;
|
|
337
336
|
if (selfPrefix != null) {
|
|
338
|
-
if (
|
|
337
|
+
if (FSharpSet__Contains(selfTypeNames, name)) {
|
|
339
338
|
matchResult = 0;
|
|
340
339
|
prefix_1 = selfPrefix;
|
|
341
340
|
}
|
|
@@ -367,36 +366,37 @@ function rewriteTypeQualifier(aliases, selfPrefix, selfTypeNames, qualifier) {
|
|
|
367
366
|
function rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref) {
|
|
368
367
|
switch (tref.tag) {
|
|
369
368
|
case 1:
|
|
370
|
-
return new TypeRef(1, [map((tref_1) => rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref_1), tref.fields[0])]);
|
|
369
|
+
return new TypeRef(/* TRTuple */ 1, [map((tref_1) => rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref_1), tref.fields[0])]);
|
|
371
370
|
case 2:
|
|
372
|
-
return new TypeRef(2, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[1])]);
|
|
371
|
+
return new TypeRef(/* TRFun */ 2, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[1])]);
|
|
373
372
|
case 3:
|
|
374
|
-
return new TypeRef(3, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), tref.fields[1]]);
|
|
373
|
+
return new TypeRef(/* TRPostfix */ 3, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tref.fields[0]), tref.fields[1]]);
|
|
375
374
|
case 4:
|
|
376
|
-
return new TypeRef(4, [map((tupledArg) => [tupledArg[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg[1])], tref.fields[0])]);
|
|
375
|
+
return new TypeRef(/* TRRecord */ 4, [map((tupledArg) => [tupledArg[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg[1])], tref.fields[0])]);
|
|
377
376
|
case 5:
|
|
378
|
-
return new TypeRef(5, [map((tupledArg_1) => [tupledArg_1[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], tref.fields[0])]);
|
|
377
|
+
return new TypeRef(/* TRStructuralRecord */ 5, [map((tupledArg_1) => [tupledArg_1[0], rewriteTypeRef(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], tref.fields[0])]);
|
|
379
378
|
default:
|
|
380
|
-
return new TypeRef(0, [rewriteTypeName(aliases, selfPrefix, selfTypeNames, tref.fields[0])]);
|
|
379
|
+
return new TypeRef(/* TRName */ 0, [rewriteTypeName(aliases, selfPrefix, selfTypeNames, tref.fields[0])]);
|
|
381
380
|
}
|
|
382
381
|
}
|
|
383
382
|
|
|
384
383
|
function rewritePattern(aliases, selfPrefix, selfTypeNames, pat) {
|
|
384
|
+
let option_1, option_3;
|
|
385
385
|
switch (pat.tag) {
|
|
386
386
|
case 4:
|
|
387
|
-
return new Pattern(4, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[1]), pat.fields[2]]);
|
|
387
|
+
return new Pattern(/* PCons */ 4, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[1]), pat.fields[2]]);
|
|
388
388
|
case 5:
|
|
389
|
-
return new Pattern(5, [map((pat_1) => rewritePattern(aliases, selfPrefix, selfTypeNames, pat_1), pat.fields[0]), pat.fields[1]]);
|
|
389
|
+
return new Pattern(/* PTuple */ 5, [map((pat_1) => rewritePattern(aliases, selfPrefix, selfTypeNames, pat_1), pat.fields[0]), pat.fields[1]]);
|
|
390
390
|
case 6:
|
|
391
|
-
return new Pattern(6, [map((tupledArg) => [tupledArg[0], rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg[1])], pat.fields[0]), pat.fields[1]]);
|
|
391
|
+
return new Pattern(/* PRecord */ 6, [map((tupledArg) => [tupledArg[0], rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg[1])], pat.fields[0]), pat.fields[1]]);
|
|
392
392
|
case 7:
|
|
393
|
-
return new Pattern(7, [map((tupledArg_1) => [rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], pat.fields[0]),
|
|
393
|
+
return new Pattern(/* PMap */ 7, [map((tupledArg_1) => [rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[0]), rewritePattern(aliases, selfPrefix, selfTypeNames, tupledArg_1[1])], pat.fields[0]), (option_1 = pat.fields[1], (option_1 != null) ? rewritePattern(aliases, selfPrefix, selfTypeNames, option_1) : undefined), pat.fields[2]]);
|
|
394
394
|
case 8:
|
|
395
|
-
return new Pattern(8, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
|
|
395
|
+
return new Pattern(/* PSome */ 8, [rewritePattern(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
|
|
396
396
|
case 10:
|
|
397
|
-
return new Pattern(10, [rewriteTypeQualifier(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1],
|
|
397
|
+
return new Pattern(/* PUnionCase */ 10, [rewriteTypeQualifier(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1], (option_3 = pat.fields[2], (option_3 != null) ? rewritePattern(aliases, selfPrefix, selfTypeNames, option_3) : undefined), pat.fields[3]]);
|
|
398
398
|
case 11:
|
|
399
|
-
return new Pattern(11, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
|
|
399
|
+
return new Pattern(/* PTypeRef */ 11, [rewriteTypeRef(aliases, selfPrefix, selfTypeNames, pat.fields[0]), pat.fields[1]]);
|
|
400
400
|
default:
|
|
401
401
|
return pat;
|
|
402
402
|
}
|
|
@@ -459,90 +459,97 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
|
|
|
459
459
|
}
|
|
460
460
|
};
|
|
461
461
|
const rewriteExpr = (boundNames_1, expr) => {
|
|
462
|
-
let
|
|
462
|
+
let option_1;
|
|
463
463
|
switch (expr.tag) {
|
|
464
464
|
case 2:
|
|
465
|
-
return new Expr(2, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
465
|
+
return new Expr(/* EVar */ 2, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
466
466
|
case 29:
|
|
467
|
-
return new Expr(29, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
467
|
+
return new Expr(/* ENameOf */ 29, [rewriteValueName(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
468
468
|
case 28:
|
|
469
|
-
return new Expr(28, [rewriteTypeName(aliases, selfPrefix, topLevelTypeNames, expr.fields[0]), expr.fields[1]]);
|
|
469
|
+
return new Expr(/* ETypeOf */ 28, [rewriteTypeName(aliases, selfPrefix, topLevelTypeNames, expr.fields[0]), expr.fields[1]]);
|
|
470
470
|
case 3:
|
|
471
|
-
return new Expr(3, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
471
|
+
return new Expr(/* EParen */ 3, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
472
472
|
case 4: {
|
|
473
473
|
const param = expr.fields[0];
|
|
474
|
-
return new Expr(4, [new Param(param.Name,
|
|
474
|
+
return new Expr(/* ELambda */ 4, [new Param(param.Name, (option_1 = param.Annotation, (option_1 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_1) : undefined), param.Span), rewriteExpr(add(param.Name, boundNames_1), expr.fields[1]), expr.fields[2]]);
|
|
475
475
|
}
|
|
476
476
|
case 5:
|
|
477
|
-
return new Expr(5, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
477
|
+
return new Expr(/* EApply */ 5, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
478
478
|
case 6:
|
|
479
|
-
return new Expr(6, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
|
|
479
|
+
return new Expr(/* EIf */ 6, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
|
|
480
480
|
case 7:
|
|
481
|
-
return new Expr(7, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
481
|
+
return new Expr(/* ERaise */ 7, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
482
482
|
case 8: {
|
|
483
483
|
const name_6 = expr.fields[0];
|
|
484
|
-
return new Expr(8, [name_6, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(add(name_6, boundNames_1), expr.fields[2]), expr.fields[3]]);
|
|
484
|
+
return new Expr(/* EFor */ 8, [name_6, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(add(name_6, boundNames_1), expr.fields[2]), expr.fields[3]]);
|
|
485
485
|
}
|
|
486
486
|
case 9: {
|
|
487
487
|
const rewrittenCases = map((tupledArg_1) => {
|
|
488
|
+
let mapping_4, option_3;
|
|
488
489
|
const rewrittenPattern = rewritePattern(aliases, selfPrefix, topLevelTypeNames, tupledArg_1[0]);
|
|
489
490
|
const boundWithPattern = union(boundNames_1, collectPatternBindings(rewrittenPattern));
|
|
490
|
-
return [rewrittenPattern,
|
|
491
|
+
return [rewrittenPattern, (mapping_4 = curry2(rewriteExpr)(boundWithPattern), (option_3 = tupledArg_1[1], (option_3 != null) ? mapping_4(option_3) : undefined)), rewriteExpr(boundWithPattern, tupledArg_1[2]), tupledArg_1[3]];
|
|
491
492
|
}, expr.fields[1]);
|
|
492
|
-
return new Expr(9, [rewriteExpr(boundNames_1, expr.fields[0]), rewrittenCases, expr.fields[2]]);
|
|
493
|
+
return new Expr(/* EMatch */ 9, [rewriteExpr(boundNames_1, expr.fields[0]), rewrittenCases, expr.fields[2]]);
|
|
493
494
|
}
|
|
494
495
|
case 10: {
|
|
495
496
|
const valueExpr_1 = expr.fields[1];
|
|
496
497
|
const span_10 = expr.fields[5];
|
|
497
498
|
const name_7 = expr.fields[0];
|
|
498
499
|
const bodyExpr = expr.fields[2];
|
|
499
|
-
|
|
500
|
+
let rewrittenReturnAnnotation;
|
|
501
|
+
const option_5 = expr.fields[4];
|
|
502
|
+
rewrittenReturnAnnotation = ((option_5 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_5) : undefined);
|
|
500
503
|
if (expr.fields[3]) {
|
|
501
504
|
const boundWithName = add(name_7, boundNames_1);
|
|
502
|
-
return new Expr(10, [name_7, rewriteExpr(boundWithName, valueExpr_1), rewriteExpr(boundWithName, bodyExpr), true, rewrittenReturnAnnotation, span_10]);
|
|
505
|
+
return new Expr(/* ELet */ 10, [name_7, rewriteExpr(boundWithName, valueExpr_1), rewriteExpr(boundWithName, bodyExpr), true, rewrittenReturnAnnotation, span_10]);
|
|
503
506
|
}
|
|
504
507
|
else {
|
|
505
|
-
return new Expr(10, [name_7, rewriteExpr(boundNames_1, valueExpr_1), rewriteExpr(add(name_7, boundNames_1), bodyExpr), false, rewrittenReturnAnnotation, span_10]);
|
|
508
|
+
return new Expr(/* ELet */ 10, [name_7, rewriteExpr(boundNames_1, valueExpr_1), rewriteExpr(add(name_7, boundNames_1), bodyExpr), false, rewrittenReturnAnnotation, span_10]);
|
|
506
509
|
}
|
|
507
510
|
}
|
|
508
511
|
case 11: {
|
|
509
512
|
const rewrittenPattern_1 = rewritePattern(aliases, selfPrefix, topLevelTypeNames, expr.fields[0]);
|
|
510
513
|
const boundWithPattern_1 = union(boundNames_1, collectPatternBindings(rewrittenPattern_1));
|
|
511
|
-
return new Expr(11, [rewrittenPattern_1, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundWithPattern_1, expr.fields[2]), expr.fields[3]]);
|
|
514
|
+
return new Expr(/* ELetPattern */ 11, [rewrittenPattern_1, rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundWithPattern_1, expr.fields[2]), expr.fields[3]]);
|
|
512
515
|
}
|
|
513
516
|
case 12: {
|
|
514
517
|
const bindings_1 = expr.fields[0];
|
|
515
518
|
const recursiveBound = union(boundNames_1, ofList(map((tupledArg_2) => tupledArg_2[0], bindings_1), {
|
|
516
519
|
Compare: (x_2, y_2) => (comparePrimitives(x_2, y_2) | 0),
|
|
517
520
|
}));
|
|
518
|
-
return new Expr(12, [map((tupledArg_3) => {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
+
return new Expr(/* ELetRecGroup */ 12, [map((tupledArg_3) => {
|
|
522
|
+
let option_9;
|
|
523
|
+
const rewrittenArgs = map((p) => {
|
|
524
|
+
let option_7;
|
|
525
|
+
return new Param(p.Name, (option_7 = p.Annotation, (option_7 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_7) : undefined), p.Span);
|
|
526
|
+
}, tupledArg_3[1]);
|
|
527
|
+
return [tupledArg_3[0], rewrittenArgs, (option_9 = tupledArg_3[2], (option_9 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_9) : undefined), rewriteExpr(fold_1((s, p_1) => add(p_1.Name, s), recursiveBound, rewrittenArgs), tupledArg_3[3]), tupledArg_3[4]];
|
|
521
528
|
}, bindings_1), rewriteExpr(recursiveBound, expr.fields[1]), expr.fields[2]]);
|
|
522
529
|
}
|
|
523
530
|
case 13:
|
|
524
|
-
return new Expr(13, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
|
|
531
|
+
return new Expr(/* EList */ 13, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
|
|
525
532
|
case 14:
|
|
526
|
-
return new Expr(14, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
533
|
+
return new Expr(/* ERange */ 14, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
527
534
|
case 15:
|
|
528
|
-
return new Expr(15, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
|
|
535
|
+
return new Expr(/* ETuple */ 15, [map(curry2(rewriteExpr)(boundNames_1), expr.fields[0]), expr.fields[1]]);
|
|
529
536
|
case 16:
|
|
530
|
-
return new Expr(16, [map((tupledArg_4) => [tupledArg_4[0], rewriteExpr(boundNames_1, tupledArg_4[1])], expr.fields[0]), expr.fields[1]]);
|
|
537
|
+
return new Expr(/* ERecord */ 16, [map((tupledArg_4) => [tupledArg_4[0], rewriteExpr(boundNames_1, tupledArg_4[1])], expr.fields[0]), expr.fields[1]]);
|
|
531
538
|
case 17:
|
|
532
|
-
return new Expr(17, [map((tupledArg_5) => [tupledArg_5[0], rewriteExpr(boundNames_1, tupledArg_5[1])], expr.fields[0]), expr.fields[1]]);
|
|
539
|
+
return new Expr(/* EStructuralRecord */ 17, [map((tupledArg_5) => [tupledArg_5[0], rewriteExpr(boundNames_1, tupledArg_5[1])], expr.fields[0]), expr.fields[1]]);
|
|
533
540
|
case 18:
|
|
534
|
-
return new Expr(18, [map((_arg_10) => {
|
|
541
|
+
return new Expr(/* EMap */ 18, [map((_arg_10) => {
|
|
535
542
|
if (_arg_10.tag === 1) {
|
|
536
|
-
return new MapEntry(1, [rewriteExpr(boundNames_1, _arg_10.fields[0])]);
|
|
543
|
+
return new MapEntry(/* MESpread */ 1, [rewriteExpr(boundNames_1, _arg_10.fields[0])]);
|
|
537
544
|
}
|
|
538
545
|
else {
|
|
539
|
-
return new MapEntry(0, [rewriteExpr(boundNames_1, _arg_10.fields[0]), rewriteExpr(boundNames_1, _arg_10.fields[1])]);
|
|
546
|
+
return new MapEntry(/* MEKeyValue */ 0, [rewriteExpr(boundNames_1, _arg_10.fields[0]), rewriteExpr(boundNames_1, _arg_10.fields[1])]);
|
|
540
547
|
}
|
|
541
548
|
}, expr.fields[0]), expr.fields[1]]);
|
|
542
549
|
case 19:
|
|
543
|
-
return new Expr(19, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_6) => [tupledArg_6[0], rewriteExpr(boundNames_1, tupledArg_6[1])], expr.fields[1]), expr.fields[2]]);
|
|
550
|
+
return new Expr(/* ERecordUpdate */ 19, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_6) => [tupledArg_6[0], rewriteExpr(boundNames_1, tupledArg_6[1])], expr.fields[1]), expr.fields[2]]);
|
|
544
551
|
case 20:
|
|
545
|
-
return new Expr(20, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_7) => [tupledArg_7[0], rewriteExpr(boundNames_1, tupledArg_7[1])], expr.fields[1]), expr.fields[2]]);
|
|
552
|
+
return new Expr(/* EStructuralRecordUpdate */ 20, [rewriteExpr(boundNames_1, expr.fields[0]), map((tupledArg_7) => [tupledArg_7[0], rewriteExpr(boundNames_1, tupledArg_7[1])], expr.fields[1]), expr.fields[2]]);
|
|
546
553
|
case 21: {
|
|
547
554
|
const target_2 = expr.fields[0];
|
|
548
555
|
const span_21 = expr.fields[2];
|
|
@@ -551,7 +558,7 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
|
|
|
551
558
|
let matchResult, rest_1, root_1;
|
|
552
559
|
if (matchValue != null) {
|
|
553
560
|
if (!isEmpty(matchValue)) {
|
|
554
|
-
if ((
|
|
561
|
+
if ((tail_2(matchValue), FSharpMap__ContainsKey(aliases, head_1(matchValue)))) {
|
|
555
562
|
matchResult = 0;
|
|
556
563
|
rest_1 = tail_2(matchValue);
|
|
557
564
|
root_1 = head_1(matchValue);
|
|
@@ -569,28 +576,28 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
|
|
|
569
576
|
}
|
|
570
577
|
switch (matchResult) {
|
|
571
578
|
case 0:
|
|
572
|
-
return new Expr(2, [(FSharpMap__get_Item(aliases, root_1) + ".") + joinDotted(append(rest_1, singleton(fieldName))), span_21]);
|
|
579
|
+
return new Expr(/* EVar */ 2, [(FSharpMap__get_Item(aliases, root_1) + ".") + joinDotted(append(rest_1, singleton(fieldName))), span_21]);
|
|
573
580
|
default:
|
|
574
|
-
return new Expr(21, [rewriteExpr(boundNames_1, target_2), fieldName, span_21]);
|
|
581
|
+
return new Expr(/* EFieldGet */ 21, [rewriteExpr(boundNames_1, target_2), fieldName, span_21]);
|
|
575
582
|
}
|
|
576
583
|
}
|
|
577
584
|
case 22:
|
|
578
|
-
return new Expr(22, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
585
|
+
return new Expr(/* EIndexGet */ 22, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
579
586
|
case 23:
|
|
580
|
-
return new Expr(23, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
587
|
+
return new Expr(/* ECons */ 23, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
581
588
|
case 24:
|
|
582
|
-
return new Expr(24, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
589
|
+
return new Expr(/* EAppend */ 24, [rewriteExpr(boundNames_1, expr.fields[0]), rewriteExpr(boundNames_1, expr.fields[1]), expr.fields[2]]);
|
|
583
590
|
case 25:
|
|
584
|
-
return new Expr(25, [expr.fields[0], rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
|
|
591
|
+
return new Expr(/* EBinOp */ 25, [expr.fields[0], rewriteExpr(boundNames_1, expr.fields[1]), rewriteExpr(boundNames_1, expr.fields[2]), expr.fields[3]]);
|
|
585
592
|
case 26:
|
|
586
|
-
return new Expr(26, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
593
|
+
return new Expr(/* ESome */ 26, [rewriteExpr(boundNames_1, expr.fields[0]), expr.fields[1]]);
|
|
587
594
|
case 30:
|
|
588
|
-
return new Expr(30, [map((_arg_11) => {
|
|
595
|
+
return new Expr(/* EInterpolatedString */ 30, [map((_arg_11) => {
|
|
589
596
|
if (_arg_11.tag === 1) {
|
|
590
|
-
return new InterpolatedPart(1, [rewriteExpr(boundNames_1, _arg_11.fields[0])]);
|
|
597
|
+
return new InterpolatedPart(/* IPExpr */ 1, [rewriteExpr(boundNames_1, _arg_11.fields[0])]);
|
|
591
598
|
}
|
|
592
599
|
else {
|
|
593
|
-
return new InterpolatedPart(0, [_arg_11.fields[0]]);
|
|
600
|
+
return new InterpolatedPart(/* IPText */ 0, [_arg_11.fields[0]]);
|
|
594
601
|
}
|
|
595
602
|
}, expr.fields[0]), expr.fields[1]]);
|
|
596
603
|
default:
|
|
@@ -605,7 +612,10 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
|
|
|
605
612
|
return `${selfPrefix}.${name_14}`;
|
|
606
613
|
}
|
|
607
614
|
};
|
|
608
|
-
const rewriteParam = (param_1) =>
|
|
615
|
+
const rewriteParam = (param_1) => {
|
|
616
|
+
let option_11;
|
|
617
|
+
return new Param(param_1.Name, (option_11 = param_1.Annotation, (option_11 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_11) : undefined), param_1.Span);
|
|
618
|
+
};
|
|
609
619
|
return map((_arg_12) => {
|
|
610
620
|
let def_1;
|
|
611
621
|
switch (_arg_12.tag) {
|
|
@@ -613,14 +623,16 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
|
|
|
613
623
|
const isRec_1 = _arg_12.fields[4];
|
|
614
624
|
const rewrittenName = qualifySelfName(_arg_12.fields[0]);
|
|
615
625
|
const rewrittenArgs_1 = map(rewriteParam, _arg_12.fields[1]);
|
|
616
|
-
|
|
626
|
+
let rewrittenReturnAnnotation_2;
|
|
627
|
+
const option_15 = _arg_12.fields[2];
|
|
628
|
+
rewrittenReturnAnnotation_2 = ((option_15 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_15) : undefined);
|
|
617
629
|
const bound = fold_1((s_1, p_2) => add(p_2.Name, s_1), empty_1({
|
|
618
630
|
Compare: (x_3, y_3) => (comparePrimitives(x_3, y_3) | 0),
|
|
619
631
|
}), rewrittenArgs_1);
|
|
620
|
-
return new Stmt(2, [rewrittenName, rewrittenArgs_1, rewrittenReturnAnnotation_2, rewriteExpr(isRec_1 ? add(rewrittenName, bound) : bound, _arg_12.fields[3]), isRec_1, _arg_12.fields[5], _arg_12.fields[6]]);
|
|
632
|
+
return new Stmt(/* SLet */ 2, [rewrittenName, rewrittenArgs_1, rewrittenReturnAnnotation_2, rewriteExpr(isRec_1 ? add(rewrittenName, bound) : bound, _arg_12.fields[3]), isRec_1, _arg_12.fields[5], _arg_12.fields[6]]);
|
|
621
633
|
}
|
|
622
634
|
case 3:
|
|
623
|
-
return new Stmt(3, [rewritePattern(aliases, selfPrefix, topLevelTypeNames, _arg_12.fields[0]), rewriteExpr(empty_1({
|
|
635
|
+
return new Stmt(/* SLetPattern */ 3, [rewritePattern(aliases, selfPrefix, topLevelTypeNames, _arg_12.fields[0]), rewriteExpr(empty_1({
|
|
624
636
|
Compare: (x_4, y_4) => (comparePrimitives(x_4, y_4) | 0),
|
|
625
637
|
}), _arg_12.fields[1]), _arg_12.fields[2], _arg_12.fields[3]]);
|
|
626
638
|
case 4: {
|
|
@@ -628,20 +640,24 @@ function rewriteModuleScopedStatements(selfPrefix, aliases, statements) {
|
|
|
628
640
|
const names_1 = ofList(map((tupledArg_10) => qualifySelfName(tupledArg_10[0]), bindings_2), {
|
|
629
641
|
Compare: (x_5, y_5) => (comparePrimitives(x_5, y_5) | 0),
|
|
630
642
|
});
|
|
631
|
-
return new Stmt(4, [map((tupledArg_11) => {
|
|
643
|
+
return new Stmt(/* SLetRecGroup */ 4, [map((tupledArg_11) => {
|
|
644
|
+
let option_17;
|
|
632
645
|
const rewrittenName_1 = qualifySelfName(tupledArg_11[0]);
|
|
633
646
|
const rewrittenArgs_2 = map(rewriteParam, tupledArg_11[1]);
|
|
634
|
-
return [rewrittenName_1, rewrittenArgs_2,
|
|
647
|
+
return [rewrittenName_1, rewrittenArgs_2, (option_17 = tupledArg_11[2], (option_17 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_17) : undefined), rewriteExpr(fold_1((s_2, p_3) => add(p_3.Name, s_2), names_1, rewrittenArgs_2), tupledArg_11[3]), tupledArg_11[4]];
|
|
635
648
|
}, bindings_2), _arg_12.fields[1], _arg_12.fields[2]]);
|
|
636
649
|
}
|
|
637
650
|
case 5:
|
|
638
|
-
return new Stmt(5, [rewriteExpr(empty_1({
|
|
651
|
+
return new Stmt(/* SExpr */ 5, [rewriteExpr(empty_1({
|
|
639
652
|
Compare: (x_6, y_6) => (comparePrimitives(x_6, y_6) | 0),
|
|
640
653
|
}), _arg_12.fields[0])]);
|
|
641
654
|
case 1:
|
|
642
655
|
throw new Exception("Unexpected unresolved import directive");
|
|
643
656
|
default:
|
|
644
|
-
return new Stmt(0, [(def_1 = _arg_12.fields[0], new TypeDef(qualifySelfName(def_1.Name), def_1.IsRecursive, map((tupledArg_8) => [tupledArg_8[0], rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tupledArg_8[1])], def_1.Fields), map((tupledArg_9) =>
|
|
657
|
+
return new Stmt(/* SType */ 0, [(def_1 = _arg_12.fields[0], new TypeDef(qualifySelfName(def_1.Name), def_1.IsRecursive, map((tupledArg_8) => [tupledArg_8[0], rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, tupledArg_8[1])], def_1.Fields), map((tupledArg_9) => {
|
|
658
|
+
let option_13;
|
|
659
|
+
return [tupledArg_9[0], (option_13 = tupledArg_9[1], (option_13 != null) ? rewriteTypeRef(aliases, selfPrefix, topLevelTypeNames, option_13) : undefined)];
|
|
660
|
+
}, def_1.Cases), def_1.Span))]);
|
|
645
661
|
}
|
|
646
662
|
}, statements);
|
|
647
663
|
}
|
|
@@ -683,11 +699,13 @@ function expandProgram(rootDirectoryWithSeparator, fileSpan, getOrCreatePrefix,
|
|
|
683
699
|
}, empty_2({
|
|
684
700
|
Compare: (x, y) => (comparePrimitives(x, y) | 0),
|
|
685
701
|
}), imports);
|
|
686
|
-
|
|
702
|
+
const importedStatements = collect((tupledArg_1) => {
|
|
687
703
|
const resolvedPath_1 = resolveImportPath(currentFile, tupledArg_1[1], rootDirectoryWithSeparator, tupledArg_1[2]);
|
|
688
704
|
const childPrefix = FSharpMap__get_Item(aliasMappings, tupledArg_1[0]);
|
|
689
705
|
return loadFileRef.contents(stack)(false)(resolvedPath_1)(childPrefix);
|
|
690
|
-
}, toList_1(imports))
|
|
706
|
+
}, toList_1(imports));
|
|
707
|
+
const localStatements = toList_1(localCode);
|
|
708
|
+
return append(importedStatements, rewriteModuleScopedStatements(isMainFile ? undefined : currentPrefix, aliasMappings, localStatements));
|
|
691
709
|
}
|
|
692
710
|
|
|
693
711
|
export function parseIncludedSource(sourceName, source) {
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
|
|
2
|
+
import { Record } from "../fable_modules/fable-library-js.5.13.0/Types.js";
|
|
3
|
+
import { ExternalFunction, Value, ExternalFunction_$reflection } from "./Value.js";
|
|
4
|
+
import { int32_type, record_type, option_type, class_type, string_type, list_type } from "../fable_modules/fable-library-js.5.13.0/Reflection.js";
|
|
5
|
+
import { Stmt_$reflection } from "./Ast.js";
|
|
6
|
+
import { evalProgramFromState, evalProgramWithExternsState, ProgramState_$reflection } from "./Eval.js";
|
|
7
|
+
import { inferProgramWithExterns, TypedStmt_$reflection } from "./TypeInfer.js";
|
|
8
|
+
import { skip, reverse, append, exists, length, empty, choose, cons, fold, filter } from "../fable_modules/fable-library-js.5.13.0/List.js";
|
|
9
|
+
import { toList } from "../fable_modules/fable-library-js.5.13.0/Set.js";
|
|
10
|
+
import { Scheme, Types_ftvType } from "./Types.js";
|
|
11
|
+
import { values, empty as empty_1, add, fold as fold_1 } from "../fable_modules/fable-library-js.5.13.0/Map.js";
|
|
12
|
+
import { comparePrimitives } from "../fable_modules/fable-library-js.5.13.0/Util.js";
|
|
13
|
+
import { toList as toList_1 } from "../fable_modules/fable-library-js.5.13.0/Seq.js";
|
|
14
|
+
|
|
15
|
+
export class Session extends Record {
|
|
16
|
+
constructor(Externs, RetainedProgramRev, TypeDeclarations, InferenceBindings, EvaluationState) {
|
|
17
|
+
super();
|
|
18
|
+
this.Externs = Externs;
|
|
19
|
+
this.RetainedProgramRev = RetainedProgramRev;
|
|
20
|
+
this.TypeDeclarations = TypeDeclarations;
|
|
21
|
+
this.InferenceBindings = InferenceBindings;
|
|
22
|
+
this.EvaluationState = EvaluationState;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function Session_$reflection() {
|
|
27
|
+
return record_type("FScript.Language.Interactive.Session", [], Session, () => [["Externs", list_type(ExternalFunction_$reflection())], ["RetainedProgramRev", list_type(Stmt_$reflection())], ["TypeDeclarations", list_type(Stmt_$reflection())], ["InferenceBindings", class_type("Microsoft.FSharp.Collections.FSharpMap`2", [string_type, ExternalFunction_$reflection()])], ["EvaluationState", option_type(ProgramState_$reflection())]]);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class Submission extends Record {
|
|
31
|
+
constructor(Session, TypedProgram, State, RetainedCount) {
|
|
32
|
+
super();
|
|
33
|
+
this.Session = Session;
|
|
34
|
+
this.TypedProgram = TypedProgram;
|
|
35
|
+
this.State = State;
|
|
36
|
+
this.RetainedCount = (RetainedCount | 0);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function Submission_$reflection() {
|
|
41
|
+
return record_type("FScript.Language.Interactive.Submission", [], Submission, () => [["Session", Session_$reflection()], ["TypedProgram", list_type(TypedStmt_$reflection())], ["State", ProgramState_$reflection()], ["RetainedCount", int32_type]]);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function retainedStatements(program) {
|
|
45
|
+
return filter((_arg) => {
|
|
46
|
+
if (_arg.tag === 5) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
}, program);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function appendRetained(reversed, program) {
|
|
56
|
+
return fold((acc, statement) => {
|
|
57
|
+
if (statement.tag === 5) {
|
|
58
|
+
return acc;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return cons(statement, acc);
|
|
62
|
+
}
|
|
63
|
+
}, reversed, program);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function typeDeclarations(program) {
|
|
67
|
+
return choose((_arg) => {
|
|
68
|
+
if (_arg.tag === 0) {
|
|
69
|
+
return _arg;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
}, program);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function inferenceBinding(name, bindingType) {
|
|
78
|
+
return new ExternalFunction(name, new Scheme(toList(Types_ftvType(bindingType)), bindingType), (_arg, _arg_1) => Value.VUnit, 0);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function updateInferenceBindings(bindings, typedProgram) {
|
|
82
|
+
return fold((current, statement) => {
|
|
83
|
+
switch (statement.tag) {
|
|
84
|
+
case 2:
|
|
85
|
+
return fold_1((state, name_1, bindingType_1) => add(name_1, inferenceBinding(name_1, bindingType_1), state), current, statement.fields[2]);
|
|
86
|
+
case 3:
|
|
87
|
+
return fold((state_1, tupledArg) => {
|
|
88
|
+
const name_2 = tupledArg[0];
|
|
89
|
+
return add(name_2, inferenceBinding(name_2, tupledArg[2]), state_1);
|
|
90
|
+
}, current, statement.fields[0]);
|
|
91
|
+
case 0:
|
|
92
|
+
case 4:
|
|
93
|
+
return current;
|
|
94
|
+
default: {
|
|
95
|
+
const name = statement.fields[0];
|
|
96
|
+
return add(name, inferenceBinding(name, statement.fields[2]), current);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}, bindings, typedProgram);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function create(externs) {
|
|
103
|
+
return new Session(externs, empty(), empty(), empty_1({
|
|
104
|
+
Compare: (x, y) => (comparePrimitives(x, y) | 0),
|
|
105
|
+
}), undefined);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function retainedCount(session) {
|
|
109
|
+
return length(session.RetainedProgramRev) | 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function submit(session, program) {
|
|
113
|
+
const retainedRev = appendRetained(session.RetainedProgramRev, program);
|
|
114
|
+
const retainedCount_1 = length(retainedRev) | 0;
|
|
115
|
+
const containsTypeDeclaration = exists((_arg) => {
|
|
116
|
+
if (_arg.tag === 0) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}, program);
|
|
123
|
+
const matchValue = session.EvaluationState;
|
|
124
|
+
if (matchValue != null) {
|
|
125
|
+
if (containsTypeDeclaration) {
|
|
126
|
+
const typed_1 = inferProgramWithExterns(session.Externs, append(reverse(session.RetainedProgramRev), program));
|
|
127
|
+
const state_1 = evalProgramWithExternsState(session.Externs, typed_1);
|
|
128
|
+
const submittedTyped = skip(length(session.RetainedProgramRev), typed_1);
|
|
129
|
+
return new Submission(new Session(session.Externs, retainedRev, typeDeclarations(reverse(retainedRev)), updateInferenceBindings(empty_1({
|
|
130
|
+
Compare: (x_1, y_1) => (comparePrimitives(x_1, y_1) | 0),
|
|
131
|
+
}), typed_1), state_1), submittedTyped, state_1, retainedCount_1);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const previousState = matchValue;
|
|
135
|
+
const typed_2 = inferProgramWithExterns(append(session.Externs, toList_1(values(session.InferenceBindings))), append(session.TypeDeclarations, program));
|
|
136
|
+
const submittedTyped_1 = skip(length(session.TypeDeclarations), typed_2);
|
|
137
|
+
const state_2 = evalProgramFromState(previousState, submittedTyped_1);
|
|
138
|
+
return new Submission(new Session(session.Externs, retainedRev, session.TypeDeclarations, updateInferenceBindings(session.InferenceBindings, submittedTyped_1), state_2), submittedTyped_1, state_2, retainedCount_1);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const typed = inferProgramWithExterns(session.Externs, program);
|
|
143
|
+
const state = evalProgramWithExternsState(session.Externs, typed);
|
|
144
|
+
return new Submission(new Session(session.Externs, retainedRev, typeDeclarations(retainedStatements(program)), updateInferenceBindings(empty_1({
|
|
145
|
+
Compare: (x, y) => (comparePrimitives(x, y) | 0),
|
|
146
|
+
}), typed), state), typed, state, retainedCount_1);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|