firefly-compiler 0.4.19 → 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 (68) hide show
  1. package/compiler/Builder.ff +23 -13
  2. package/compiler/JsEmitter.ff +120 -76
  3. package/compiler/LspHook.ff +17 -3
  4. package/compiler/Main.ff +13 -7
  5. package/compiler/Parser.ff +11 -13
  6. package/compiler/Resolver.ff +15 -15
  7. package/compiler/Syntax.ff +1 -0
  8. package/core/Array.ff +6 -4
  9. package/core/Int.ff +12 -12
  10. package/core/Json.ff +2 -2
  11. package/core/List.ff +6 -4
  12. package/experimental/benchmarks/ListGrab.ff +23 -0
  13. package/experimental/benchmarks/ListGrab.java +55 -0
  14. package/experimental/benchmarks/Pyrotek45.ff +30 -0
  15. package/experimental/benchmarks/Pyrotek45.java +64 -0
  16. package/experimental/tests/TestJson.ff +26 -0
  17. package/lsp/CompletionHandler.ff +14 -14
  18. package/lsp/Handler.ff +56 -60
  19. package/lsp/SignatureHelpHandler.ff +5 -4
  20. package/lsp/SymbolHandler.ff +18 -4
  21. package/lsp/TestReferences.ff +15 -0
  22. package/lsp/TestReferencesCase.ff +8 -0
  23. package/output/js/ff/compiler/Builder.mjs +50 -44
  24. package/output/js/ff/compiler/Dependencies.mjs +0 -2
  25. package/output/js/ff/compiler/Deriver.mjs +16 -140
  26. package/output/js/ff/compiler/Dictionaries.mjs +8 -222
  27. package/output/js/ff/compiler/Environment.mjs +12 -154
  28. package/output/js/ff/compiler/Inference.mjs +127 -1013
  29. package/output/js/ff/compiler/JsEmitter.mjs +434 -2344
  30. package/output/js/ff/compiler/JsImporter.mjs +0 -12
  31. package/output/js/ff/compiler/LspHook.mjs +548 -151
  32. package/output/js/ff/compiler/Main.mjs +96 -550
  33. package/output/js/ff/compiler/Parser.mjs +58 -390
  34. package/output/js/ff/compiler/Patterns.mjs +20 -200
  35. package/output/js/ff/compiler/Resolver.mjs +26 -340
  36. package/output/js/ff/compiler/Substitution.mjs +2 -160
  37. package/output/js/ff/compiler/Syntax.mjs +449 -3293
  38. package/output/js/ff/compiler/Token.mjs +9 -1095
  39. package/output/js/ff/compiler/Tokenizer.mjs +4 -2
  40. package/output/js/ff/compiler/Unification.mjs +26 -360
  41. package/output/js/ff/compiler/Wildcards.mjs +0 -86
  42. package/output/js/ff/compiler/Workspace.mjs +8 -96
  43. package/output/js/ff/core/Array.mjs +15 -8
  44. package/output/js/ff/core/AssetSystem.mjs +4 -14
  45. package/output/js/ff/core/Bool.mjs +0 -12
  46. package/output/js/ff/core/Core.mjs +0 -30
  47. package/output/js/ff/core/Int.mjs +24 -24
  48. package/output/js/ff/core/IntMap.mjs +0 -8
  49. package/output/js/ff/core/Json.mjs +2 -42
  50. package/output/js/ff/core/List.mjs +23 -32
  51. package/output/js/ff/core/Lock.mjs +0 -10
  52. package/output/js/ff/core/Map.mjs +0 -24
  53. package/output/js/ff/core/Option.mjs +10 -286
  54. package/output/js/ff/core/Ordering.mjs +16 -158
  55. package/output/js/ff/core/Pair.mjs +2 -34
  56. package/output/js/ff/core/Path.mjs +2 -28
  57. package/output/js/ff/core/Random.mjs +4 -4
  58. package/output/js/ff/core/RbMap.mjs +56 -644
  59. package/output/js/ff/core/Show.mjs +0 -16
  60. package/output/js/ff/core/Stream.mjs +14 -144
  61. package/output/js/ff/core/StringMap.mjs +0 -8
  62. package/output/js/ff/core/Try.mjs +4 -108
  63. package/output/js/ff/core/Unit.mjs +2 -16
  64. package/package.json +1 -1
  65. package/postgresql/Pg.ff +23 -23
  66. package/vscode/client/src/extension.ts +30 -2
  67. package/vscode/package.json +17 -1
  68. package/core/Stack.ff +0 -250
