firefly-compiler 0.4.20 → 0.4.21

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 (62) hide show
  1. package/compiler/Builder.ff +23 -13
  2. package/compiler/JsEmitter.ff +120 -76
  3. package/compiler/LspHook.ff +4 -2
  4. package/compiler/Main.ff +13 -7
  5. package/compiler/Resolver.ff +15 -15
  6. package/compiler/Syntax.ff +1 -0
  7. package/core/Array.ff +6 -4
  8. package/core/Int.ff +12 -12
  9. package/core/List.ff +6 -4
  10. package/experimental/benchmarks/ListGrab.ff +23 -0
  11. package/experimental/benchmarks/ListGrab.java +55 -0
  12. package/experimental/benchmarks/Pyrotek45.ff +30 -0
  13. package/experimental/benchmarks/Pyrotek45.java +64 -0
  14. package/experimental/tests/TestJson.ff +26 -0
  15. package/lsp/Handler.ff +55 -59
  16. package/lsp/SignatureHelpHandler.ff +5 -4
  17. package/lsp/TestReferences.ff +15 -0
  18. package/lsp/TestReferencesCase.ff +8 -0
  19. package/output/js/ff/compiler/Builder.mjs +50 -44
  20. package/output/js/ff/compiler/Dependencies.mjs +0 -2
  21. package/output/js/ff/compiler/Deriver.mjs +16 -140
  22. package/output/js/ff/compiler/Dictionaries.mjs +8 -222
  23. package/output/js/ff/compiler/Environment.mjs +12 -154
  24. package/output/js/ff/compiler/Inference.mjs +127 -1013
  25. package/output/js/ff/compiler/JsEmitter.mjs +434 -2344
  26. package/output/js/ff/compiler/JsImporter.mjs +0 -12
  27. package/output/js/ff/compiler/LspHook.mjs +20 -446
  28. package/output/js/ff/compiler/Main.mjs +96 -550
  29. package/output/js/ff/compiler/Parser.mjs +36 -356
  30. package/output/js/ff/compiler/Patterns.mjs +20 -200
  31. package/output/js/ff/compiler/Resolver.mjs +26 -340
  32. package/output/js/ff/compiler/Substitution.mjs +2 -160
  33. package/output/js/ff/compiler/Syntax.mjs +449 -3293
  34. package/output/js/ff/compiler/Token.mjs +9 -1095
  35. package/output/js/ff/compiler/Tokenizer.mjs +4 -2
  36. package/output/js/ff/compiler/Unification.mjs +26 -360
  37. package/output/js/ff/compiler/Wildcards.mjs +0 -86
  38. package/output/js/ff/compiler/Workspace.mjs +8 -96
  39. package/output/js/ff/core/Array.mjs +15 -8
  40. package/output/js/ff/core/AssetSystem.mjs +4 -14
  41. package/output/js/ff/core/Bool.mjs +0 -12
  42. package/output/js/ff/core/Core.mjs +0 -30
  43. package/output/js/ff/core/Int.mjs +24 -24
  44. package/output/js/ff/core/IntMap.mjs +0 -8
  45. package/output/js/ff/core/Json.mjs +0 -40
  46. package/output/js/ff/core/List.mjs +23 -32
  47. package/output/js/ff/core/Lock.mjs +0 -10
  48. package/output/js/ff/core/Map.mjs +0 -24
  49. package/output/js/ff/core/Option.mjs +10 -286
  50. package/output/js/ff/core/Ordering.mjs +16 -158
  51. package/output/js/ff/core/Pair.mjs +2 -34
  52. package/output/js/ff/core/Path.mjs +2 -28
  53. package/output/js/ff/core/Random.mjs +4 -4
  54. package/output/js/ff/core/RbMap.mjs +56 -644
  55. package/output/js/ff/core/Show.mjs +0 -16
  56. package/output/js/ff/core/Stream.mjs +14 -144
  57. package/output/js/ff/core/StringMap.mjs +0 -8
  58. package/output/js/ff/core/Try.mjs +4 -108
  59. package/output/js/ff/core/Unit.mjs +2 -16
  60. package/package.json +1 -1
  61. package/postgresql/Pg.ff +23 -23
  62. package/vscode/package.json +1 -1
