firefly-compiler 0.5.35 → 0.5.36
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/.hintrc +4 -4
- package/.vscode/settings.json +4 -4
- package/bin/Release.ff +157 -154
- package/bin/firefly.mjs +1 -1
- package/compiler/Builder.ff +275 -277
- package/compiler/Compiler.ff +234 -233
- package/compiler/Dependencies.ff +186 -187
- package/compiler/DependencyLock.ff +17 -17
- package/compiler/Deriver.ff +23 -31
- package/compiler/Dictionaries.ff +1 -1
- package/compiler/Inference.ff +43 -20
- package/compiler/JsEmitter.ff +1437 -1282
- package/compiler/LspHook.ff +202 -202
- package/compiler/Main.ff +25 -24
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Parser.ff +36 -109
- package/compiler/Resolver.ff +5 -8
- package/compiler/Substitution.ff +1 -1
- package/compiler/Syntax.ff +1 -16
- package/compiler/Token.ff +9 -0
- package/compiler/Tokenizer.ff +4 -0
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package.json +5 -5
- package/core/.firefly/package.ff +2 -2
- package/core/Any.ff +26 -30
- package/core/Array.ff +298 -265
- package/core/Atomic.ff +63 -64
- package/core/Box.ff +7 -7
- package/core/BrowserSystem.ff +40 -40
- package/core/Buffer.ff +185 -152
- package/core/BuildSystem.ff +156 -148
- package/core/Channel.ff +95 -92
- package/core/Char.ff +3 -2
- package/core/Core.ff +16 -23
- package/core/Crypto.ff +94 -96
- package/core/Equal.ff +41 -36
- package/core/Error.ff +15 -10
- package/core/FileHandle.ff +45 -37
- package/core/Float.ff +176 -200
- package/core/HttpClient.ff +142 -148
- package/core/Instant.ff +6 -8
- package/core/Int.ff +40 -24
- package/core/IntMap.ff +61 -39
- package/core/Js.ff +305 -0
- package/core/JsSystem.ff +135 -114
- package/core/JsValue.ff +303 -159
- package/core/Json.ff +423 -443
- package/core/List.ff +482 -486
- package/core/Lock.ff +108 -144
- package/core/Log.ff +25 -14
- package/core/NodeSystem.ff +198 -191
- package/core/Ordering.ff +160 -161
- package/core/Path.ff +377 -409
- package/core/Queue.ff +90 -0
- package/core/Random.ff +140 -134
- package/core/RbMap.ff +216 -216
- package/core/Serializable.ff +16 -13
- package/core/Show.ff +44 -43
- package/core/SourceLocation.ff +68 -68
- package/core/Stream.ff +1 -1
- package/core/String.ff +224 -202
- package/core/StringMap.ff +58 -36
- package/core/Task.ff +165 -149
- package/experimental/benchmarks/ListGrab.ff +23 -23
- package/experimental/benchmarks/ListGrab.java +55 -55
- package/experimental/benchmarks/Pyrotek45.ff +30 -30
- package/experimental/benchmarks/Pyrotek45.java +64 -64
- package/experimental/bidirectional/Bidi.ff +88 -88
- package/experimental/lines/Main.ff +40 -0
- package/experimental/random/Index.ff +53 -53
- package/experimental/random/Process.ff +120 -120
- package/experimental/random/RunLength.ff +65 -65
- package/experimental/random/Scrape.ff +51 -51
- package/experimental/random/Symbols.ff +73 -73
- package/experimental/random/Tensor.ff +52 -52
- package/experimental/random/Units.ff +36 -36
- package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
- package/experimental/s3/S3TestPut.ff +16 -16
- package/experimental/tests/TestJson.ff +26 -26
- package/firefly.sh +0 -0
- package/fireflysite/.firefly/package.ff +4 -4
- package/fireflysite/CommunityOverview.ff +20 -20
- package/fireflysite/CountingButtonDemo.ff +58 -58
- package/fireflysite/DocumentParser.ff +325 -331
- package/fireflysite/ExamplesOverview.ff +40 -40
- package/fireflysite/FrontPage.ff +344 -344
- package/fireflysite/GettingStarted.ff +45 -45
- package/fireflysite/Guide.ff +456 -456
- package/fireflysite/Main.ff +163 -152
- package/fireflysite/MatchingPasswordsDemo.ff +82 -82
- package/fireflysite/PackagesOverview.ff +49 -49
- package/fireflysite/PostgresqlDemo.ff +34 -34
- package/fireflysite/ReferenceAll.ff +18 -18
- package/fireflysite/ReferenceIntroduction.ff +11 -11
- package/fireflysite/Styles.ff +567 -567
- package/fireflysite/Test.ff +121 -62
- package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
- package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
- package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
- package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
- package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
- package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
- package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
- package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
- package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
- package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
- package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
- package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
- package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
- package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
- package/lsp/.firefly/package.ff +1 -1
- package/lsp/CompletionHandler.ff +827 -827
- package/lsp/Handler.ff +714 -714
- package/lsp/HoverHandler.ff +79 -79
- package/lsp/LanguageServer.ff +272 -272
- package/lsp/SignatureHelpHandler.ff +55 -55
- package/lsp/SymbolHandler.ff +181 -181
- package/lsp/TestReferences.ff +17 -17
- package/lsp/TestReferencesCase.ff +7 -7
- package/lsp/stderr.txt +1 -1
- package/lsp/stdout.txt +34 -34
- package/lux/.firefly/package.ff +1 -1
- package/lux/Css.ff +648 -648
- package/lux/CssTest.ff +48 -48
- package/lux/Lux.ff +608 -617
- package/lux/LuxEvent.ff +79 -116
- package/lux/Main.ff +123 -123
- package/lux/Main2.ff +143 -143
- package/lux/TestDry.ff +28 -28
- package/output/js/ff/compiler/Builder.mjs +72 -71
- package/output/js/ff/compiler/Compiler.mjs +19 -13
- package/output/js/ff/compiler/Dependencies.mjs +8 -7
- package/output/js/ff/compiler/DependencyLock.mjs +6 -4
- package/output/js/ff/compiler/Deriver.mjs +26 -24
- package/output/js/ff/compiler/Dictionaries.mjs +14 -18
- package/output/js/ff/compiler/Environment.mjs +6 -4
- package/output/js/ff/compiler/Inference.mjs +238 -164
- package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
- package/output/js/ff/compiler/JsImporter.mjs +20 -18
- package/output/js/ff/compiler/LspHook.mjs +12 -10
- package/output/js/ff/compiler/Main.mjs +61 -41
- package/output/js/ff/compiler/ModuleCache.mjs +10 -8
- package/output/js/ff/compiler/Parser.mjs +153 -669
- package/output/js/ff/compiler/Patterns.mjs +12 -10
- package/output/js/ff/compiler/Resolver.mjs +52 -78
- package/output/js/ff/compiler/Substitution.mjs +12 -16
- package/output/js/ff/compiler/Syntax.mjs +50 -341
- package/output/js/ff/compiler/Token.mjs +126 -4
- package/output/js/ff/compiler/Tokenizer.mjs +62 -52
- package/output/js/ff/compiler/Unification.mjs +74 -90
- package/output/js/ff/compiler/Wildcards.mjs +4 -2
- package/output/js/ff/compiler/Workspace.mjs +26 -20
- package/output/js/ff/core/Any.mjs +20 -20
- package/output/js/ff/core/Array.mjs +268 -175
- package/output/js/ff/core/AssetSystem.mjs +8 -6
- package/output/js/ff/core/Atomic.mjs +84 -52
- package/output/js/ff/core/Bool.mjs +6 -4
- package/output/js/ff/core/BrowserSystem.mjs +38 -29
- package/output/js/ff/core/Buffer.mjs +285 -133
- package/output/js/ff/core/BuildSystem.mjs +36 -56
- package/output/js/ff/core/Channel.mjs +250 -97
- package/output/js/ff/core/Char.mjs +5 -3
- package/output/js/ff/core/Core.mjs +28 -34
- package/output/js/ff/core/Crypto.mjs +30 -52
- package/output/js/ff/core/Duration.mjs +4 -2
- package/output/js/ff/core/Equal.mjs +14 -12
- package/output/js/ff/core/Error.mjs +17 -11
- package/output/js/ff/core/FileHandle.mjs +76 -38
- package/output/js/ff/core/Float.mjs +92 -160
- package/output/js/ff/core/HttpClient.mjs +208 -76
- package/output/js/ff/core/Instant.mjs +8 -10
- package/output/js/ff/core/Int.mjs +36 -26
- package/output/js/ff/core/IntMap.mjs +79 -33
- package/output/js/ff/core/Js.mjs +751 -0
- package/output/js/ff/core/JsSystem.mjs +54 -60
- package/output/js/ff/core/JsValue.mjs +294 -143
- package/output/js/ff/core/Json.mjs +443 -253
- package/output/js/ff/core/List.mjs +262 -214
- package/output/js/ff/core/Lock.mjs +156 -125
- package/output/js/ff/core/Log.mjs +20 -10
- package/output/js/ff/core/Map.mjs +10 -8
- package/output/js/ff/core/NodeSystem.mjs +189 -123
- package/output/js/ff/core/Nothing.mjs +4 -2
- package/output/js/ff/core/Option.mjs +40 -38
- package/output/js/ff/core/Ordering.mjs +26 -20
- package/output/js/ff/core/Pair.mjs +4 -2
- package/output/js/ff/core/Path.mjs +517 -315
- package/output/js/ff/core/Queue.mjs +306 -0
- package/output/js/ff/core/Random.mjs +141 -77
- package/output/js/ff/core/RbMap.mjs +36 -34
- package/output/js/ff/core/Serializable.mjs +44 -28
- package/output/js/ff/core/Set.mjs +6 -4
- package/output/js/ff/core/Show.mjs +8 -6
- package/output/js/ff/core/SourceLocation.mjs +4 -2
- package/output/js/ff/core/Stream.mjs +30 -50
- package/output/js/ff/core/String.mjs +263 -172
- package/output/js/ff/core/StringMap.mjs +77 -31
- package/output/js/ff/core/Task.mjs +91 -76
- package/output/js/ff/core/Try.mjs +20 -18
- package/output/js/ff/core/Unit.mjs +4 -2
- package/package.json +1 -1
- package/postgresql/Pg.ff +53 -59
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +70 -70
- package/s3/.firefly/package.ff +1 -1
- package/s3/S3.ff +92 -94
- package/vscode/LICENSE.txt +21 -21
- package/vscode/Prepublish.ff +15 -15
- package/vscode/README.md +16 -16
- package/vscode/client/package-lock.json +544 -544
- package/vscode/client/package.json +22 -22
- package/vscode/client/src/extension.ts +104 -104
- package/vscode/icons/firefly-icon.svg +10 -10
- package/vscode/language-configuration.json +61 -61
- package/vscode/package-lock.json +3623 -3623
- package/vscode/package.json +1 -1
- package/vscode/snippets.json +241 -241
- package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
- package/webserver/.firefly/include/package.json +5 -5
- package/webserver/.firefly/package.ff +2 -2
- package/webserver/WebServer.ff +647 -685
- package/websocket/.firefly/package.ff +1 -1
- package/websocket/WebSocket.ff +100 -131
- package/core/UnsafeJs.ff +0 -42
- package/output/js/ff/core/UnsafeJs.mjs +0 -191
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import * as ff_core_Any from "../../ff/core/Any.mjs"
|
|
4
|
+
|
|
5
|
+
import * as ff_core_Array from "../../ff/core/Array.mjs"
|
|
6
|
+
|
|
7
|
+
import * as ff_core_AssetSystem from "../../ff/core/AssetSystem.mjs"
|
|
8
|
+
|
|
9
|
+
import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
|
|
10
|
+
|
|
11
|
+
import * as ff_core_Bool from "../../ff/core/Bool.mjs"
|
|
12
|
+
|
|
13
|
+
import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
|
|
14
|
+
|
|
15
|
+
import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
|
|
16
|
+
|
|
17
|
+
import * as ff_core_BuildSystem from "../../ff/core/BuildSystem.mjs"
|
|
18
|
+
|
|
19
|
+
import * as ff_core_Channel from "../../ff/core/Channel.mjs"
|
|
20
|
+
|
|
21
|
+
import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
22
|
+
|
|
23
|
+
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
|
+
|
|
25
|
+
import * as ff_core_Crypto from "../../ff/core/Crypto.mjs"
|
|
26
|
+
|
|
27
|
+
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
28
|
+
|
|
29
|
+
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
30
|
+
|
|
31
|
+
import * as ff_core_Error from "../../ff/core/Error.mjs"
|
|
32
|
+
|
|
33
|
+
import * as ff_core_FileHandle from "../../ff/core/FileHandle.mjs"
|
|
34
|
+
|
|
35
|
+
import * as ff_core_Float from "../../ff/core/Float.mjs"
|
|
36
|
+
|
|
37
|
+
import * as ff_core_HttpClient from "../../ff/core/HttpClient.mjs"
|
|
38
|
+
|
|
39
|
+
import * as ff_core_Instant from "../../ff/core/Instant.mjs"
|
|
40
|
+
|
|
41
|
+
import * as ff_core_Int from "../../ff/core/Int.mjs"
|
|
42
|
+
|
|
43
|
+
import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
|
|
44
|
+
|
|
45
|
+
import * as ff_core_Js from "../../ff/core/Js.mjs"
|
|
46
|
+
|
|
47
|
+
import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
|
|
48
|
+
|
|
49
|
+
import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
|
|
50
|
+
|
|
51
|
+
import * as ff_core_Json from "../../ff/core/Json.mjs"
|
|
52
|
+
|
|
53
|
+
import * as ff_core_List from "../../ff/core/List.mjs"
|
|
54
|
+
|
|
55
|
+
import * as ff_core_Lock from "../../ff/core/Lock.mjs"
|
|
56
|
+
|
|
57
|
+
import * as ff_core_Log from "../../ff/core/Log.mjs"
|
|
58
|
+
|
|
59
|
+
import * as ff_core_Map from "../../ff/core/Map.mjs"
|
|
60
|
+
|
|
61
|
+
import * as ff_core_NodeSystem from "../../ff/core/NodeSystem.mjs"
|
|
62
|
+
|
|
63
|
+
import * as ff_core_Nothing from "../../ff/core/Nothing.mjs"
|
|
64
|
+
|
|
65
|
+
import * as ff_core_Option from "../../ff/core/Option.mjs"
|
|
66
|
+
|
|
67
|
+
import * as ff_core_Ordering from "../../ff/core/Ordering.mjs"
|
|
68
|
+
|
|
69
|
+
import * as ff_core_Pair from "../../ff/core/Pair.mjs"
|
|
70
|
+
|
|
71
|
+
import * as ff_core_Path from "../../ff/core/Path.mjs"
|
|
72
|
+
|
|
73
|
+
import * as ff_core_Queue from "../../ff/core/Queue.mjs"
|
|
74
|
+
|
|
75
|
+
import * as ff_core_Random from "../../ff/core/Random.mjs"
|
|
76
|
+
|
|
77
|
+
import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
|
|
78
|
+
|
|
79
|
+
import * as ff_core_Set from "../../ff/core/Set.mjs"
|
|
80
|
+
|
|
81
|
+
import * as ff_core_Show from "../../ff/core/Show.mjs"
|
|
82
|
+
|
|
83
|
+
import * as ff_core_SourceLocation from "../../ff/core/SourceLocation.mjs"
|
|
84
|
+
|
|
85
|
+
import * as ff_core_Stream from "../../ff/core/Stream.mjs"
|
|
86
|
+
|
|
87
|
+
import * as ff_core_String from "../../ff/core/String.mjs"
|
|
88
|
+
|
|
89
|
+
import * as ff_core_StringMap from "../../ff/core/StringMap.mjs"
|
|
90
|
+
|
|
91
|
+
import * as ff_core_Task from "../../ff/core/Task.mjs"
|
|
92
|
+
|
|
93
|
+
import * as ff_core_Try from "../../ff/core/Try.mjs"
|
|
94
|
+
|
|
95
|
+
import * as ff_core_Unit from "../../ff/core/Unit.mjs"
|
|
96
|
+
|
|
97
|
+
// type Queue
|
|
98
|
+
export function Queue(items_, nextKey_) {
|
|
99
|
+
return {items_, nextKey_};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// newtype QueueKey
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
export function new_() {
|
|
107
|
+
return ff_core_Queue.Queue(ff_core_IntMap.new_(), 0)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export async function new_$($task) {
|
|
111
|
+
return ff_core_Queue.Queue(ff_core_IntMap.new_(), 0)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function Queue_push(self_, item_) {
|
|
115
|
+
self_.nextKey_ += 1;
|
|
116
|
+
ff_core_IntMap.IntMap_set(self_.items_, self_.nextKey_, item_);
|
|
117
|
+
return self_.nextKey_
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function Queue_pop(self_) {
|
|
121
|
+
if((ff_core_IntMap.IntMap_size(self_.items_) === 0)) {
|
|
122
|
+
return ff_core_Option.None()
|
|
123
|
+
} else {
|
|
124
|
+
const key_ = self_.items_.keys().next().value;
|
|
125
|
+
const value_ = ff_core_IntMap.IntMap_get(self_.items_, key_);
|
|
126
|
+
ff_core_IntMap.IntMap_remove(self_.items_, key_);
|
|
127
|
+
return value_
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function Queue_first(self_) {
|
|
132
|
+
if((ff_core_IntMap.IntMap_size(self_.items_) === 0)) {
|
|
133
|
+
return ff_core_Option.None()
|
|
134
|
+
} else {
|
|
135
|
+
const key_ = self_.items_.keys().next().value;
|
|
136
|
+
const value_ = ff_core_IntMap.IntMap_get(self_.items_, key_);
|
|
137
|
+
return value_
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function Queue_remove(self_, key_) {
|
|
142
|
+
return ff_core_IntMap.IntMap_remove(self_.items_, key_)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export function Queue_has(self_, key_) {
|
|
146
|
+
return ff_core_IntMap.IntMap_has(self_.items_, key_)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function Queue_clear(self_) {
|
|
150
|
+
ff_core_IntMap.IntMap_clear(self_.items_)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export function Queue_size(self_) {
|
|
154
|
+
return ff_core_IntMap.IntMap_size(self_.items_)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function Queue_isEmpty(self_) {
|
|
158
|
+
return (ff_core_Queue.Queue_size(self_) === 0)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function Queue_each(self_, body_) {
|
|
162
|
+
ff_core_IntMap.IntMap_each(self_.items_, ((k_, v_) => {
|
|
163
|
+
body_(k_, v_)
|
|
164
|
+
}))
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function Queue_eachWhile(self_, body_) {
|
|
168
|
+
ff_core_IntMap.IntMap_eachWhile(self_.items_, ((k_, v_) => {
|
|
169
|
+
return body_(k_, v_)
|
|
170
|
+
}))
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function Queue_toArray(self_) {
|
|
174
|
+
const array_ = ff_core_Array.new_();
|
|
175
|
+
ff_core_Queue.Queue_each(self_, ((_, v_) => {
|
|
176
|
+
array_.array.push(v_)
|
|
177
|
+
}));
|
|
178
|
+
return array_
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function Queue_toList(self_) {
|
|
182
|
+
return ff_core_Array.Array_drain(ff_core_Queue.Queue_toArray(self_))
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function Queue_toStream(self_) {
|
|
186
|
+
return ff_core_List.List_toStream(ff_core_Queue.Queue_toList(self_), false)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export function Queue_keys(self_) {
|
|
190
|
+
const array_ = ff_core_Array.new_();
|
|
191
|
+
ff_core_IntMap.IntMap_each(self_.items_, ((k_, _) => {
|
|
192
|
+
array_.array.push(k_)
|
|
193
|
+
}));
|
|
194
|
+
return ff_core_Array.Array_drain(array_)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function Queue_values(self_) {
|
|
198
|
+
const array_ = ff_core_Array.new_();
|
|
199
|
+
ff_core_IntMap.IntMap_each(self_.items_, ((_, v_) => {
|
|
200
|
+
array_.array.push(v_)
|
|
201
|
+
}));
|
|
202
|
+
return ff_core_Array.Array_drain(array_)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export function Queue_copy(self_) {
|
|
206
|
+
return ff_core_Queue.Queue(ff_core_IntMap.IntMap_copy(self_.items_), self_.nextKey_)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export async function Queue_push$(self_, item_, $task) {
|
|
210
|
+
self_.nextKey_ += 1;
|
|
211
|
+
ff_core_IntMap.IntMap_set(self_.items_, self_.nextKey_, item_);
|
|
212
|
+
return self_.nextKey_
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export async function Queue_pop$(self_, $task) {
|
|
216
|
+
if((ff_core_IntMap.IntMap_size(self_.items_) === 0)) {
|
|
217
|
+
return ff_core_Option.None()
|
|
218
|
+
} else {
|
|
219
|
+
const key_ = self_.items_.keys().next().value;
|
|
220
|
+
const value_ = ff_core_IntMap.IntMap_get(self_.items_, key_);
|
|
221
|
+
ff_core_IntMap.IntMap_remove(self_.items_, key_);
|
|
222
|
+
return value_
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export async function Queue_first$(self_, $task) {
|
|
227
|
+
if((ff_core_IntMap.IntMap_size(self_.items_) === 0)) {
|
|
228
|
+
return ff_core_Option.None()
|
|
229
|
+
} else {
|
|
230
|
+
const key_ = self_.items_.keys().next().value;
|
|
231
|
+
const value_ = ff_core_IntMap.IntMap_get(self_.items_, key_);
|
|
232
|
+
return value_
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export async function Queue_remove$(self_, key_, $task) {
|
|
237
|
+
return ff_core_IntMap.IntMap_remove(self_.items_, key_)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export async function Queue_has$(self_, key_, $task) {
|
|
241
|
+
return ff_core_IntMap.IntMap_has(self_.items_, key_)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export async function Queue_clear$(self_, $task) {
|
|
245
|
+
ff_core_IntMap.IntMap_clear(self_.items_)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export async function Queue_size$(self_, $task) {
|
|
249
|
+
return ff_core_IntMap.IntMap_size(self_.items_)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export async function Queue_isEmpty$(self_, $task) {
|
|
253
|
+
return (ff_core_Queue.Queue_size(self_) === 0)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export async function Queue_each$(self_, body_, $task) {
|
|
257
|
+
(await ff_core_IntMap.IntMap_each$(self_.items_, (async (k_, v_, $task) => {
|
|
258
|
+
(await body_(k_, v_, $task))
|
|
259
|
+
}), $task))
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
export async function Queue_eachWhile$(self_, body_, $task) {
|
|
263
|
+
(await ff_core_IntMap.IntMap_eachWhile$(self_.items_, (async (k_, v_, $task) => {
|
|
264
|
+
return (await body_(k_, v_, $task))
|
|
265
|
+
}), $task))
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export async function Queue_toArray$(self_, $task) {
|
|
269
|
+
const array_ = ff_core_Array.new_();
|
|
270
|
+
ff_core_Queue.Queue_each(self_, ((_, v_) => {
|
|
271
|
+
array_.array.push(v_)
|
|
272
|
+
}));
|
|
273
|
+
return array_
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export async function Queue_toList$(self_, $task) {
|
|
277
|
+
return ff_core_Array.Array_drain(ff_core_Queue.Queue_toArray(self_))
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export async function Queue_toStream$(self_, $task) {
|
|
281
|
+
return (await ff_core_List.List_toStream$(ff_core_Queue.Queue_toList(self_), false, $task))
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export async function Queue_keys$(self_, $task) {
|
|
285
|
+
const array_ = ff_core_Array.new_();
|
|
286
|
+
ff_core_IntMap.IntMap_each(self_.items_, ((k_, _) => {
|
|
287
|
+
array_.array.push(k_)
|
|
288
|
+
}));
|
|
289
|
+
return ff_core_Array.Array_drain(array_)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
export async function Queue_values$(self_, $task) {
|
|
293
|
+
const array_ = ff_core_Array.new_();
|
|
294
|
+
ff_core_IntMap.IntMap_each(self_.items_, ((_, v_) => {
|
|
295
|
+
array_.array.push(v_)
|
|
296
|
+
}));
|
|
297
|
+
return ff_core_Array.Array_drain(array_)
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export async function Queue_copy$(self_, $task) {
|
|
301
|
+
return ff_core_Queue.Queue(ff_core_IntMap.IntMap_copy(self_.items_), self_.nextKey_)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
|
|
@@ -42,6 +42,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
|
|
|
42
42
|
|
|
43
43
|
import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
|
|
44
44
|
|
|
45
|
+
import * as ff_core_Js from "../../ff/core/Js.mjs"
|
|
46
|
+
|
|
45
47
|
import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
|
|
46
48
|
|
|
47
49
|
import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
|
|
@@ -68,6 +70,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
|
|
|
68
70
|
|
|
69
71
|
import * as ff_core_Path from "../../ff/core/Path.mjs"
|
|
70
72
|
|
|
73
|
+
import * as ff_core_Queue from "../../ff/core/Queue.mjs"
|
|
74
|
+
|
|
71
75
|
import * as ff_core_Random from "../../ff/core/Random.mjs"
|
|
72
76
|
|
|
73
77
|
import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
|
|
@@ -90,10 +94,10 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
|
|
|
90
94
|
|
|
91
95
|
import * as ff_core_Unit from "../../ff/core/Unit.mjs"
|
|
92
96
|
|
|
93
|
-
import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
|
|
94
|
-
|
|
95
97
|
// type Random
|
|
96
|
-
|
|
98
|
+
export function Random(s0_, s1_, s2_, c_, spareGauss_) {
|
|
99
|
+
return {s0_, s1_, s2_, c_, spareGauss_};
|
|
100
|
+
}
|
|
97
101
|
|
|
98
102
|
|
|
99
103
|
|
|
@@ -112,37 +116,36 @@ return ff_core_Random.newFromFloat_(seed_)
|
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
export function newFromBuffer_(buffer_) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
119
|
+
let n_ = ff_core_Int.Int_toFloat(0xefc8249d);
|
|
120
|
+
function mash_(data_) {
|
|
121
|
+
for(let for_i = 0, for_e = ff_core_Buffer.Buffer_size(data_); for_i < for_e; for_i++) {
|
|
122
|
+
const i_ = for_i;
|
|
123
|
+
n_ += ff_core_Int.Int_toFloat(ff_core_Buffer.Buffer_grabUint8(data_, i_));
|
|
124
|
+
let h_ = (0.02519603282416938 * n_);
|
|
125
|
+
n_ = (h_ >>> 0);
|
|
126
|
+
h_ -= n_;
|
|
127
|
+
h_ *= n_;
|
|
128
|
+
n_ = (h_ >>> 0);
|
|
129
|
+
h_ -= n_;
|
|
130
|
+
n_ += (h_ * 0x100000000)
|
|
131
|
+
};
|
|
132
|
+
return ((n_ >>> 0) * 2.3283064365386963e-10)
|
|
133
|
+
}
|
|
134
|
+
const space_ = (new DataView((new Uint8Array([32])).buffer));
|
|
135
|
+
const r_ = ff_core_Random.Random(mash_(space_), mash_(space_), mash_(space_), 1.0, ff_core_Float.nan_());
|
|
136
|
+
r_.s0_ -= mash_(buffer_);
|
|
137
|
+
if((r_.s0_ < 0.0)) {
|
|
138
|
+
r_.s0_ += 1.0
|
|
139
|
+
};
|
|
140
|
+
r_.s1_ -= mash_(buffer_);
|
|
141
|
+
if((r_.s1_ < 0.0)) {
|
|
142
|
+
r_.s1_ += 1.0
|
|
143
|
+
};
|
|
144
|
+
r_.s2_ -= mash_(buffer_);
|
|
145
|
+
if((r_.s2_ < 0.0)) {
|
|
146
|
+
r_.s2_ += 1.0
|
|
147
|
+
};
|
|
148
|
+
return r_
|
|
146
149
|
}
|
|
147
150
|
|
|
148
151
|
export async function newFromInt_$(seed_, $task) {
|
|
@@ -160,29 +163,60 @@ return ff_core_Random.newFromFloat_(seed_)
|
|
|
160
163
|
}
|
|
161
164
|
|
|
162
165
|
export async function newFromBuffer_$(buffer_, $task) {
|
|
163
|
-
|
|
166
|
+
let n_ = ff_core_Int.Int_toFloat(0xefc8249d);
|
|
167
|
+
function mash_(data_) {
|
|
168
|
+
for(let for_i = 0, for_e = ff_core_Buffer.Buffer_size(data_); for_i < for_e; for_i++) {
|
|
169
|
+
const i_ = for_i;
|
|
170
|
+
n_ += ff_core_Int.Int_toFloat(ff_core_Buffer.Buffer_grabUint8(data_, i_));
|
|
171
|
+
let h_ = (0.02519603282416938 * n_);
|
|
172
|
+
n_ = (h_ >>> 0);
|
|
173
|
+
h_ -= n_;
|
|
174
|
+
h_ *= n_;
|
|
175
|
+
n_ = (h_ >>> 0);
|
|
176
|
+
h_ -= n_;
|
|
177
|
+
n_ += (h_ * 0x100000000)
|
|
178
|
+
};
|
|
179
|
+
return ((n_ >>> 0) * 2.3283064365386963e-10)
|
|
180
|
+
}
|
|
181
|
+
const space_ = (new DataView((new Uint8Array([32])).buffer));
|
|
182
|
+
const r_ = ff_core_Random.Random(mash_(space_), mash_(space_), mash_(space_), 1.0, ff_core_Float.nan_());
|
|
183
|
+
r_.s0_ -= mash_(buffer_);
|
|
184
|
+
if((r_.s0_ < 0.0)) {
|
|
185
|
+
r_.s0_ += 1.0
|
|
186
|
+
};
|
|
187
|
+
r_.s1_ -= mash_(buffer_);
|
|
188
|
+
if((r_.s1_ < 0.0)) {
|
|
189
|
+
r_.s1_ += 1.0
|
|
190
|
+
};
|
|
191
|
+
r_.s2_ -= mash_(buffer_);
|
|
192
|
+
if((r_.s2_ < 0.0)) {
|
|
193
|
+
r_.s2_ += 1.0
|
|
194
|
+
};
|
|
195
|
+
return r_
|
|
164
196
|
}
|
|
165
197
|
|
|
166
198
|
export function Random_copy(self_) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
199
|
+
{
|
|
200
|
+
const _1 = self_;
|
|
201
|
+
{
|
|
202
|
+
const _c = _1;
|
|
203
|
+
return ff_core_Random.Random(_c.s0_, _c.s1_, _c.s2_, _c.c_, _c.spareGauss_)
|
|
204
|
+
}
|
|
205
|
+
}
|
|
170
206
|
}
|
|
171
207
|
|
|
172
208
|
export function Random_nextInt(self_, from_, until_) {
|
|
173
|
-
|
|
174
|
-
return Random_nextFloat(self_, from_, until_) | 0;
|
|
175
|
-
|
|
209
|
+
return (ff_core_Random.Random_nextFloat(self_, ff_core_Int.Int_toFloat(from_), ff_core_Int.Int_toFloat(until_)) | 0)
|
|
176
210
|
}
|
|
177
211
|
|
|
178
212
|
export function Random_nextFloat(self_, from_, until_) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
213
|
+
const t_ = ((2091639 * self_.s0_) + (self_.c_ * 2.3283064365386963e-10));
|
|
214
|
+
self_.s0_ = self_.s1_;
|
|
215
|
+
self_.s1_ = self_.s2_;
|
|
216
|
+
self_.c_ = (t_ | 0);
|
|
217
|
+
const uniform_ = (t_ - self_.c_);
|
|
218
|
+
self_.s2_ = uniform_;
|
|
219
|
+
return (from_ + (uniform_ * (until_ - from_)))
|
|
186
220
|
}
|
|
187
221
|
|
|
188
222
|
export function Random_nextBool(self_) {
|
|
@@ -197,31 +231,32 @@ ff_core_Buffer.Buffer_setUint8(buffer_, i_, ff_core_Random.Random_nextInt(self_,
|
|
|
197
231
|
}
|
|
198
232
|
|
|
199
233
|
export function Random_nextGauss(self_, mean_, standardDeviation_) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
234
|
+
if((!ff_core_Float.Float_isNan(self_.spareGauss_))) {
|
|
235
|
+
const result_ = ((self_.spareGauss_ * standardDeviation_) + mean_);
|
|
236
|
+
self_.spareGauss_ = ff_core_Float.nan_();
|
|
237
|
+
return result_
|
|
238
|
+
} else {
|
|
239
|
+
let u_ = 0.5;
|
|
240
|
+
let v_ = 0.5;
|
|
241
|
+
let s_ = 0.5;
|
|
242
|
+
while(true) {
|
|
243
|
+
u_ = ((ff_core_Random.Random_nextFloat(self_, 0.0, 1.0) * 2) - 1);
|
|
244
|
+
v_ = ((ff_core_Random.Random_nextFloat(self_, 0.0, 1.0) * 2) - 1);
|
|
245
|
+
s_ = ((u_ * u_) + (v_ * v_));
|
|
246
|
+
if(!((s_ >= 1.0) || (s_ === 0.0))) break
|
|
247
|
+
};
|
|
248
|
+
s_ = ff_core_Float.Float_sqrt((((-2.0) * ff_core_Float.Float_ln(s_)) / s_));
|
|
249
|
+
self_.spareGauss_ = (v_ * s_);
|
|
250
|
+
return (mean_ + ((standardDeviation_ * u_) * s_))
|
|
251
|
+
}
|
|
217
252
|
}
|
|
218
253
|
|
|
219
254
|
export function Random_shuffleArray(self_, array_) {
|
|
220
255
|
for(let for_i = 0, for_e = (array_.array.length - 1); for_i < for_e; for_i++) {
|
|
221
256
|
const i_ = for_i;
|
|
222
257
|
const j_ = (ff_core_Random.Random_nextInt(self_, 0, (array_.array.length - i_)) + i_);
|
|
223
|
-
const value_ = (array_.array[i_] ?? ff_core_Array.
|
|
224
|
-
ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.
|
|
258
|
+
const value_ = (array_.array[i_] ?? ff_core_Array.Array_grab(array_, i_));
|
|
259
|
+
ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.Array_grab(array_, j_)));
|
|
225
260
|
ff_core_Array.Array_set(array_, j_, value_)
|
|
226
261
|
}
|
|
227
262
|
}
|
|
@@ -233,7 +268,7 @@ return ff_core_Array.Array_drain(array_)
|
|
|
233
268
|
}
|
|
234
269
|
|
|
235
270
|
export function Random_sampleArray(self_, count_, array_, body_) {
|
|
236
|
-
for(let
|
|
271
|
+
for(let for_a = ff_core_Random.Random_shuffleList(self_, ff_core_Array.Array_toList(array_, 0, 9007199254740991)), for_i = 0, for_l = Math.min(Math.max(count_, 0), for_a.length); for_i < for_l; for_i++) {
|
|
237
272
|
const _w1 = for_a[for_i];
|
|
238
273
|
body_(_w1)
|
|
239
274
|
}
|
|
@@ -244,7 +279,7 @@ return ff_core_List.List_takeFirst(ff_core_Random.Random_shuffleList(self_, list
|
|
|
244
279
|
}
|
|
245
280
|
|
|
246
281
|
export function Random_grabArray(self_, array_) {
|
|
247
|
-
return
|
|
282
|
+
return ff_core_Array.Array_grab(array_, ff_core_Random.Random_nextInt(self_, 0, array_.array.length))
|
|
248
283
|
}
|
|
249
284
|
|
|
250
285
|
export function Random_grabList(self_, list_) {
|
|
@@ -252,15 +287,27 @@ return ff_core_List.List_grab(list_, ff_core_Random.Random_nextInt(self_, 0, lis
|
|
|
252
287
|
}
|
|
253
288
|
|
|
254
289
|
export async function Random_copy$(self_, $task) {
|
|
255
|
-
|
|
290
|
+
{
|
|
291
|
+
const _1 = self_;
|
|
292
|
+
{
|
|
293
|
+
const _c = _1;
|
|
294
|
+
return ff_core_Random.Random(_c.s0_, _c.s1_, _c.s2_, _c.c_, _c.spareGauss_)
|
|
295
|
+
}
|
|
296
|
+
}
|
|
256
297
|
}
|
|
257
298
|
|
|
258
299
|
export async function Random_nextInt$(self_, from_, until_, $task) {
|
|
259
|
-
|
|
300
|
+
return (ff_core_Random.Random_nextFloat(self_, ff_core_Int.Int_toFloat(from_), ff_core_Int.Int_toFloat(until_)) | 0)
|
|
260
301
|
}
|
|
261
302
|
|
|
262
303
|
export async function Random_nextFloat$(self_, from_, until_, $task) {
|
|
263
|
-
|
|
304
|
+
const t_ = ((2091639 * self_.s0_) + (self_.c_ * 2.3283064365386963e-10));
|
|
305
|
+
self_.s0_ = self_.s1_;
|
|
306
|
+
self_.s1_ = self_.s2_;
|
|
307
|
+
self_.c_ = (t_ | 0);
|
|
308
|
+
const uniform_ = (t_ - self_.c_);
|
|
309
|
+
self_.s2_ = uniform_;
|
|
310
|
+
return (from_ + (uniform_ * (until_ - from_)))
|
|
264
311
|
}
|
|
265
312
|
|
|
266
313
|
export async function Random_nextBool$(self_, $task) {
|
|
@@ -275,15 +322,32 @@ ff_core_Buffer.Buffer_setUint8(buffer_, i_, ff_core_Random.Random_nextInt(self_,
|
|
|
275
322
|
}
|
|
276
323
|
|
|
277
324
|
export async function Random_nextGauss$(self_, mean_, standardDeviation_, $task) {
|
|
278
|
-
|
|
325
|
+
if((!ff_core_Float.Float_isNan(self_.spareGauss_))) {
|
|
326
|
+
const result_ = ((self_.spareGauss_ * standardDeviation_) + mean_);
|
|
327
|
+
self_.spareGauss_ = ff_core_Float.nan_();
|
|
328
|
+
return result_
|
|
329
|
+
} else {
|
|
330
|
+
let u_ = 0.5;
|
|
331
|
+
let v_ = 0.5;
|
|
332
|
+
let s_ = 0.5;
|
|
333
|
+
while(true) {
|
|
334
|
+
u_ = ((ff_core_Random.Random_nextFloat(self_, 0.0, 1.0) * 2) - 1);
|
|
335
|
+
v_ = ((ff_core_Random.Random_nextFloat(self_, 0.0, 1.0) * 2) - 1);
|
|
336
|
+
s_ = ((u_ * u_) + (v_ * v_));
|
|
337
|
+
if(!((s_ >= 1.0) || (s_ === 0.0))) break
|
|
338
|
+
};
|
|
339
|
+
s_ = ff_core_Float.Float_sqrt((((-2.0) * ff_core_Float.Float_ln(s_)) / s_));
|
|
340
|
+
self_.spareGauss_ = (v_ * s_);
|
|
341
|
+
return (mean_ + ((standardDeviation_ * u_) * s_))
|
|
342
|
+
}
|
|
279
343
|
}
|
|
280
344
|
|
|
281
345
|
export async function Random_shuffleArray$(self_, array_, $task) {
|
|
282
346
|
for(let for_i = 0, for_e = (array_.array.length - 1); for_i < for_e; for_i++) {
|
|
283
347
|
const i_ = for_i;
|
|
284
348
|
const j_ = (ff_core_Random.Random_nextInt(self_, 0, (array_.array.length - i_)) + i_);
|
|
285
|
-
const value_ = (array_.array[i_] ?? ff_core_Array.
|
|
286
|
-
ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.
|
|
349
|
+
const value_ = (array_.array[i_] ?? ff_core_Array.Array_grab(array_, i_));
|
|
350
|
+
ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.Array_grab(array_, j_)));
|
|
287
351
|
ff_core_Array.Array_set(array_, j_, value_)
|
|
288
352
|
}
|
|
289
353
|
}
|
|
@@ -295,7 +359,7 @@ return ff_core_Array.Array_drain(array_)
|
|
|
295
359
|
}
|
|
296
360
|
|
|
297
361
|
export async function Random_sampleArray$(self_, count_, array_, body_, $task) {
|
|
298
|
-
for(let
|
|
362
|
+
for(let for_a = ff_core_Random.Random_shuffleList(self_, ff_core_Array.Array_toList(array_, 0, 9007199254740991)), for_i = 0, for_l = Math.min(Math.max(count_, 0), for_a.length); for_i < for_l; for_i++) {
|
|
299
363
|
const _w1 = for_a[for_i];
|
|
300
364
|
(await body_(_w1, $task))
|
|
301
365
|
}
|
|
@@ -306,7 +370,7 @@ return ff_core_List.List_takeFirst(ff_core_Random.Random_shuffleList(self_, list
|
|
|
306
370
|
}
|
|
307
371
|
|
|
308
372
|
export async function Random_grabArray$(self_, array_, $task) {
|
|
309
|
-
return
|
|
373
|
+
return ff_core_Array.Array_grab(array_, ff_core_Random.Random_nextInt(self_, 0, array_.array.length))
|
|
310
374
|
}
|
|
311
375
|
|
|
312
376
|
export async function Random_grabList$(self_, list_, $task) {
|