@@ -102,37 +102,21 @@ import * as ff_core_Unit from "../../ff/core/Unit.mjs"
102
102
 
103
103
  export const ff_core_Show_Show$ff_core_Bool_Bool = {
104
104
  show_(value_) {
105
- {
106
105
  const value_a = value_;
107
- {
108
106
  if(!value_a) {
109
107
  return "False"
110
- return
111
108
  }
112
- }
113
- {
114
109
  if(value_a) {
115
110
  return "True"
116
- return
117
- }
118
- }
119
111
  }
120
112
  },
121
113
  async show_$(value_, $task) {
122
- {
123
114
  const value_a = value_;
124
- {
125
115
  if(!value_a) {
126
116
  return "False"
127
- return
128
117
  }
129
- }
130
- {
131
118
  if(value_a) {
132
119
  return "True"
133
- return
134
- }
135
- }
136
120
  }
137
121
  }
138
122
  };
@@ -190,35 +190,27 @@ let result_ = ff_core_Option.None();
190
190
  while(ff_core_Option.Option_isEmpty(result_)) {
191
191
  do {
192
192
  const _1 = inner_.next_();
193
- {
194
- const i_ = _1;
195
193
  if(_1.Some) {
194
+ const i_ = _1;
196
195
  result_ = ff_core_Option.Some(i_)
197
196
  break
198
197
  }
199
- }
200
- {
201
198
  if(_1.None) {
202
199
  do {
203
200
  const _1 = self_.next_();
204
- {
205
201
  if(_1.None) {
206
202
  result_ = ff_core_Option.Some(ff_core_Option.None())
207
203
  break
208
204
  }
209
- }
210
- {
211
205
  if(_1.Some) {
212
206
  const o_ = _1.value_;
213
207
  inner_.close_();
214
208
  inner_ = body_(o_)
215
209
  break
216
210
  }
217
- }
218
211
  } while(false)
219
212
  break
220
213
  }
221
- }
222
214
  } while(false)
223
215
  };
224
216
  return ff_core_Option.Option_grab(result_)