@@ -126,23 +126,14 @@ export function reverse_(compare_) {
126
126
  return ((x_, y_) => {
127
127
  {
128
128
  const _1 = compare_(x_, y_);
129
- {
130
129
  if(_1.OrderingBefore) {
131
130
  return ff_core_Ordering.OrderingAfter()
132
- return
133
- }
134
131
  }
135
- {
136
132
  if(_1.OrderingSame) {
137
133
  return ff_core_Ordering.OrderingSame()
138
- return
139
134
  }
140
- }
141
- {
142
135
  if(_1.OrderingAfter) {
143
136
  return ff_core_Ordering.OrderingBefore()
144
- return
145
- }
146
137
  }
147
138
  }
148
139
  })
@@ -152,16 +143,12 @@ export function pair_(compareFirst_, compareSecond_) {
152
143
  return ((x_, y_) => {
153
144
  {
154
145
  const _1 = compareFirst_(x_.first_, y_.first_);
155
- {
156
146
  if(_1.OrderingSame) {
157
147
  return compareSecond_(x_.second_, y_.second_)
158
- return
159
- }
160
148
  }
161
149
  {
162
150
  const ordering_ = _1;
163
151
  return ordering_
164
- return
165
152
  }
166
153
  }
167
154
  })
@@ -192,24 +179,19 @@ return ((_1, _2) => {
192
179
  {
193
180
  const x_ = _1;
194
181
  const y_ = _2;
195
- const _guard1 = lessThan_(x_, y_);
196
- if(_guard1) {
182
+ if(lessThan_(x_, y_)) {
197
183
  return ff_core_Ordering.OrderingBefore()
198
- return
199
184
  }
200
185
  }
201
186
  {
202
187
  const x_ = _1;
203
188
  const y_ = _2;
204
- const _guard1 = lessThan_(y_, x_);
205
- if(_guard1) {
189
+ if(lessThan_(y_, x_)) {
206
190
  return ff_core_Ordering.OrderingAfter()
207
- return
208
191
  }
209
192
  }
210
193
  {
211
194
  return ff_core_Ordering.OrderingSame()
212
- return
213
195
  }
214
196
  })
215
197
  }
@@ -234,23 +216,14 @@ export async function reverse_$(compare_, $task) {
234
216
  return (async (x_, y_, $task) => {
235
217
  {
236
218
  const _1 = (await compare_(x_, y_, $task));
237
- {
238
219
  if(_1.OrderingBefore) {
239
220
  return ff_core_Ordering.OrderingAfter()
240
- return
241
221
  }
242
- }
243
- {
244
222
  if(_1.OrderingSame) {
245
223
  return ff_core_Ordering.OrderingSame()
246
- return
247
224
  }
248
- }
249
- {
250
225
  if(_1.OrderingAfter) {
251
226
  return ff_core_Ordering.OrderingBefore()
252
- return
253
- }
254
227
  }
255
228
  }
256
229
  })
@@ -260,16 +233,12 @@ export async function pair_$(compareFirst_, compareSecond_, $task) {
260
233
  return (async (x_, y_, $task) => {
261
234
  {
262
235
  const _1 = (await compareFirst_(x_.first_, y_.first_, $task));
263
- {
264
236
  if(_1.OrderingSame) {
265
237
  return (await compareSecond_(x_.second_, y_.second_, $task))
266
- return
267
- }
268
238
  }
269
239
  {
270
240
  const ordering_ = _1;
271
241
  return ordering_
272
- return
273
242
  }
274
243
  }
275
244
  })
@@ -300,24 +269,19 @@ return (async (_1, _2, $task) => {
300
269
  {
301
270
  const x_ = _1;
302
271
  const y_ = _2;
303
- const _guard1 = (await lessThan_(x_, y_, $task));
304
- if(_guard1) {
272
+ if((await lessThan_(x_, y_, $task))) {
305
273
  return ff_core_Ordering.OrderingBefore()
306
- return
307
274
  }
308
275
  }
309
276
  {
310
277
  const x_ = _1;
311
278
  const y_ = _2;
312
- const _guard1 = (await lessThan_(y_, x_, $task));
313
- if(_guard1) {
279
+ if((await lessThan_(y_, x_, $task))) {
314
280
  return ff_core_Ordering.OrderingAfter()
315
- return
316
281
  }
317
282
  }
318
283
  {
319
284
  return ff_core_Ordering.OrderingSame()
320
- return
321
285
  }
322
286
  })
323
287
  }
@@ -325,23 +289,14 @@ return
325
289
  export function Ordering_toInt(self_) {
326
290
  {
327
291
  const _1 = self_;
328
- {
329
292
  if(_1.OrderingBefore) {
330
293
  return (-1)
331
- return
332
- }
333
294
  }
334
- {
335
295
  if(_1.OrderingSame) {
336
296
  return 0
337
- return
338
297
  }
339
- }
340
- {
341
298
  if(_1.OrderingAfter) {
342
299
  return 1
343
- return
344
- }
345
300
  }
346
301
  }
347
302
  }
@@ -349,23 +304,14 @@ return
349
304
  export function Ordering_reverse(self_) {
350
305
  {
351
306
  const _1 = self_;
352
- {
353
307
  if(_1.OrderingBefore) {
354
308
  return ff_core_Ordering.OrderingAfter()
355
- return
356
- }
357
309
  }
358
- {
359
310
  if(_1.OrderingSame) {
360
311
  return ff_core_Ordering.OrderingSame()
361
- return
362
- }
363
312
  }
364
- {
365
313
  if(_1.OrderingAfter) {
366
314
  return ff_core_Ordering.OrderingBefore()
367
- return
368
- }
369
315
  }
370
316
  }
371
317
  }
@@ -373,23 +319,14 @@ return
373
319
  export async function Ordering_toInt$(self_, $task) {
374
320
  {
375
321
  const _1 = self_;
376
- {
377
322
  if(_1.OrderingBefore) {
378
323
  return (-1)
379
- return
380
324
  }
381
- }
382
- {
383
325
  if(_1.OrderingSame) {
384
326
  return 0
385
- return
386
327
  }
387
- }
388
- {
389
328
  if(_1.OrderingAfter) {
390
329
  return 1
391
- return
392
- }
393
330
  }
394
331
  }
395
332
  }
@@ -397,23 +334,14 @@ return
397
334
  export async function Ordering_reverse$(self_, $task) {
398
335
  {
399
336
  const _1 = self_;
400
- {
401
337
  if(_1.OrderingBefore) {
402
338
  return ff_core_Ordering.OrderingAfter()
403
- return
404
- }
405
339
  }
406
- {
407
340
  if(_1.OrderingSame) {
408
341
  return ff_core_Ordering.OrderingSame()
409
- return
410
- }
411
342
  }
412
- {
413
343
  if(_1.OrderingAfter) {
414
344
  return ff_core_Ordering.OrderingBefore()
415
- return
416
- }
417
345
  }
418
346
  }
419
347
  }
@@ -429,55 +357,29 @@ return ff_core_Ordering.OrderingSame()
429
357
 
430
358
  export const ff_core_Ordering_Order$ff_core_Bool_Bool = {
431
359
  compare_(x_, y_) {
432
- {
433
360
  const x_a = x_;
434
361
  const y_a = y_;
435
- {
436
- if(!x_a) {
437
- if(y_a) {
362
+ if(!x_a && y_a) {
438
363
  return ff_core_Ordering.OrderingBefore()
439
- return
440
- }
441
- }
442
364
  }
443
- {
444
- if(x_a) {
445
- if(!y_a) {
365
+ if(x_a && !y_a) {
446
366
  return ff_core_Ordering.OrderingAfter()
447
- return
448
- }
449
- }
450
367
  }
451
368
  {
452
369
  return ff_core_Ordering.OrderingSame()
453
- return
454
- }
455
370
  }
456
371
  },
457
372
  async compare_$(x_, y_, $task) {
458
- {
459
373
  const x_a = x_;
460
374
  const y_a = y_;
461
- {
462
- if(!x_a) {
463
- if(y_a) {
375
+ if(!x_a && y_a) {
464
376
  return ff_core_Ordering.OrderingBefore()
465
- return
466
- }
467
- }
468
377
  }
469
- {
470
- if(x_a) {
471
- if(!y_a) {
378
+ if(x_a && !y_a) {
472
379
  return ff_core_Ordering.OrderingAfter()
473
- return
474
- }
475
- }
476
380
  }
477
381
  {
478
382
  return ff_core_Ordering.OrderingSame()
479
- return
480
- }
481
383
  }
482
384
  }
483
385
  };
@@ -530,32 +432,24 @@ export function ff_core_Ordering_Order$ff_core_Pair_Pair(ff_core_Ordering_Order$
530
432
  compare_(x_, y_) {
531
433
  {
532
434
  const _1 = ff_core_Ordering_Order$A.compare_(x_.first_, y_.first_);
533
- {
534
435
  if(_1.OrderingSame) {
535
436
  return ff_core_Ordering_Order$B.compare_(x_.second_, y_.second_)
536
- return
537
- }
538
437
  }
539
438
  {
540
439
  const o_ = _1;
541
440
  return o_
542
- return
543
441
  }
544
442
  }
545
443
  },
546
444
  async compare_$(x_, y_, $task) {
547
445
  {
548
446
  const _1 = ff_core_Ordering_Order$A.compare_(x_.first_, y_.first_);
549
- {
550
447
  if(_1.OrderingSame) {
551
448
  return ff_core_Ordering_Order$B.compare_(x_.second_, y_.second_)
552
- return
553
- }
554
449
  }
555
450
  {
556
451
  const o_ = _1;
557
452
  return o_
558
- return
559
453
  }
560
454
  }
561
455
  }
@@ -566,7 +460,7 @@ compare_(x_, y_) {
566
460
  let ordering_ = ff_core_Ordering.OrderingSame();
567
461
  let i_ = 0;
568
462
  while((((i_ < ff_core_List.List_size(x_)) && (i_ < ff_core_List.List_size(y_))) && (ordering_ === ff_core_Ordering.OrderingSame()))) {
569
- ordering_ = ff_core_Ordering_Order$T.compare_(ff_core_List.List_grab(x_, i_), ff_core_List.List_grab(y_, i_));
463
+ ordering_ = ff_core_Ordering_Order$T.compare_((x_[i_] ?? ff_core_List.internalGrab_(x_, i_)), (y_[i_] ?? ff_core_List.internalGrab_(y_, i_)));
570
464
  i_ += 1
571
465
  };
572
466
  if((ordering_ !== ff_core_Ordering.OrderingSame())) {
@@ -579,7 +473,7 @@ async compare_$(x_, y_, $task) {
579
473
  let ordering_ = ff_core_Ordering.OrderingSame();
580
474
  let i_ = 0;
581
475
  while((((i_ < ff_core_List.List_size(x_)) && (i_ < ff_core_List.List_size(y_))) && (ordering_ === ff_core_Ordering.OrderingSame()))) {
582
- ordering_ = ff_core_Ordering_Order$T.compare_(ff_core_List.List_grab(x_, i_), ff_core_List.List_grab(y_, i_));
476
+ ordering_ = ff_core_Ordering_Order$T.compare_((x_[i_] ?? ff_core_List.internalGrab_(x_, i_)), (y_[i_] ?? ff_core_List.internalGrab_(y_, i_)));
583
477
  i_ += 1
584
478
  };
585
479
  if((ordering_ !== ff_core_Ordering.OrderingSame())) {
@@ -592,71 +486,35 @@ return ordering_
592
486
 
593
487
  export const ff_core_Equal_Equal$ff_core_Ordering_Ordering = {
594
488
  equals_(x_, y_) {
595
- {
596
489
  const x_a = x_;
597
490
  const y_a = y_;
598
- {
599
- if(x_a.OrderingBefore) {
600
- if(y_a.OrderingBefore) {
491
+ if(x_a.OrderingBefore && y_a.OrderingBefore) {
601
492
  return true
602
- return
603
493
  }
604
- }
605
- }
606
- {
607
- if(x_a.OrderingSame) {
608
- if(y_a.OrderingSame) {
494
+ if(x_a.OrderingSame && y_a.OrderingSame) {
609
495
  return true
610
- return
611
- }
612
- }
613
496
  }
614
- {
615
- if(x_a.OrderingAfter) {
616
- if(y_a.OrderingAfter) {
497
+ if(x_a.OrderingAfter && y_a.OrderingAfter) {
617
498
  return true
618
- return
619
- }
620
- }
621
499
  }
622
500
  {
623
501
  return false
624
- return
625
- }
626
502
  }
627
503
  },
628
504
  async equals_$(x_, y_, $task) {
629
- {
630
505
  const x_a = x_;
631
506
  const y_a = y_;
632
- {
633
- if(x_a.OrderingBefore) {
634
- if(y_a.OrderingBefore) {
507
+ if(x_a.OrderingBefore && y_a.OrderingBefore) {
635
508
  return true
636
- return
637
- }
638
- }
639
509
  }
640
- {
641
- if(x_a.OrderingSame) {
642
- if(y_a.OrderingSame) {
510
+ if(x_a.OrderingSame && y_a.OrderingSame) {
643
511
  return true
644
- return
645
- }
646
512
  }
647
- }
648
- {
649
- if(x_a.OrderingAfter) {
650
- if(y_a.OrderingAfter) {
513
+ if(x_a.OrderingAfter && y_a.OrderingAfter) {
651
514
  return true
652
- return
653
- }
654
- }
655
515
  }
656
516
  {
657
517
  return false
658
- return
659
- }
660
518
  }
661
519
  }
662
520
  };
@@ -107,7 +107,6 @@ const _1 = self_;
107
107
  {
108
108
  const _c = _1;
109
109
  return ff_core_Pair.Pair(body_(self_.first_), _c.second_)
110
- return
111
110
  }
112
111
  }
113
112
  }
@@ -118,7 +117,6 @@ const _1 = self_;
118
117
  {
119
118
  const _c = _1;
120
119
  return ff_core_Pair.Pair(_c.first_, body_(self_.second_))
121
- return
122
120
  }
123
121
  }
124
122
  }
@@ -133,7 +131,6 @@ const _1 = self_;
133
131
  {
134
132
  const _c = _1;
135
133
  return ff_core_Pair.Pair((await body_(self_.first_, $task)), _c.second_)
136
- return
137
134
  }
138
135
  }
139
136
  }
@@ -144,7 +141,6 @@ const _1 = self_;
144
141
  {
145
142
  const _c = _1;
146
143
  return ff_core_Pair.Pair(_c.first_, (await body_(self_.second_, $task)))
147
- return
148
144
  }
149
145
  }
150
146
  }
@@ -159,7 +155,6 @@ const _1 = self_;
159
155
  {
160
156
  const _c = _1;
161
157
  return ff_core_Pair.Pair(body_(self_.first_), body_(self_.second_))
162
- return
163
158
  }
164
159
  }
165
160
  }
@@ -178,7 +173,6 @@ const _1 = self_;
178
173
  {
179
174
  const _c = _1;
180
175
  return ff_core_Pair.Pair((await body_(self_.first_, $task)), (await body_(self_.second_, $task)))
181
- return
182
176
  }
183
177
  }
184
178
  }
@@ -218,44 +212,29 @@ return ff_core_Any.internalAnyTag_(((((("ff:core/Pair.Pair" + "[") + ff_core_Any
218
212
 
219
213
  export function ff_core_Equal_Equal$ff_core_Pair_Pair(ff_core_Equal_Equal$A, ff_core_Equal_Equal$B) { return {
220
214
  equals_(x_, y_) {
221
- {
222
215
  const x_a = x_;
223
216
  const y_a = y_;
224
- {
225
- const _guard1 = (x_ === y_);
226
- if(_guard1) {
217
+ if((x_ === y_)) {
227
218
  return true
228
- return
229
- }
230
219
  }
231
220
  {
232
221
  return (ff_core_Equal_Equal$A.equals_(x_.first_, y_.first_) && ff_core_Equal_Equal$B.equals_(x_.second_, y_.second_))
233
- return
234
- }
235
222
  }
236
223
  },
237
224
  async equals_$(x_, y_, $task) {
238
- {
239
225
  const x_a = x_;
240
226
  const y_a = y_;
241
- {
242
- const _guard1 = (x_ === y_);
243
- if(_guard1) {
227
+ if((x_ === y_)) {
244
228
  return true
245
- return
246
- }
247
229
  }
248
230
  {
249
231
  return (ff_core_Equal_Equal$A.equals_(x_.first_, y_.first_) && ff_core_Equal_Equal$B.equals_(x_.second_, y_.second_))
250
- return
251
- }
252
232
  }
253
233
  }
254
234
  }}
255
235
 
256
236
  export function ff_core_Serializable_Serializable$ff_core_Pair_Pair(ff_core_Serializable_Serializable$A, ff_core_Serializable_Serializable$B) { return {
257
237
  serializeUsing_(serialization_, value_) {
258
- {
259
238
  const serialization_a = serialization_;
260
239
  const value_a = value_;
261
240
  {
@@ -268,28 +247,22 @@ ff_core_Serializable_Serializable$A.serializeUsing_(serialization_, v_.first_);
268
247
  ff_core_Serializable_Serializable$B.serializeUsing_(serialization_, v_.second_)
269
248
  return
270
249
  }
271
- }
272
250
  },
273
251
  deserializeUsing_(serialization_) {
274
252
  const variantIndex_ = ff_core_Buffer.Buffer_grabUint8(serialization_.buffer_, serialization_.offset_);
275
253
  serialization_.offset_ += 1;
276
254
  {
277
255
  const _1 = variantIndex_;
278
- {
279
256
  if(_1 === 0) {
280
257
  serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 17), 0);
281
258
  return ff_core_Pair.Pair(ff_core_Serializable_Serializable$A.deserializeUsing_(serialization_), ff_core_Serializable_Serializable$B.deserializeUsing_(serialization_))
282
- return
283
- }
284
259
  }
285
260
  {
286
261
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Serializable.DeserializationChecksumException(), ff_core_Serializable.ff_core_Any_HasAnyTag$ff_core_Serializable_DeserializationChecksumException)})
287
- return
288
262
  }
289
263
  }
290
264
  },
291
265
  async serializeUsing_$(serialization_, value_, $task) {
292
- {
293
266
  const serialization_a = serialization_;
294
267
  const value_a = value_;
295
268
  {
@@ -302,23 +275,18 @@ ff_core_Serializable_Serializable$A.serializeUsing_(serialization_, v_.first_);
302
275
  ff_core_Serializable_Serializable$B.serializeUsing_(serialization_, v_.second_)
303
276
  return
304
277
  }
305
- }
306
278
  },
307
279
  async deserializeUsing_$(serialization_, $task) {
308
280
  const variantIndex_ = ff_core_Buffer.Buffer_grabUint8(serialization_.buffer_, serialization_.offset_);
309
281
  serialization_.offset_ += 1;
310
282
  {
311
283
  const _1 = variantIndex_;
312
- {
313
284
  if(_1 === 0) {
314
285
  serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 17), 0);
315
286
  return ff_core_Pair.Pair(ff_core_Serializable_Serializable$A.deserializeUsing_(serialization_), ff_core_Serializable_Serializable$B.deserializeUsing_(serialization_))
316
- return
317
- }
318
287
  }
319
288
  {
320
289
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Serializable.DeserializationChecksumException(), ff_core_Serializable.ff_core_Any_HasAnyTag$ff_core_Serializable_DeserializationChecksumException)})
321
- return
322
290
  }
323
291
  }
324
292
  }
@@ -208,32 +208,19 @@ throw new Error('Function Path_relativeTo is missing on this target in sync cont
208
208
 
209
209
  export function Path_endsWith(self_, parts_) {
210
210
  function go_(pathOption_, reversed_) {
211
- {
212
211
  const pathOption_a = pathOption_;
213
212
  const reversed_a = reversed_;
214
- {
215
213
  if(reversed_a.length === 0) {
216
214
  return true
217
- return
218
215
  }
219
- }
220
- {
221
- if(pathOption_a.Some) {
216
+ if(pathOption_a.Some && reversed_a.length >= 1) {
222
217
  const path_ = pathOption_a.value_;
223
- if(reversed_a.length > 0) {
224
218
  const p_ = reversed_a[0];
225
219
  const ps_ = reversed_a.slice(1);
226
220
  return ((ff_core_Path.Path_base(path_) === p_) && go_(ff_core_Path.Path_parent(path_), ps_))
227
- return
228
- }
229
- }
230
221
  }
231
- {
232
222
  if(pathOption_a.None) {
233
223
  return false
234
- return
235
- }
236
- }
237
224
  }
238
225
  }
239
226
  return go_(ff_core_Option.Some(self_), ff_core_List.List_reverse(parts_))
@@ -472,32 +459,19 @@ export async function Path_relativeTo$(self_, path_, $task) {
472
459
 
473
460
  export async function Path_endsWith$(self_, parts_, $task) {
474
461
  async function go_$(pathOption_, reversed_, $task) {
475
- {
476
462
  const pathOption_a = pathOption_;
477
463
  const reversed_a = reversed_;
478
- {
479
464
  if(reversed_a.length === 0) {
480
465
  return true
481
- return
482
466
  }
483
- }
484
- {
485
- if(pathOption_a.Some) {
467
+ if(pathOption_a.Some && reversed_a.length >= 1) {
486
468
  const path_ = pathOption_a.value_;
487
- if(reversed_a.length > 0) {
488
469
  const p_ = reversed_a[0];
489
470
  const ps_ = reversed_a.slice(1);
490
471
  return (((await ff_core_Path.Path_base$(path_, $task)) === p_) && (await go_$((await ff_core_Path.Path_parent$(path_, $task)), ps_, $task)))
491
- return
492
- }
493
- }
494
472
  }
495
- {
496
473
  if(pathOption_a.None) {
497
474
  return false
498
- return
499
- }
500
- }
501
475
  }
502
476
  }
503
477
  return (await go_$(ff_core_Option.Some(self_), ff_core_List.List_reverse(parts_), $task))
@@ -216,8 +216,8 @@ export function Random_nextGauss(self_, mean_, standardDeviation_) {
216
216
  export function Random_shuffleArray(self_, array_) {
217
217
  ff_core_List.List_each(ff_core_Int.Int_until(0, (ff_core_Array.Array_size(array_) - 1)), ((i_) => {
218
218
  const j_ = (ff_core_Random.Random_nextInt(self_, 0, (ff_core_Array.Array_size(array_) - i_)) + i_);
219
- const value_ = ff_core_Array.Array_grab(array_, i_);
220
- ff_core_Array.Array_set(array_, i_, ff_core_Array.Array_grab(array_, j_));
219
+ const value_ = (array_.array[i_] ?? ff_core_Array.internalGrab_(array_, i_));
220
+ ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_)));
221
221
  ff_core_Array.Array_set(array_, j_, value_)
222
222
  }))
223
223
  }
@@ -275,8 +275,8 @@ throw new Error('Function Random_nextGauss is missing on this target in async co
275
275
  export async function Random_shuffleArray$(self_, array_, $task) {
276
276
  ff_core_List.List_each(ff_core_Int.Int_until(0, (ff_core_Array.Array_size(array_) - 1)), ((i_) => {
277
277
  const j_ = (ff_core_Random.Random_nextInt(self_, 0, (ff_core_Array.Array_size(array_) - i_)) + i_);
278
- const value_ = ff_core_Array.Array_grab(array_, i_);
279
- ff_core_Array.Array_set(array_, i_, ff_core_Array.Array_grab(array_, j_));
278
+ const value_ = (array_.array[i_] ?? ff_core_Array.internalGrab_(array_, i_));
279
+ ff_core_Array.Array_set(array_, i_, (array_.array[j_] ?? ff_core_Array.internalGrab_(array_, j_)));
280
280
  ff_core_Array.Array_set(array_, j_, value_)
281
281
  }))
282
282
  }