firefly-compiler 0.5.35 → 0.5.37

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
@@ -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,8 +94,6 @@ 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 Array
96
98
 
97
99
 
@@ -102,21 +104,15 @@ return {array: []}
102
104
  }
103
105
 
104
106
  export function fill_(size_, value_) {
105
-
106
- return {array: new Array(size_).fill(value_)};
107
-
107
+ return {array: ff_core_List.fill_(size_, value_)}
108
108
  }
109
109
 
110
110
  export function fillBy_(size_, body_) {
111
-
112
- return {array: Array.from({length: size_}, (_, i) => body_(i))};
113
-
111
+ return {array: ff_core_List.fillBy_(size_, body_)}
114
112
  }
115
113
 
116
114
  export function range_(size_) {
117
-
118
- return {array: Array.from({length: size_}, (_, i) => i)};
119
-
115
+ return {array: ff_core_List.range_(size_)}
120
116
  }
121
117
 
122
118
  export function sortRange_(array_, compare_, start_, end_) {
@@ -129,13 +125,13 @@ ff_core_Array.sortRange_(array_, compare_, middle_, end_);
129
125
  let i_ = start_;
130
126
  let j_ = middle_;
131
127
  while(((i_ < middle_) && (j_ < end_))) {
132
- if((compare_((array_.array[i_] ?? ff_core_Array.internalGrab_(array_, i_)), (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_))) !== ff_core_Ordering.OrderingAfter())) {
128
+ if((compare_((array_.array[i_] ?? ff_core_Array.Array_grab(array_, i_)), (array_.array[j_] ?? ff_core_Array.Array_grab(array_, j_))) !== ff_core_Ordering.OrderingAfter())) {
133
129
  i_ += 1
134
130
  } else {
135
- const value_ = (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_));
131
+ const value_ = (array_.array[j_] ?? ff_core_Array.Array_grab(array_, j_));
136
132
  let k_ = j_;
137
133
  while((k_ > i_)) {
138
- ff_core_Array.Array_set(array_, k_, (array_.array[(k_ - 1)] ?? ff_core_Array.internalGrab_(array_, (k_ - 1))));
134
+ ff_core_Array.Array_set(array_, k_, ff_core_Array.Array_grab(array_, (k_ - 1)));
139
135
  k_ -= 1
140
136
  };
141
137
  ff_core_Array.Array_set(array_, i_, value_);
@@ -147,26 +143,20 @@ j_ += 1
147
143
  }
148
144
  }
149
145
 
150
- export function internalGrab_(self_, index_) {
151
-
152
- return index_ < 0 || index_ >= self_.array.length ? ff_core_Try.internalThrowGrabException_() : self_.array[index_];
153
-
154
- }
155
-
156
146
  export async function new_$($task) {
157
- throw new Error('Function new is missing on this target in async context.');
147
+ return {array: []}
158
148
  }
159
149
 
160
150
  export async function fill_$(size_, value_, $task) {
161
- throw new Error('Function fill is missing on this target in async context.');
151
+ return {array: ff_core_List.fill_(size_, value_)}
162
152
  }
163
153
 
164
154
  export async function fillBy_$(size_, body_, $task) {
165
- throw new Error('Function fillBy is missing on this target in async context.');
155
+ return {array: (await ff_core_List.fillBy_$(size_, body_, $task))}
166
156
  }
167
157
 
168
158
  export async function range_$(size_, $task) {
169
- throw new Error('Function range is missing on this target in async context.');
159
+ return {array: ff_core_List.range_(size_)}
170
160
  }
171
161
 
