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.
Files changed (225) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +157 -154
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +275 -277
  6. package/compiler/Compiler.ff +234 -233
  7. package/compiler/Dependencies.ff +186 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/Deriver.ff +23 -31
  10. package/compiler/Dictionaries.ff +1 -1
  11. package/compiler/Inference.ff +43 -20
  12. package/compiler/JsEmitter.ff +1437 -1282
  13. package/compiler/LspHook.ff +202 -202
  14. package/compiler/Main.ff +25 -24
  15. package/compiler/ModuleCache.ff +178 -178
  16. package/compiler/Parser.ff +36 -109
  17. package/compiler/Resolver.ff +5 -8
  18. package/compiler/Substitution.ff +1 -1
  19. package/compiler/Syntax.ff +1 -16
  20. package/compiler/Token.ff +9 -0
  21. package/compiler/Tokenizer.ff +4 -0
  22. package/compiler/Workspace.ff +88 -88
  23. package/core/.firefly/include/package.json +5 -5
  24. package/core/.firefly/package.ff +2 -2
  25. package/core/Any.ff +26 -30
  26. package/core/Array.ff +298 -265
  27. package/core/Atomic.ff +63 -64
  28. package/core/Box.ff +7 -7
  29. package/core/BrowserSystem.ff +40 -40
  30. package/core/Buffer.ff +185 -152
  31. package/core/BuildSystem.ff +156 -148
  32. package/core/Channel.ff +95 -92
  33. package/core/Char.ff +3 -2
  34. package/core/Core.ff +16 -23
  35. package/core/Crypto.ff +94 -96
  36. package/core/Equal.ff +41 -36
  37. package/core/Error.ff +15 -10
  38. package/core/FileHandle.ff +45 -37
  39. package/core/Float.ff +176 -200
  40. package/core/HttpClient.ff +142 -148
  41. package/core/Instant.ff +6 -8
  42. package/core/Int.ff +40 -24
  43. package/core/IntMap.ff +61 -39
  44. package/core/Js.ff +305 -0
  45. package/core/JsSystem.ff +135 -114
  46. package/core/JsValue.ff +303 -159
  47. package/core/Json.ff +423 -443
  48. package/core/List.ff +482 -486
  49. package/core/Lock.ff +108 -144
  50. package/core/Log.ff +25 -14
  51. package/core/NodeSystem.ff +198 -191
  52. package/core/Ordering.ff +160 -161
  53. package/core/Path.ff +377 -409
  54. package/core/Queue.ff +90 -0
  55. package/core/Random.ff +140 -134
  56. package/core/RbMap.ff +216 -216
  57. package/core/Serializable.ff +16 -13
  58. package/core/Show.ff +44 -43
  59. package/core/SourceLocation.ff +68 -68
  60. package/core/Stream.ff +1 -1
  61. package/core/String.ff +224 -202
  62. package/core/StringMap.ff +58 -36
  63. package/core/Task.ff +165 -149
  64. package/experimental/benchmarks/ListGrab.ff +23 -23
  65. package/experimental/benchmarks/ListGrab.java +55 -55
  66. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  67. package/experimental/benchmarks/Pyrotek45.java +64 -64
  68. package/experimental/bidirectional/Bidi.ff +88 -88
  69. package/experimental/lines/Main.ff +40 -0
  70. package/experimental/random/Index.ff +53 -53
  71. package/experimental/random/Process.ff +120 -120
  72. package/experimental/random/RunLength.ff +65 -65
  73. package/experimental/random/Scrape.ff +51 -51
  74. package/experimental/random/Symbols.ff +73 -73
  75. package/experimental/random/Tensor.ff +52 -52
  76. package/experimental/random/Units.ff +36 -36
  77. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
  78. package/experimental/s3/S3TestPut.ff +16 -16
  79. package/experimental/tests/TestJson.ff +26 -26
  80. package/firefly.sh +0 -0
  81. package/fireflysite/.firefly/package.ff +4 -4
  82. package/fireflysite/CommunityOverview.ff +20 -20
  83. package/fireflysite/CountingButtonDemo.ff +58 -58
  84. package/fireflysite/DocumentParser.ff +325 -331
  85. package/fireflysite/ExamplesOverview.ff +40 -40
  86. package/fireflysite/FrontPage.ff +344 -344
  87. package/fireflysite/GettingStarted.ff +45 -45
  88. package/fireflysite/Guide.ff +456 -456
  89. package/fireflysite/Main.ff +163 -152
  90. package/fireflysite/MatchingPasswordsDemo.ff +82 -82
  91. package/fireflysite/PackagesOverview.ff +49 -49
  92. package/fireflysite/PostgresqlDemo.ff +34 -34
  93. package/fireflysite/ReferenceAll.ff +18 -18
  94. package/fireflysite/ReferenceIntroduction.ff +11 -11
  95. package/fireflysite/Styles.ff +567 -567
  96. package/fireflysite/Test.ff +121 -62
  97. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
  98. package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
  99. package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
  100. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
  101. package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
  102. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
  103. package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
  104. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
  105. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
  106. package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
  107. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
  108. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
  109. package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
  110. package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
  111. package/lsp/.firefly/package.ff +1 -1
  112. package/lsp/CompletionHandler.ff +827 -827
  113. package/lsp/Handler.ff +714 -714
  114. package/lsp/HoverHandler.ff +79 -79
  115. package/lsp/LanguageServer.ff +272 -272
  116. package/lsp/SignatureHelpHandler.ff +55 -55
  117. package/lsp/SymbolHandler.ff +181 -181
  118. package/lsp/TestReferences.ff +17 -17
  119. package/lsp/TestReferencesCase.ff +7 -7
  120. package/lsp/stderr.txt +1 -1
  121. package/lsp/stdout.txt +34 -34
  122. package/lux/.firefly/package.ff +1 -1
  123. package/lux/Css.ff +648 -648
  124. package/lux/CssTest.ff +48 -48
  125. package/lux/Lux.ff +608 -617
  126. package/lux/LuxEvent.ff +79 -116
  127. package/lux/Main.ff +123 -123
  128. package/lux/Main2.ff +143 -143
  129. package/lux/TestDry.ff +28 -28
  130. package/output/js/ff/compiler/Builder.mjs +72 -71
  131. package/output/js/ff/compiler/Compiler.mjs +19 -13
  132. package/output/js/ff/compiler/Dependencies.mjs +8 -7
  133. package/output/js/ff/compiler/DependencyLock.mjs +6 -4
  134. package/output/js/ff/compiler/Deriver.mjs +26 -24
  135. package/output/js/ff/compiler/Dictionaries.mjs +14 -18
  136. package/output/js/ff/compiler/Environment.mjs +6 -4
  137. package/output/js/ff/compiler/Inference.mjs +238 -164
  138. package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
  139. package/output/js/ff/compiler/JsImporter.mjs +20 -18
  140. package/output/js/ff/compiler/LspHook.mjs +12 -10
  141. package/output/js/ff/compiler/Main.mjs +61 -41
  142. package/output/js/ff/compiler/ModuleCache.mjs +10 -8
  143. package/output/js/ff/compiler/Parser.mjs +153 -669
  144. package/output/js/ff/compiler/Patterns.mjs +12 -10
  145. package/output/js/ff/compiler/Resolver.mjs +52 -78
  146. package/output/js/ff/compiler/Substitution.mjs +12 -16
  147. package/output/js/ff/compiler/Syntax.mjs +50 -341
  148. package/output/js/ff/compiler/Token.mjs +126 -4
  149. package/output/js/ff/compiler/Tokenizer.mjs +62 -52
  150. package/output/js/ff/compiler/Unification.mjs +74 -90
  151. package/output/js/ff/compiler/Wildcards.mjs +4 -2
  152. package/output/js/ff/compiler/Workspace.mjs +26 -20
  153. package/output/js/ff/core/Any.mjs +20 -20
  154. package/output/js/ff/core/Array.mjs +268 -175
  155. package/output/js/ff/core/AssetSystem.mjs +8 -6
  156. package/output/js/ff/core/Atomic.mjs +84 -52
  157. package/output/js/ff/core/Bool.mjs +6 -4
  158. package/output/js/ff/core/BrowserSystem.mjs +38 -29
  159. package/output/js/ff/core/Buffer.mjs +285 -133
  160. package/output/js/ff/core/BuildSystem.mjs +36 -56
  161. package/output/js/ff/core/Channel.mjs +250 -97
  162. package/output/js/ff/core/Char.mjs +5 -3
  163. package/output/js/ff/core/Core.mjs +28 -34
  164. package/output/js/ff/core/Crypto.mjs +30 -52
  165. package/output/js/ff/core/Duration.mjs +4 -2
  166. package/output/js/ff/core/Equal.mjs +14 -12
  167. package/output/js/ff/core/Error.mjs +17 -11
  168. package/output/js/ff/core/FileHandle.mjs +76 -38
  169. package/output/js/ff/core/Float.mjs +92 -160
  170. package/output/js/ff/core/HttpClient.mjs +208 -76
  171. package/output/js/ff/core/Instant.mjs +8 -10
  172. package/output/js/ff/core/Int.mjs +36 -26
  173. package/output/js/ff/core/IntMap.mjs +79 -33
  174. package/output/js/ff/core/Js.mjs +751 -0
  175. package/output/js/ff/core/JsSystem.mjs +54 -60
  176. package/output/js/ff/core/JsValue.mjs +294 -143
  177. package/output/js/ff/core/Json.mjs +443 -253
  178. package/output/js/ff/core/List.mjs +262 -214
  179. package/output/js/ff/core/Lock.mjs +156 -125
  180. package/output/js/ff/core/Log.mjs +20 -10
  181. package/output/js/ff/core/Map.mjs +10 -8
  182. package/output/js/ff/core/NodeSystem.mjs +189 -123
  183. package/output/js/ff/core/Nothing.mjs +4 -2
  184. package/output/js/ff/core/Option.mjs +40 -38
  185. package/output/js/ff/core/Ordering.mjs +26 -20
  186. package/output/js/ff/core/Pair.mjs +4 -2
  187. package/output/js/ff/core/Path.mjs +517 -315
  188. package/output/js/ff/core/Queue.mjs +306 -0
  189. package/output/js/ff/core/Random.mjs +141 -77
  190. package/output/js/ff/core/RbMap.mjs +36 -34
  191. package/output/js/ff/core/Serializable.mjs +44 -28
  192. package/output/js/ff/core/Set.mjs +6 -4
  193. package/output/js/ff/core/Show.mjs +8 -6
  194. package/output/js/ff/core/SourceLocation.mjs +4 -2
  195. package/output/js/ff/core/Stream.mjs +30 -50
  196. package/output/js/ff/core/String.mjs +263 -172
  197. package/output/js/ff/core/StringMap.mjs +77 -31
  198. package/output/js/ff/core/Task.mjs +91 -76
  199. package/output/js/ff/core/Try.mjs +20 -18
  200. package/output/js/ff/core/Unit.mjs +4 -2
  201. package/package.json +1 -1
  202. package/postgresql/Pg.ff +53 -59
  203. package/rpc/.firefly/package.ff +1 -1
  204. package/rpc/Rpc.ff +70 -70
  205. package/s3/.firefly/package.ff +1 -1
  206. package/s3/S3.ff +92 -94
  207. package/vscode/LICENSE.txt +21 -21
  208. package/vscode/Prepublish.ff +15 -15
  209. package/vscode/README.md +16 -16
  210. package/vscode/client/package-lock.json +544 -544
  211. package/vscode/client/package.json +22 -22
  212. package/vscode/client/src/extension.ts +104 -104
  213. package/vscode/icons/firefly-icon.svg +10 -10
  214. package/vscode/language-configuration.json +61 -61
  215. package/vscode/package-lock.json +3623 -3623
  216. package/vscode/package.json +1 -1
  217. package/vscode/snippets.json +241 -241
  218. package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
  219. package/webserver/.firefly/include/package.json +5 -5
  220. package/webserver/.firefly/package.ff +2 -2
  221. package/webserver/WebServer.ff +647 -685
  222. package/websocket/.firefly/package.ff +1 -1
  223. package/websocket/WebSocket.ff +100 -131
  224. package/core/UnsafeJs.ff +0 -42
  225. 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