@@ -243,28 +235,21 @@ let result_ = ff_core_Option.None();
243
235
  while(ff_core_Option.Option_isEmpty(result_)) {
244
236
  do {
245
237
  const _1 = self_.next_();
246
- {
247
238
  if(_1.Some) {
248
239
  const x_ = _1.value_;
249
- const _guard1 = body_(x_);
250
- if(_guard1) {
240
+ if(body_(x_)) {
251
241
  result_ = ff_core_Option.Some(ff_core_Option.Some(x_))
252
242
  break
253
243
  }
254
244
  }
255
- }
256
- {
257
245
  if(_1.Some) {
258
246
 
259
247
  break
260
248
  }
261
- }
262
- {
263
249
  if(_1.None) {
264
250
  result_ = ff_core_Option.Some(ff_core_Option.None())
265
251
  break
266
252
  }
267
- }
268
253
  } while(false)
269
254
  };
270
255
  return ff_core_Option.Option_grab(result_)
@@ -277,19 +262,13 @@ export function Stream_zip(self_, that_) {
277
262
  return ff_core_Stream.Stream((() => {
278
263
  {
279
264
  const _1 = ff_core_Pair.Pair(self_.next_(), that_.next_());
280
- {
281
- if(_1.first_.Some) {
265
+ if(_1.first_.Some && _1.second_.Some) {
282
266
  const x_ = _1.first_.value_;
283
- if(_1.second_.Some) {
284
267
  const y_ = _1.second_.value_;
285
268
  return ff_core_Option.Some(ff_core_Pair.Pair(x_, y_))
286
- return
287
- }
288
- }
289
269
  }
290
270
  {
291
271
  return ff_core_Option.None()
292
- return
293
272
  }
294
273
  }
295
274
  }), (() => {
@@ -319,18 +298,14 @@ return ff_core_Stream.Stream((() => {
319
298
  while((remaining_ >= 1)) {
320
299
  do {
321
300
  const _1 = self_.next_();
322
- {
323
301
  if(_1.None) {
324
302
  remaining_ = 0
325
303
  break
326
304
  }
327
- }
328
- {
329
305
  if(_1.Some) {
330
306
  remaining_ -= 1
331
307
  break
332
308
  }
333
- }
334
309
  } while(false)
335
310
  };
336
311
  return self_.next_()
@@ -347,16 +322,12 @@ return ff_core_Option.None()
347
322
  } else {
348
323
  {
349
324
  const _1 = self_.next_();
350
- {
351
325
  if(_1.None) {
352
326
  done_ = true;
353
327
  return ff_core_Option.None()
354
- return
355
328
  }
356
- }
357
- {
358
- const o_ = _1;
359
329
  if(_1.Some) {
330
+ const o_ = _1;
360
331
  const x_ = _1.value_;
361
332
  done_ = (!body_(x_));
362
333
  if(done_) {
@@ -368,7 +339,6 @@ return
368
339
  }
369
340
  }
370
341
  }
371
- }
372
342
  }), (() => {
373
343
  self_.close_()
374
344
  }))
@@ -382,31 +352,24 @@ let result_ = ff_core_Option.None();
382
352
  while((!done_)) {
383
353
  do {
384
354
  const _1 = self_.next_();
385
- {
386
355
  if(_1.None) {
387
356
  done_ = true
388
357
  break
389
358
  }
390
- }
391
- {
392
359
  if(_1.Some) {
393
360
  const x_ = _1.value_;
394
- const _guard1 = body_(x_);
395
- if(_guard1) {
361
+ if(body_(x_)) {
396
362
 
397
363
  break
398
364
  }
399
365
  }
400
- }
401
- {
402
- const o_ = _1;
403
366
  if(_1.Some) {
367
+ const o_ = _1;
404
368
  const x_ = _1.value_;
405
369
  result_ = o_;
406
370
  done_ = true
407
371
  break
408
372
  }
409
- }
410
373
  } while(false)
411
374
  };
412
375
  return result_
@@ -435,14 +398,10 @@ return ff_core_Option.None()
435
398
  } else {
436
399
  {
437
400
  const _1 = self_.next_();
438
- {
439
401
  if(_1.None) {
440
402
  remaining_ = (-1);
441
403
  return ff_core_Option.None()
442
- return
443
404
  }
444
- }
445
- {
446
405
  if(_1.Some) {
447
406
  const x_ = _1.value_;
448
407
  let list_ = [x_];
@@ -451,27 +410,21 @@ while((remaining_ > 0)) {
451
410
  remaining_ -= 1;
452
411
  do {
453
412
  const _1 = self_.next_();
454
- {
455
413
  if(_1.None) {
456
414
  remaining_ = (-1)
457
415
  break
458
416
  }
459
- }
460
- {
461
417
  if(_1.Some) {
462
418
  const x_ = _1.value_;
463
419
  list_ = [x_, ...list_]
464
420
  break
465
421
  }
466
- }
467
422
  } while(false)
468
423
  };
469
424
  if((remaining_ !== (-1))) {
470
425
  remaining_ = size_
471
426
  };
472
427
  return ff_core_Option.Some(ff_core_List.List_reverse(list_))
473
- return
474
- }
475
428
  }
476
429
  }
477
430
  }
@@ -494,19 +447,15 @@ let done_ = false;
494
447
  while((!done_)) {
495
448
  do {
496
449
  const _1 = self_.next_();
497
- {
498
450
  if(_1.None) {
499
451
  done_ = true
500
452
  break
501
453
  }
502
- }
503
- {
504
454
  if(_1.Some) {
505
455
  const x_ = _1.value_;
506
456
  body_(x_)
507
457
  break
508
458
  }
509
- }
510
459
  } while(false)
511
460
  }
512
461
  } finally {
@@ -520,19 +469,15 @@ let done_ = false;
520
469
  while((!done_)) {
521
470
  do {
522
471
  const _1 = self_.next_();
523
- {
524
472
  if(_1.None) {
525
473
  done_ = true
526
474
  break
527
475
  }
528
- }
529
- {
530
476
  if(_1.Some) {
531
477
  const x_ = _1.value_;
532
478
  done_ = (!body_(x_))
533
479
  break
534
480
  }
535
- }
536
481
  } while(false)
537
482
  }
538
483
  } finally {
@@ -573,20 +518,16 @@ let result_ = ff_core_Option.None();
573
518
  while((!done_)) {
574
519
  do {
575
520
  const _1 = self_.next_();
576
- {
577
521
  if(_1.None) {
578
522
  done_ = true
579
523
  break
580
524
  }
581
- }
582
- {
583
- const o_ = _1;
584
525
  if(_1.Some) {
526
+ const o_ = _1;
585
527
  const x_ = _1.value_;
586
528
  result_ = o_
587
529
  break
588
530
  }
589
- }
590
531
  } while(false)
591
532
  };
592
533
  return result_
@@ -614,23 +555,18 @@ let result_ = ff_core_Option.None();
614
555
  while((!done_)) {
615
556
  do {
616
557
  const _1 = self_.next_();
617
- {
618
558
  if(_1.None) {
619
559
  done_ = true
620
560
  break
621
561
  }
622
- }
623
- {
624
562
  if(_1.Some) {
625
563
  const x_ = _1.value_;
626
564
  do {
627
565
  const _1 = body_(x_);
628
- {
629
566
  if(_1.None) {
630
567
 
631
568
  break
632
569
  }
633
- }
634
570
  {
635
571
  const o_ = _1;
636
572
  done_ = true;
@@ -640,7 +576,6 @@ break
640
576
  } while(false)
641
577
  break
642
578
  }
643
- }
644
579
  } while(false)
645
580
  };
646
581
  return result_
@@ -712,35 +647,27 @@ let result_ = ff_core_Option.None();
712
647
  while(ff_core_Option.Option_isEmpty(result_)) {
713
648
  do {
714
649
  const _1 = (await inner_.next_($task));
715
- {
716
- const i_ = _1;
717
650
  if(_1.Some) {
651
+ const i_ = _1;
718
652
  result_ = ff_core_Option.Some(i_)
719
653
  break
720
654
  }
721
- }
722
- {
723
655
  if(_1.None) {
724
656
  do {
725
657
  const _1 = (await self_.next_($task));
726
- {
727
658
  if(_1.None) {
728
659
  result_ = ff_core_Option.Some(ff_core_Option.None())
729
660
  break
730
661
  }
731
- }
732
- {
733
662
  if(_1.Some) {
734
663
  const o_ = _1.value_;
735
664
  (await inner_.close_($task));
736
665
  inner_ = (await body_(o_, $task))
737
666
  break
738
667
  }
739
- }
740
668
  } while(false)
741
669
  break
742
670
  }
743
- }
744
671
  } while(false)
745
672
  };
746
673
  return ff_core_Option.Option_grab(result_)
@@ -765,28 +692,21 @@ let result_ = ff_core_Option.None();
765
692
  while(ff_core_Option.Option_isEmpty(result_)) {
766
693
  do {
767
694
  const _1 = (await self_.next_($task));
768
- {
769
695
  if(_1.Some) {
770
696
  const x_ = _1.value_;
771
- const _guard1 = (await body_(x_, $task));
772
- if(_guard1) {
697
+ if((await body_(x_, $task))) {
773
698
  result_ = ff_core_Option.Some(ff_core_Option.Some(x_))
774
699
  break
775
700
  }
776
701
  }
777
- }
778
- {
779
702
  if(_1.Some) {
780
703
 
781
704
  break
782
705
  }
783
- }
784
- {
785
706
  if(_1.None) {
786
707
  result_ = ff_core_Option.Some(ff_core_Option.None())
787
708
  break
788
709
  }
789
- }
790
710
  } while(false)
791
711
  };
792
712
  return ff_core_Option.Option_grab(result_)
@@ -799,19 +719,13 @@ export async function Stream_zip$(self_, that_, $task) {
799
719
  return ff_core_Stream.Stream((async ($task) => {
800
720
  {
801
721
  const _1 = ff_core_Pair.Pair((await self_.next_($task)), (await that_.next_($task)));
802
- {
803
- if(_1.first_.Some) {
722
+ if(_1.first_.Some && _1.second_.Some) {
804
723
  const x_ = _1.first_.value_;
805
- if(_1.second_.Some) {
806
724
  const y_ = _1.second_.value_;
807
725
  return ff_core_Option.Some(ff_core_Pair.Pair(x_, y_))
808
- return
809
- }
810
- }
811
726
  }
812
727
  {
813
728
  return ff_core_Option.None()
814
- return
815
729
  }
816
730
  }
817
731
  }), (async ($task) => {
@@ -841,18 +755,14 @@ return ff_core_Stream.Stream((async ($task) => {
841
755
  while((remaining_ >= 1)) {
842
756
  do {
843
757
  const _1 = (await self_.next_($task));
844
- {
845
758
  if(_1.None) {
846
759
  remaining_ = 0
847
760
  break
848
761
  }
849
- }
850
- {
851
762
  if(_1.Some) {
852
763
  remaining_ -= 1
853
764
  break
854
765
  }
855
- }
856
766
  } while(false)
857
767
  };
858
768
  return (await self_.next_($task))
@@ -869,16 +779,12 @@ return ff_core_Option.None()
869
779
  } else {
870
780
  {
871
781
  const _1 = (await self_.next_($task));
872
- {
873
782
  if(_1.None) {
874
783
  done_ = true;
875
784
  return ff_core_Option.None()
876
- return
877
785
  }
878
- }
879
- {
880
- const o_ = _1;
881
786
  if(_1.Some) {
787
+ const o_ = _1;
882
788
  const x_ = _1.value_;
883
789
  done_ = (!(await body_(x_, $task)));
884
790
  if(done_) {
@@ -890,7 +796,6 @@ return
890
796
  }
891
797
  }
892
798
  }
893
- }
894
799
  }), (async ($task) => {
895
800
  (await self_.close_($task))
896
801
  }))
@@ -904,31 +809,24 @@ let result_ = ff_core_Option.None();
904
809
  while((!done_)) {
905
810
  do {
906
811
  const _1 = (await self_.next_($task));
907
- {
908
812
  if(_1.None) {
909
813
  done_ = true
910
814
  break
911
815
  }
912
- }
913
- {
914
816
  if(_1.Some) {
915
817
  const x_ = _1.value_;
916
- const _guard1 = (await body_(x_, $task));
917
- if(_guard1) {
818
+ if((await body_(x_, $task))) {
918
819
 
919
820
  break
920
821
  }
921
822
  }
922
- }
923
- {
924
- const o_ = _1;
925
823
  if(_1.Some) {
824
+ const o_ = _1;
926
825
  const x_ = _1.value_;
927
826
  result_ = o_;
928
827
  done_ = true
929
828
  break
930
829
  }
931
- }
932
830
  } while(false)
933
831
  };
934
832
  return result_
@@ -957,14 +855,10 @@ return ff_core_Option.None()
957
855
  } else {
958
856
  {
959
857
  const _1 = (await self_.next_($task));
960
- {
961
858
  if(_1.None) {
962
859
  remaining_ = (-1);
963
860
  return ff_core_Option.None()
964
- return
965
861
  }
966
- }
967
- {
968
862
  if(_1.Some) {
969
863
  const x_ = _1.value_;
970
864
  let list_ = [x_];
@@ -973,27 +867,21 @@ while((remaining_ > 0)) {
973
867
  remaining_ -= 1;
974
868
  do {
975
869
  const _1 = (await self_.next_($task));
976
- {
977
870
  if(_1.None) {
978
871
  remaining_ = (-1)
979
872
  break
980
873
  }
981
- }
982
- {
983
874
  if(_1.Some) {
984
875
  const x_ = _1.value_;
985
876
  list_ = [x_, ...list_]
986
877
  break
987
878
  }
988
- }
989
879
  } while(false)
990
880
  };
991
881
  if((remaining_ !== (-1))) {
992
882
  remaining_ = size_
993
883
  };
994
884
  return ff_core_Option.Some(ff_core_List.List_reverse(list_))
995
- return
996
- }
997
885
  }
998
886
  }
999
887
  }
@@ -1016,19 +904,15 @@ let done_ = false;
1016
904
  while((!done_)) {
1017
905
  do {
1018
906
  const _1 = (await self_.next_($task));
1019
- {
1020
907
  if(_1.None) {
1021
908
  done_ = true
1022
909
  break
1023
910
  }
1024
- }
1025
- {
1026
911
  if(_1.Some) {
1027
912
  const x_ = _1.value_;
1028
913
  (await body_(x_, $task))
1029
914
  break
1030
915
  }
1031
- }
1032
916
  } while(false)
1033
917
  }
1034
918
  } finally {
@@ -1042,19 +926,15 @@ let done_ = false;
1042
926
  while((!done_)) {
1043
927
  do {
1044
928
  const _1 = (await self_.next_($task));
1045
- {
1046
929
  if(_1.None) {
1047
930
  done_ = true
1048
931
  break
1049
932
  }
1050
- }
1051
- {
1052
933
  if(_1.Some) {
1053
934
  const x_ = _1.value_;
1054
935
  done_ = (!(await body_(x_, $task)))
1055
936
  break
1056
937
  }
1057
- }
1058
938
  } while(false)
1059
939
  }
1060
940
  } finally {
@@ -1095,20 +975,16 @@ let result_ = ff_core_Option.None();
1095
975
  while((!done_)) {
1096
976
  do {
1097
977
  const _1 = (await self_.next_($task));
1098
- {
1099
978
  if(_1.None) {
1100
979
  done_ = true
1101
980
  break
1102
981
  }
1103
- }
1104
- {
1105
- const o_ = _1;
1106
982
  if(_1.Some) {
983
+ const o_ = _1;
1107
984
  const x_ = _1.value_;
1108
985
  result_ = o_
1109
986
  break
1110
987
  }
1111
- }
1112
988
  } while(false)
1113
989
  };
1114
990
  return result_
@@ -1136,23 +1012,18 @@ let result_ = ff_core_Option.None();
1136
1012
  while((!done_)) {
1137
1013
  do {
1138
1014
  const _1 = (await self_.next_($task));
1139
- {
1140
1015
  if(_1.None) {
1141
1016
  done_ = true
1142
1017
  break
1143
1018
  }
1144
- }
1145
- {
1146
1019
  if(_1.Some) {
1147
1020
  const x_ = _1.value_;
1148
1021
  do {
1149
1022
  const _1 = (await body_(x_, $task));
1150
- {
1151
1023
  if(_1.None) {
1152
1024
 
1153
1025
  break
1154
1026
  }
1155
- }
1156
1027
  {
1157
1028
  const o_ = _1;
1158
1029
  done_ = true;
@@ -1162,7 +1033,6 @@ break
1162
1033
  } while(false)
1163
1034
  break
1164
1035
  }
1165
- }
1166
1036
  } while(false)
1167
1037
  };
1168
1038
  return result_
@@ -278,13 +278,10 @@ return ff_core_StringMap.StringMap_grab(self_, key_)
278
278
  export function StringMap_push(self_, key_, value_) {
279
279
  {
280
280
  const _1 = ff_core_StringMap.StringMap_get(self_, key_);
281
- {
282
281
  if(_1.None) {
283
282
  ff_core_StringMap.StringMap_set(self_, key_, ff_core_List.List_toArray([value_]))
284
283
  return
285
284
  }
286
- }
287
- {
288
285
  if(_1.Some) {
289
286
  const array_ = _1.value_;
290
287
  ff_core_Array.Array_push(array_, value_)
@@ -292,18 +289,14 @@ return
292
289
  }
293
290
  }
294
291
  }
295
- }
296
292
 
297
293
  export async function StringMap_push$(self_, key_, value_, $task) {
298
294
  {
299
295
  const _1 = ff_core_StringMap.StringMap_get(self_, key_);
300
- {
301
296
  if(_1.None) {
302
297
  ff_core_StringMap.StringMap_set(self_, key_, ff_core_List.List_toArray([value_]))
303
298
  return
304
299
  }
305
- }
306
- {
307
300
  if(_1.Some) {
308
301
  const array_ = _1.value_;
309
302
  ff_core_Array.Array_push(array_, value_)
@@ -311,7 +304,6 @@ return
311
304
  }
312
305
  }
313
306
  }
314
- }
315
307
 
316
308
 
317
309