172
162
  export async function sortRange_$(array_, compare_, start_, end_, $task) {
@@ -179,13 +169,13 @@ let middle_ = (start_ + ff_core_Int.Int_div((end_ - start_), 2));
179
169
  let i_ = start_;
180
170
  let j_ = middle_;
181
171
  while(((i_ < middle_) && (j_ < end_))) {
182
- if(((await compare_((array_.array[i_] ?? ff_core_Array.internalGrab_(array_, i_)), (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_)), $task)) !== ff_core_Ordering.OrderingAfter())) {
172
+ if(((await compare_((array_.array[i_] ?? ff_core_Array.Array_grab(array_, i_)), (array_.array[j_] ?? ff_core_Array.Array_grab(array_, j_)), $task)) !== ff_core_Ordering.OrderingAfter())) {
183
173
  i_ += 1
184
174
  } else {
185
- const value_ = (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_));
175
+ const value_ = (array_.array[j_] ?? ff_core_Array.Array_grab(array_, j_));
186
176
  let k_ = j_;
187
177
  while((k_ > i_)) {
188
- ff_core_Array.Array_set(array_, k_, (array_.array[(k_ - 1)] ?? ff_core_Array.internalGrab_(array_, (k_ - 1))));
178
+ ff_core_Array.Array_set(array_, k_, ff_core_Array.Array_grab(array_, (k_ - 1)));
189
179
  k_ -= 1
190
180
  };
191
181
  ff_core_Array.Array_set(array_, i_, value_);
@@ -197,12 +187,8 @@ j_ += 1
197
187
  }
198
188
  }
199
189
 
200
- export async function internalGrab_$(self_, index_, $task) {
201
- throw new Error('Function internalGrab is missing on this target in async context.');
202
- }
203
-
204
190
  export function Array_isEmpty(self_) {
205
- return self_.array.length === 0
191
+ return (self_.array.length === 0)
206
192
  }
207
193
 
208
194
  export function Array_size(self_) {
@@ -210,41 +196,34 @@ return self_.array.length
210
196
  }
211
197
 
212
198
  export function Array_get(self_, index_) {
213
-
214
- return index_ >= 0 && index_ < self_.array.length
215
- ? ff_core_Option.Some(self_.array[index_])
216
- : ff_core_Option.None()
217
-
199
+ if(((index_ >= 0) && (index_ < self_.array.length))) {
200
+ return ff_core_Option.Some(self_.array[index_])
201
+ } else {
202
+ return ff_core_Option.None()
203
+ }
218
204
  }
219
205
 
220
206
  export function Array_grab(self_, index_) {
221
-
222
- return self_.array[index_] ?? internalGrab_(self_, index_);
223
-
207
+ if(((index_ < 0) || (index_ >= self_.array.length))) {
208
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
209
+ };
210
+ return self_.array[index_]
224
211
  }
225
212
 