- var n = 0xefc8249d;
117
- function mash(data) {
118
- for(var i = 0; i < data.byteLength; i++) {
119
- n += data.getUint8(i);
120
- var h = 0.02519603282416938 * n;
121
- n = h >>> 0;
122
- h -= n;
123
- h *= n;
124
- n = h >>> 0;
125
- h -= n;
126
- n += h * 0x100000000; // 2^32
127
- }
128
- return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
129
- }
130
- var space = new DataView(new Uint8Array([32]).buffer);
131
- var r = {
132
- s0: mash(space),
133
- s1: mash(space),
134
- s2: mash(space),
135
- c: 1,
136
- spareGauss: NaN
137
- };
138
- r.s0 -= mash(buffer_);
139
- if(r.s0 < 0) r.s0 += 1;
140
- r.s1 -= mash(buffer_);
141
- if(r.s1 < 0) r.s1 += 1;
142
- r.s2 -= mash(buffer_);
143
- if(r.s2 < 0) r.s2 += 1;
144
- return r;
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
- throw new Error('Function newFromBuffer is missing on this target in async context.');
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
- return {...self_};
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
- var t = 2091639 * self_.s0 + self_.c * 2.3283064365386963e-10; // 2^-32
181
- self_.s0 = self_.s1;
182
- self_.s1 = self_.s2;
183
- var uniform = self_.s2 = t - (self_.c = t | 0);
184
- return from_ + uniform * (until_ - from_);
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
- if(!isNaN(self_.spareGauss)) {
202
- const result = self_.spareGauss * standardDeviation_ + mean_;
203
- self_.spareGauss = NaN;
204
- return result;
205
- } else {
206
- let u = 0.5, v = 0.5, s = 0.5;
207
- do {
208
- u = Random_nextFloat(self_, 0.0, 1.0) * 2 - 1;
209
- v = Random_nextFloat(self_, 0.0, 1.0) * 2 - 1;
210
- s = u * u + v * v;
211
- } while(s >= 1 || s == 0);
212
- s = Math.sqrt(-2.0 * Math.log(s) / s);
213
- self_.spareGauss = v * s;
214
- return mean_ + standardDeviation_ * u * s;
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.internalGrab_(array_, i_));
224
- ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_)));
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 for_i = 0, for_a = ff_core_Random.Random_shuffleList(self_, ff_core_Array.Array_toList(array_, 0, 9007199254740991)), for_l = Math.min(Math.max(count_, 0), for_a.length); for_i < for_l; for_i++) {
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 (array_.array[ff_core_Random.Random_nextInt(self_, 0, array_.array.length)] ?? ff_core_Array.internalGrab_(array_, ff_core_Random.Random_nextInt(self_, 0, array_.array.length)))
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
- throw new Error('Function Random_copy is missing on this target in async context.');
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
- throw new Error('Function Random_nextInt is missing on this target in async context.');
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
- throw new Error('Function Random_nextFloat is missing on this target in async context.');
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
- throw new Error('Function Random_nextGauss is missing on this target in async context.');
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.internalGrab_(array_, i_));
286
- ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_)));
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 for_i = 0, for_a = ff_core_Random.Random_shuffleList(self_, ff_core_Array.Array_toList(array_, 0, 9007199254740991)), for_l = Math.min(Math.max(count_, 0), for_a.length); for_i < for_l; for_i++) {
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 (array_.array[ff_core_Random.Random_nextInt(self_, 0, array_.array.length)] ?? ff_core_Array.internalGrab_(array_, ff_core_Random.Random_nextInt(self_, 0, array_.array.length)))
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) {