226
- export function Array_grabFirst(self_) {
227
- return (self_.array[0] ?? ff_core_Array.internalGrab_(self_, 0))
213
+ export function Array_first(self_) {
214
+ return ff_core_Array.Array_get(self_, 0)
228
215
  }
229
216
 
230
- export function Array_grabLast(self_) {
231
- return (self_.array[(self_.array.length - 1)] ?? ff_core_Array.internalGrab_(self_, (self_.array.length - 1)))
217
+ export function Array_last(self_) {
218
+ return ff_core_Array.Array_get(self_, (self_.array.length - 1))
232
219
  }
233
220
 
234
- export function Array_first(self_) {
235
-
236
- return self_.array.length > 0
237
- ? ff_core_Option.Some(self_.array[0])
238
- : ff_core_Option.None()
239
-
221
+ export function Array_grabFirst(self_) {
222
+ return (self_.array[0] ?? ff_core_Array.Array_grab(self_, 0))
240
223
  }
241
224
 
242
- export function Array_last(self_) {
243
-
244
- return self_.array.length > 0
245
- ? ff_core_Option.Some(self_.array[self_.array.length - 1])
246
- : ff_core_Option.None()
247
-
225
+ export function Array_grabLast(self_) {
226
+ return ff_core_Array.Array_grab(self_, (self_.array.length - 1))
248
227
  }
249
228
 
250
229
  export function Array_push(self_, value_) {
@@ -252,131 +231,168 @@ self_.array.push(value_)
252
231
  }
253
232
 
254
233
  export function Array_pushArray(self_, value_) {
255
- self_.array.push(...value_.array)
234
+ ff_core_Array.Array_pushList(self_, value_.array)
256
235
  }
257
236
 
258
- export function Array_pushList(self_, value_) {
259
- self_.array.push(...value_)
237
+ export function Array_pushList(self_, list_) {
238
+ const originalLength_ = self_.array.length;
239
+ self_.array.length += list_.length;
240
+ for(let for_i = 0, for_e = list_.length; for_i < for_e; for_i++) {
241
+ const i_ = for_i;
242
+ self_.array[(originalLength_ + i_)] = list_[i_]
243
+ }
260
244
  }
261
245
 
262
246
  export function Array_pop(self_) {
263
-
264
- return self_.array.length > 0
265
- ? ff_core_Option.Some(self_.array.pop())
266
- : ff_core_Option.None()
267
-
247
+ if((self_.array.length > 0)) {
248
+ return ff_core_Option.Some(self_.array.pop())
249
+ } else return ff_core_Option.None()
268
250
  }
269
251
 
270
252
  export function Array_set(self_, index_, value_) {
271
-
272
- if(index_ < 0 || index_ > self_.array.length) {
273
- ff_core_Try.internalThrowGrabException_()
274
- }
275
- self_.array[index_] = value_
276
-
253
+ if(((index_ < 0) || (index_ >= self_.array.length))) {
254
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
255
+ };
256
+ self_.array[index_] = value_
277
257
  }
278
258
 
279
259
  export function Array_modify(self_, index_, body_) {
280
-
281
- if(index_ < 0 || index_ >= self_.array.length) {
282
- ff_core_Try.internalThrowGrabException_()
283
- }
284
- self_.array[index_] = body_(self_.array[index_])
285
-
260
+ if(((index_ < 0) || (index_ >= self_.array.length))) {
261
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
262
+ };
263
+ self_.array[index_] = body_(self_.array[index_])
286
264
  }
287
265
 
288
266
  export function Array_fill(self_, value_, start_ = 0, end_ = 9007199254740991) {
289
-
290
- self_.array.fill(value_, start_, end_);
291
-
267
+ self_.array.fill(value_, start_, end_)
292
268
  }
293
269
 
294
270
  export function Array_copy(self_, target_, start_, end_) {
295
-
296
- self_.array.copyWithin(target_, start_, end_);
297
-
271
+ self_.array.copyWithin(target_, start_, end_)
298
272
  }
299
273
 
300
274
  export function Array_delete(self_, start_, deleteCount_) {
301
-
302
- self_.array.splice(start_, deleteCount_);
303
-
275
+ self_.array.splice(start_, deleteCount_)
304
276
  }
305
277
 
306
278
  export function Array_insert(self_, start_, value_, deleteCount_ = 0) {
307
-
308
- self_.array.splice(start_, deleteCount_, value_);
309
-
279
+ self_.array.splice(start_, deleteCount_, value_)
310
280
  }
311
281
 
312
- export function Array_insertArray(self_, start_, value_, deleteCount_ = 0) {
313
-
314
- self_.array.splice(start_, deleteCount_, ...value_.array);
315
-
282
+ export function Array_insertArray(self_, start_, array_, deleteCount_ = 0) {
283
+ ff_core_Array.Array_insertList(self_, start_, array_.array, deleteCount_)
316
284
  }
317
285
 
318
- export function Array_insertList(self_, start_, value_, deleteCount_ = 0) {
319
-
320
- self_.array.splice(start_, deleteCount_, ...value_);
321
-
286
+ export function Array_insertList(self_, start_, list_, deleteCount_ = 0) {
287
+ if(((start_ < 0) || (start_ > self_.array.length))) {
288
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
289
+ };
290
+ const deleteEnd_ = (start_ + deleteCount_);
291
+ if(((deleteEnd_ < 0) || (deleteEnd_ > self_.array.length))) {
292
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
293
+ };
294
+ const insertCount_ = list_.length;
295
+ const delta_ = (insertCount_ - deleteCount_);
296
+ if((delta_ > 0)) {
297
+ self_.array.length += delta_;
298
+ self_.array.copyWithin((start_ + insertCount_), deleteEnd_)
299
+ } else if((delta_ < 0)) {
300
+ self_.array.copyWithin((start_ + insertCount_), deleteEnd_);
301
+ self_.array.length += delta_
302
+ } else {};
303
+ for(let for_i = 0, for_e = insertCount_; for_i < for_e; for_i++) {
304
+ const i_ = for_i;
305
+ self_.array[(start_ + i_)] = list_[i_]
306
+ }
307
+ }
308
+
309
+ export function Array_mapInPlace(self_, body_) {
310
+ let i_ = 0;
311
+ while((i_ < self_.array.length)) {
312
+ self_.array[i_] = body_(self_.array[i_]);
313
+ i_ += 1
314
+ }
322
315
  }
323
316
 
324
317
  export function Array_each(self_, body_) {
325
-
326
- return self_.array.forEach(body_);
327
-
318
+ let i_ = 0;
319
+ while((i_ < self_.array.length)) {
320
+ body_(self_.array[i_]);
321
+ i_ += 1
322
+ }
323
+ }
324
+
325
+ export function Array_eachWithIndex(self_, body_) {
326
+ let i_ = 0;
327
+ while((i_ < self_.array.length)) {
328
+ body_(i_, self_.array[i_]);
329
+ i_ += 1
330
+ }
328
331
  }
329
332
 
330
333
  export function Array_eachWhile(self_, body_) {
331
- for(const value of self_.array) if(!body_(value)) break
334
+ let i_ = 0;
335
+ while((i_ < self_.array.length)) {
336
+ if(body_(self_.array[i_])) {
337
+ i_ += 1
338
+ } else {
339
+ i_ = self_.array.length
340
+ }
341
+ }
332
342
  }
333
343
 
334
344
  export function Array_all(self_, body_) {
335
345
  let result_ = true;
336
- ff_core_Array.Array_eachWhile(self_, ((x_) => {
346
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
347
+ const x_ = for_a[for_i];
337
348
  result_ = body_(x_);
338
- return result_
339
- }));
349
+ if(!result_) break
350
+ };
340
351
  return result_
341
352
  }
342
353
 
343
354
  export function Array_any(self_, body_) {
344
355
  let result_ = false;
345
- ff_core_Array.Array_eachWhile(self_, ((x_) => {
356
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
357
+ const x_ = for_a[for_i];
346
358
  result_ = body_(x_);
347
- return (!result_)
348
- }));
359
+ if(!(!result_)) break
360
+ };
349
361
  return result_
350
362
  }
351
363
 
352
364
  export function Array_find(self_, body_) {
353
365
  let result_ = ff_core_Option.None();
354
- ff_core_Array.Array_eachWhile(self_, ((x_) => {
366
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
367
+ const x_ = for_a[for_i];
355
368
  if(body_(x_)) {
356
369
  result_ = ff_core_Option.Some(x_);
357
- return false
370
+ if(!false) break
358
371
  } else {
359
- return true
372
+ if(!true) break
360
373
  }
361
- }));
374
+ };
362
375
  return result_
363
376
  }
364
377
 
365
378
  export function Array_indexWhere(self_, body_) {
366
379
  let i_ = (-1);
367
380
  let result_ = false;
368
- ff_core_Array.Array_eachWhile(self_, ((x_) => {
381
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
382
+ const x_ = for_a[for_i];
369
383
  i_ += 1;
370
384
  result_ = body_(x_);
371
- return (!result_)
372
- }));
385
+ if(!(!result_)) break
386
+ };
373
387
  if(result_) {
374
388
  return ff_core_Option.Some(i_)
375
389
  } else return ff_core_Option.None()
376
390
  }
377
391
 
378
392
  export function Array_drain(self_) {
379
- const result = self_.array; self_.array = []; return result
393
+ const result_ = self_.array;
394
+ self_.array = [];
395
+ return result_
380
396
  }
381
397
 
382
398
  export function Array_toList(self_, start_ = 0, end_ = 9007199254740991) {
@@ -398,156 +414,225 @@ return ff_core_Ordering_Order$S.compare_(body_(_w1), body_(_w2))
398
414
  }
399
415
 
400
416
  export function Array_sortWith(self_, ordering_) {
401
- self_.array.sort((x, y) => ff_core_Ordering.Ordering_toInt(ordering_(x, y)))
417
+ if(false) {
418
+ ff_core_Array.sortRange_(self_, ordering_, 0, self_.array.length)
419
+ } else {
420
+ self_.array.sort(((x_, y_) => {
421
+ return ff_core_Ordering.Ordering_toInt(ordering_(x_, y_))
422
+ }))
423
+ }
402
424
  }
403
425
 
404
426
  export async function Array_isEmpty$(self_, $task) {
405
- throw new Error('Function Array_isEmpty is missing on this target in async context.');
427
+ return (self_.array.length === 0)
406
428
  }
407
429
 
408
430
  export async function Array_size$(self_, $task) {
409
- throw new Error('Function Array_size is missing on this target in async context.');
431
+ return self_.array.length
410
432
  }
411
433
 
412
434
  export async function Array_get$(self_, index_, $task) {
413
- throw new Error('Function Array_get is missing on this target in async context.');
435
+ if(((index_ >= 0) && (index_ < self_.array.length))) {
436
+ return ff_core_Option.Some(self_.array[index_])
437
+ } else {
438
+ return ff_core_Option.None()
439
+ }
414
440
  }
415
441
 
416
442
  export async function Array_grab$(self_, index_, $task) {
417
- throw new Error('Function Array_grab is missing on this target in async context.');
443
+ if(((index_ < 0) || (index_ >= self_.array.length))) {
444
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
445
+ };
446
+ return self_.array[index_]
418
447
  }
419
448
 
420
- export async function Array_grabFirst$(self_, $task) {
421
- return (self_.array[0] ?? ff_core_Array.internalGrab_(self_, 0))
449
+ export async function Array_first$(self_, $task) {
450
+ return ff_core_Array.Array_get(self_, 0)
422
451
  }
423
452
 
424
- export async function Array_grabLast$(self_, $task) {
425
- return (self_.array[(self_.array.length - 1)] ?? ff_core_Array.internalGrab_(self_, (self_.array.length - 1)))
453
+ export async function Array_last$(self_, $task) {
454
+ return ff_core_Array.Array_get(self_, (self_.array.length - 1))
426
455
  }
427
456
 
428
- export async function Array_first$(self_, $task) {
429
- throw new Error('Function Array_first is missing on this target in async context.');
457
+ export async function Array_grabFirst$(self_, $task) {
458
+ return (self_.array[0] ?? ff_core_Array.Array_grab(self_, 0))
430
459
  }
431
460
 
432
- export async function Array_last$(self_, $task) {
433
- throw new Error('Function Array_last is missing on this target in async context.');
461
+ export async function Array_grabLast$(self_, $task) {
462
+ return ff_core_Array.Array_grab(self_, (self_.array.length - 1))
434
463
  }
435
464
 
436
465
  export async function Array_push$(self_, value_, $task) {
437
- throw new Error('Function Array_push is missing on this target in async context.');
466
+ self_.array.push(value_)
438
467
  }
439
468
 
440
469
  export async function Array_pushArray$(self_, value_, $task) {
441
- throw new Error('Function Array_pushArray is missing on this target in async context.');
470
+ ff_core_Array.Array_pushList(self_, value_.array)
442
471
  }
443
472
 
444
- export async function Array_pushList$(self_, value_, $task) {
445
- throw new Error('Function Array_pushList is missing on this target in async context.');
473
+ export async function Array_pushList$(self_, list_, $task) {
474
+ const originalLength_ = self_.array.length;
475
+ self_.array.length += list_.length;
476
+ for(let for_i = 0, for_e = list_.length; for_i < for_e; for_i++) {
477
+ const i_ = for_i;
478
+ self_.array[(originalLength_ + i_)] = list_[i_]
479
+ }
446
480
  }
447
481
 
448
482
  export async function Array_pop$(self_, $task) {
449
- throw new Error('Function Array_pop is missing on this target in async context.');
483
+ if((self_.array.length > 0)) {
484
+ return ff_core_Option.Some(self_.array.pop())
485
+ } else return ff_core_Option.None()
450
486
  }
451
487
 
452
488
  export async function Array_set$(self_, index_, value_, $task) {
453
- throw new Error('Function Array_set is missing on this target in async context.');
489
+ if(((index_ < 0) || (index_ >= self_.array.length))) {
490
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
491
+ };
492
+ self_.array[index_] = value_
454
493
  }
455
494
 
456
495
  export async function Array_modify$(self_, index_, body_, $task) {
457
-
458
- if(index_ < 0 || index_ >= self_.array.length) {
459
- ff_core_Try.internalThrowGrabException_()
460
- }
461
- self_.array[index_] = await body_(self_.array[index_], $task)
462
-
496
+ if(((index_ < 0) || (index_ >= self_.array.length))) {
497
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
498
+ };
499
+ self_.array[index_] = (await body_(self_.array[index_], $task))
463
500
  }
464
501
 
465
502
  export async function Array_fill$(self_, value_, start_ = 0, end_ = 9007199254740991, $task) {
466
- throw new Error('Function Array_fill is missing on this target in async context.');
503
+ self_.array.fill(value_, start_, end_)
467
504
  }
468
505
 
469
506
  export async function Array_copy$(self_, target_, start_, end_, $task) {
470
- throw new Error('Function Array_copy is missing on this target in async context.');
507
+ self_.array.copyWithin(target_, start_, end_)
471
508
  }
472
509
 
473
510
  export async function Array_delete$(self_, start_, deleteCount_, $task) {
474
- throw new Error('Function Array_delete is missing on this target in async context.');
511
+ self_.array.splice(start_, deleteCount_)
475
512
  }
476
513
 
477
514
  export async function Array_insert$(self_, start_, value_, deleteCount_ = 0, $task) {
478
- throw new Error('Function Array_insert is missing on this target in async context.');
515
+ self_.array.splice(start_, deleteCount_, value_)
479
516
  }
480
517
 
481
- export async function Array_insertArray$(self_, start_, value_, deleteCount_ = 0, $task) {
482
- throw new Error('Function Array_insertArray is missing on this target in async context.');
518
+ export async function Array_insertArray$(self_, start_, array_, deleteCount_ = 0, $task) {
519
+ ff_core_Array.Array_insertList(self_, start_, array_.array, deleteCount_)
483
520
  }
484
521
 
485
- export async function Array_insertList$(self_, start_, value_, deleteCount_ = 0, $task) {
486
- throw new Error('Function Array_insertList is missing on this target in async context.');
522
+ export async function Array_insertList$(self_, start_, list_, deleteCount_ = 0, $task) {
523
+ if(((start_ < 0) || (start_ > self_.array.length))) {
524
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
525
+ };
526
+ const deleteEnd_ = (start_ + deleteCount_);
527
+ if(((deleteEnd_ < 0) || (deleteEnd_ > self_.array.length))) {
528
+ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
529
+ };
530
+ const insertCount_ = list_.length;
531
+ const delta_ = (insertCount_ - deleteCount_);
532
+ if((delta_ > 0)) {
533
+ self_.array.length += delta_;
534
+ self_.array.copyWithin((start_ + insertCount_), deleteEnd_)
535
+ } else if((delta_ < 0)) {
536
+ self_.array.copyWithin((start_ + insertCount_), deleteEnd_);
537
+ self_.array.length += delta_
538
+ } else {};
539
+ for(let for_i = 0, for_e = insertCount_; for_i < for_e; for_i++) {
540
+ const i_ = for_i;
541
+ self_.array[(start_ + i_)] = list_[i_]
542
+ }
543
+ }
544
+
545
+ export async function Array_mapInPlace$(self_, body_, $task) {
546
+ let i_ = 0;
547
+ while((i_ < self_.array.length)) {
548
+ self_.array[i_] = (await body_(self_.array[i_], $task));
549
+ i_ += 1
550
+ }
487
551
  }
488
552
 
489
553
  export async function Array_each$(self_, body_, $task) {
490
-
491
- for(let i = 0; i < self_.array.length; i++) {
492
- await body_(self_.array[i], $task)
493
- }
494
-
554
+ let i_ = 0;
555
+ while((i_ < self_.array.length)) {
556
+ (await body_(self_.array[i_], $task));
557
+ i_ += 1
558
+ }
559
+ }
560
+
561
+ export async function Array_eachWithIndex$(self_, body_, $task) {
562
+ let i_ = 0;
563
+ while((i_ < self_.array.length)) {
564
+ (await body_(i_, self_.array[i_], $task));
565
+ i_ += 1
566
+ }
495
567
  }
496
568
 
497
569
  export async function Array_eachWhile$(self_, body_, $task) {
498
- for(const value of self_.array) if(!await body_(value, $task)) break
570
+ let i_ = 0;
571
+ while((i_ < self_.array.length)) {
572
+ if((await body_(self_.array[i_], $task))) {
573
+ i_ += 1
574
+ } else {
575
+ i_ = self_.array.length
576
+ }
577
+ }
499
578
  }
500
579
 
501
580
  export async function Array_all$(self_, body_, $task) {
502
581
  let result_ = true;
503
- (await ff_core_Array.Array_eachWhile$(self_, (async (x_, $task) => {
582
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
583
+ const x_ = for_a[for_i];
504
584
  result_ = (await body_(x_, $task));
505
- return result_
506
- }), $task));
585
+ if(!result_) break
586
+ };
507
587
  return result_
508
588
  }
509
589
 
510
590
  export async function Array_any$(self_, body_, $task) {
511
591
  let result_ = false;
512
- (await ff_core_Array.Array_eachWhile$(self_, (async (x_, $task) => {
592
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
593
+ const x_ = for_a[for_i];
513
594
  result_ = (await body_(x_, $task));
514
- return (!result_)
515
- }), $task));
595
+ if(!(!result_)) break
596
+ };
516
597
  return result_
517
598
  }
518
599
 
519
600
  export async function Array_find$(self_, body_, $task) {
520
601
  let result_ = ff_core_Option.None();
521
- (await ff_core_Array.Array_eachWhile$(self_, (async (x_, $task) => {
602
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
603
+ const x_ = for_a[for_i];
522
604
  if((await body_(x_, $task))) {
523
605
  result_ = ff_core_Option.Some(x_);
524
- return false
606
+ if(!false) break
525
607
  } else {
526
- return true
608
+ if(!true) break
527
609
  }
528
- }), $task));
610
+ };
529
611
  return result_
530
612
  }
531
613
 
532
614
  export async function Array_indexWhere$(self_, body_, $task) {
533
615
  let i_ = (-1);
534
616
  let result_ = false;
535
- (await ff_core_Array.Array_eachWhile$(self_, (async (x_, $task) => {
617
+ for(let for_a = self_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
618
+ const x_ = for_a[for_i];
536
619
  i_ += 1;
537
620
  result_ = (await body_(x_, $task));
538
- return (!result_)
539
- }), $task));
621
+ if(!(!result_)) break
622
+ };
540
623
  if(result_) {
541
624
  return ff_core_Option.Some(i_)
542
625
  } else return ff_core_Option.None()
543
626
  }
544
627
 
545
628
  export async function Array_drain$(self_, $task) {
546
- throw new Error('Function Array_drain is missing on this target in async context.');
629
+ const result_ = self_.array;
630
+ self_.array = [];
631
+ return result_
547
632
  }
548
633
 
549
634
  export async function Array_toList$(self_, start_ = 0, end_ = 9007199254740991, $task) {
550
- throw new Error('Function Array_toList is missing on this target in async context.');
635
+ return self_.array.slice(start_, end_)
551
636
  }
552
637
 
553
638
  export async function Array_toStream$(self_, start_ = 0, end_ = 9007199254740991, $task) {
@@ -555,7 +640,7 @@ return (await ff_core_List.List_toStream$(ff_core_Array.Array_toList(self_, star
555
640
  }
556
641
 
557
642
  export async function Array_reverse$(self_, $task) {
558
- throw new Error('Function Array_reverse is missing on this target in async context.');
643
+ self_.array.reverse()
559
644
  }
560
645
 
561
646
  export async function Array_sortBy$(self_, body_, ff_core_Ordering_Order$S, $task) {
@@ -565,7 +650,13 @@ return ff_core_Ordering_Order$S.compare_((await body_(_w1, $task)), (await body_
565
650
  }
566
651
 
567
652
  export async function Array_sortWith$(self_, ordering_, $task) {
568
- throw new Error('Function Array_sortWith is missing on this target in async context.');
653
+ if(true) {
654
+ (await ff_core_Array.sortRange_$(self_, ordering_, 0, self_.array.length, $task))
655
+ } else {
656
+ self_.array.sort((async (a_1, a_2) => await (async (x_, y_, $task) => {
657
+ return ff_core_Ordering.Ordering_toInt((await ordering_(x_, y_, $task)))
658
+ })(a_1, a_2, $task)))
659
+ }
569
660
  }
570
661
 
571
662
  export function Array_sort(self_, ff_core_Ordering_Order$T) {
@@ -585,31 +676,33 @@ return self_.array.join(separator_)
585
676
  }
586
677
 
587
678
  export async function Array_join$(self_, separator_ = "", $task) {
588
- throw new Error('Function Array_join is missing on this target in async context.');
679
+ return self_.array.join(separator_)
589
680
  }
590
681
 
591
682
  export function ff_core_Show_Show$ff_core_Array_Array(ff_core_Show_Show$T) { return {
592
683
  show_(value_) {
593
684
  const array_ = ff_core_Array.new_();
594
685
  array_.array.push("[");
595
- ff_core_Array.Array_each(value_, ((x_) => {
686
+ for(let for_a = value_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
687
+ const x_ = for_a[for_i];
596
688
  if((array_.array.length > 1)) {
597
689
  array_.array.push(", ")
598
690
  };
599
691
  array_.array.push(ff_core_Show_Show$T.show_(x_))
600
- }));
692
+ };
601
693
  array_.array.push("].toArray()");
602
694
  return ff_core_Array.Array_join(array_, "")
603
695
  },
604
696
  async show_$(value_, $task) {
605
697
  const array_ = ff_core_Array.new_();
606
698
  array_.array.push("[");
607
- ff_core_Array.Array_each(value_, ((x_) => {
699
+ for(let for_a = value_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
700
+ const x_ = for_a[for_i];
608
701
  if((array_.array.length > 1)) {
609
702
  array_.array.push(", ")
610
703
  };
611
704
  array_.array.push(ff_core_Show_Show$T.show_(x_))
612
- }));
705
+ };
613
706
  array_.array.push("].toArray()");
614
707
  return ff_core_Array.Array_join(array_, "")
615
708
  }