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
@@ -156,7 +156,6 @@ return module2_
156
156
  export function Resolver_checkInstanceType(self_, type_) {
157
157
  {
158
158
  const _1 = type_;
159
- {
160
159
  if(_1.TConstructor) {
161
160
  const name_ = _1.name_;
162
161
  const typeArguments_ = _1.generics_;
@@ -168,7 +167,6 @@ ff_compiler_Resolver.Resolver_checkInstanceType(self_, _w1)
168
167
  }))
169
168
  return
170
169
  }
171
- }
172
170
  {
173
171
 
174
172
  return
@@ -183,18 +181,13 @@ ff_core_List.List_each(imports_, ((import_) => {
183
181
  const _1 = ff_core_List.List_find(modules_, ((_w1) => {
184
182
  return (ff_core_String.String_dropLast(_w1.file_, 3) === import_.file_)
185
183
  }));
186
- {
187
184
  if(_1.Some) {
188
185
  const module_ = _1.value_;
189
186
  resolver_ = ff_compiler_Resolver.Resolver_processDefinitions(resolver_, module_, ff_core_Option.Some(import_.alias_))
190
187
  return
191
188
  }
192
- }
193
- {
194
189
  if(_1.None) {
195
190
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(import_.at_, ("No such module: " + import_.file_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
196
- return
197
- }
198
191
  }
199
192
  }
200
193
  }));
@@ -206,28 +199,18 @@ function entry_(name_, unqualified_) {
206
199
  const full_ = ((((ff_compiler_Syntax.PackagePair_groupName(module_.packagePair_, ":") + "/") + ff_core_String.String_dropLast(module_.file_, 3)) + ".") + name_);
207
200
  {
208
201
  const _1 = importAlias_;
209
- {
210
202
  if(_1.None) {
211
203
  return [ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
212
- return
213
- }
214
204
  }
215
- {
216
205
  if(_1.Some) {
217
206
  const alias_ = _1.value_;
218
- const _guard1 = unqualified_;
219
- if(_guard1) {
207
+ if(unqualified_) {
220
208
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
221
- return
222
- }
223
209
  }
224
210
  }
225
- {
226
211
  if(_1.Some) {
227
212
  const alias_ = _1.value_;
228
213
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(full_, full_)]
229
- return
230
- }
231
214
  }
232
215
  }
233
216
  }
@@ -310,14 +293,13 @@ const _1 = self_;
310
293
  {
311
294
  const _c = _1;
312
295
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variables_, lets_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functions_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethods_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variableLocations_, letLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functionLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethodLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variants_, variants_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.types_, types_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeGenerics_, typeGenerics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeLocations_, typeLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.asyncTypes_, asyncTypes_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traits_, traits_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traitLocations_, traitLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), self_.state_, _c.lspHook_)
313
- return
314
296
  }
315
297
  }
316
298
  }
317
299
 
318
300
  export function Resolver_resolveTypeDefinition(self_, definition_) {
319
301
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_)) {
320
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
302
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
321
303
  };
322
304
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
323
305
  return ff_core_Pair.Pair(g_, g_)
@@ -359,7 +341,7 @@ return
359
341
  }
360
342
  })), ff_core_List.List_map(definition_.variants_, ((v_) => {
361
343
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, v_.at_)) {
362
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None()))
344
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None(), true))
363
345
  };
364
346
  {
365
347
  const _1 = v_;
@@ -392,7 +374,7 @@ return
392
374
 
393
375
  export function Resolver_resolveTraitDefinition(self_, definition_) {
394
376
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
395
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
377
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
396
378
  };
397
379
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
398
380
  return ff_core_Pair.Pair(g_, g_)
@@ -418,16 +400,12 @@ return (_w1.name_ === name_)
418
400
  const function1_ = ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(lambda_));
419
401
  const function2_ = ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, function1_, true, false);
420
402
  return ff_core_Pair.Pair(name_, (((_1) => {
421
- {
422
403
  if(_1.FireflyTarget) {
423
404
  const lambda_ = _1.lambda_;
424
405
  return lambda_
425
- return
426
- }
427
406
  }
428
407
  {
429
408
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(signature_.at_, "Internal error: Expected method default to be a lambda"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
430
- return
431
409
  }
432
410
  }))(function2_.body_))
433
411
  return
@@ -443,7 +421,7 @@ const traitDefinedAt_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.tra
443
421
  return definition_.at_
444
422
  }));
445
423
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, traitDefinedAt_))) {
446
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None()))
424
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None(), true))
447
425
  };
448
426
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
449
427
  return ff_core_Pair.Pair(g_, g_)
@@ -496,48 +474,33 @@ return
496
474
 
497
475
  export function Resolver_resolveLetDefinition(self_, definition_, topLevel_) {
498
476
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
499
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
477
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), topLevel_))
500
478
  };
501
479
  {
502
480
  const _1 = definition_;
503
481
  {
504
482
  const _c = _1;
505
483
  return ff_compiler_Syntax.DLet(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, definition_.variableType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, definition_.value_, true))
506
- return
507
484
  }
508
485
  }
509
486
  }
510
487
 
511
488
  export function Resolver_resolveTerm(self_, term_, topLevel_) {
512
- {
513
489
  const self_a = self_;
514
490
  const term_a = term_;
515
491
  const topLevel_a = topLevel_;
516
- {
517
492
  if(term_a.EString) {
518
493
  return term_
519
- return
520
494
  }
521
- }
522
- {
523
495
  if(term_a.EChar) {
524
496
  return term_
525
- return
526
497
  }
527
- }
528
- {
529
498
  if(term_a.EInt) {
530
499
  return term_
531
- return
532
- }
533
500
  }
534
- {
535
501
  if(term_a.EFloat) {
536
502
  return term_
537
- return
538
- }
539
503
  }
540
- {
541
504
  if(term_a.EVariable) {
542
505
  const e_ = term_a;
543
506
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
@@ -545,7 +508,7 @@ const at_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variableLocatio
545
508
  return e_.at_
546
509
  }));
547
510
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, at_))) {
548
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None()))
511
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None(), true))
549
512
  }
550
513
  };
551
514
  return ff_core_Option.Option_else(ff_core_Option.Option_map(ff_core_Map.Map_get(self_.variables_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ((_w1) => {
@@ -554,7 +517,6 @@ const _1 = e_;
554
517
  {
555
518
  const _c = _1;
556
519
  return ff_compiler_Syntax.EVariable(_c.at_, _w1)
557
- return
558
520
  }
559
521
  }
560
522
  })), (() => {
@@ -562,8 +524,6 @@ return term_
562
524
  }))
563
525
  return
564
526
  }
565
- }
566
- {
567
527
  if(term_a.EList) {
568
528
  const at_ = term_a.at_;
569
529
  const t_ = term_a.elementType_;
@@ -573,13 +533,10 @@ return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(s
573
533
  const item_ = _1.first_;
574
534
  const spread_ = _1.second_;
575
535
  return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
576
- return
577
536
  }
578
537
  })))
579
538
  return
580
539
  }
581
- }
582
- {
583
540
  if(term_a.EVariant) {
584
541
  const at_ = term_a.at_;
585
542
  const name_ = term_a.name_;
@@ -596,15 +553,12 @@ const _1 = a_;
596
553
  {
597
554
  const _c = _1;
598
555
  return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
599
- return
600
556
  }
601
557
  }
602
558
  }))
603
559
  })))
604
560
  return
605
561
  }
606
- }
607
- {
608
562
  if(term_a.EVariantIs) {
609
563
  const at_ = term_a.at_;
610
564
  const name_ = term_a.name_;
@@ -616,8 +570,6 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
616
570
  })))
617
571
  return
618
572
  }
619
- }
620
- {
621
573
  if(term_a.ECopy) {
622
574
  const at_ = term_a.at_;
623
575
  const name_ = term_a.name_;
@@ -631,14 +583,11 @@ const _1 = f_;
631
583
  {
632
584
  const _c = _1;
633
585
  return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
634
- return
635
586
  }
636
587
  }
637
588
  })))
638
589
  return
639
590
  }
640
- }
641
- {
642
591
  if(term_a.EField) {
643
592
  const e_ = term_a;
644
593
  {
@@ -646,13 +595,10 @@ const _1 = e_;
646
595
  {
647
596
  const _c = _1;
648
597
  return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
649
- return
650
598
  }
651
599
  }
652
600
  return
653
601
  }
654
- }
655
- {
656
602
  if(term_a.ELambda) {
657
603
  const at_ = term_a.at_;
658
604
  const lambdaAt_ = term_a.lambda_.at_;
@@ -663,21 +609,15 @@ return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
663
609
  }))))
664
610
  return
665
611
  }
666
- }
667
- {
668
612
  if(term_a.EPipe) {
669
613
  const at_ = term_a.at_;
670
614
  const value_ = term_a.value_;
671
615
  const effect_ = term_a.effect_;
672
616
  const function_ = term_a.function_;
673
617
  return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_))
674
- return
675
618
  }
676
- }
677
- {
678
- if(term_a.ECall) {
619
+ if(term_a.ECall && term_a.target_.DynamicCall) {
679
620
  const at_ = term_a.at_;
680
- if(term_a.target_.DynamicCall) {
681
621
  const target_ = term_a.target_;
682
622
  const effect_ = term_a.effect_;
683
623
  const typeArguments_ = term_a.typeArguments_;
@@ -693,24 +633,14 @@ const _1 = a_;
693
633
  {
694
634
  const _c = _1;
695
635
  return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
696
- return
697
636
  }
698
637
  }
699
638
  })), dictionaries_)
700
639
  return
701
640
  }
702
- }
703
- }
704
- {
705
- if(term_a.ECall) {
706
- const at_ = term_a.at_;
707
- if(term_a.target_.StaticCall) {
641
+ if(term_a.ECall && term_a.target_.StaticCall) {
708
642
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Internal error: Static calls not expected in the Resolver phase"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
709
- return
710
- }
711
- }
712
643
  }
713
- {
714
644
  if(term_a.ERecord) {
715
645
  const at_ = term_a.at_;
716
646
  const fields_ = term_a.fields_;
@@ -720,14 +650,11 @@ const _1 = f_;
720
650
  {
721
651
  const _c = _1;
722
652
  return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
723
- return
724
653
  }
725
654
  }
726
655
  })))
727
656
  return
728
657
  }
729
- }
730
- {
731
658
  if(term_a.EWildcard) {
732
659
  const e_ = term_a;
733
660
  if((e_.index_ === 0)) {
@@ -738,13 +665,10 @@ const _1 = e_;
738
665
  {
739
666
  const _c = _1;
740
667
  return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
741
- return
742
668
  }
743
669
  }
744
670
  return
745
671
  }
746
- }
747
- {
748
672
  if(term_a.EFunctions) {
749
673
  const at_ = term_a.at_;
750
674
  const functions_ = term_a.functions_;
@@ -767,8 +691,6 @@ return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topL
767
691
  })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
768
692
  return
769
693
  }
770
- }
771
- {
772
694
  if(term_a.ELet) {
773
695
  const e_ = term_a;
774
696
  const self2_ = (((_c) => {
@@ -776,7 +698,7 @@ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.na
776
698
  }))(self_);
777
699
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
778
700
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, e_.at_))) {
779
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None()))
701
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None(), false))
780
702
  }
781
703
  };
782
704
  {
@@ -784,22 +706,16 @@ const _1 = e_;
784
706
  {
785
707
  const _c = _1;
786
708
  return ff_compiler_Syntax.ELet(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, e_.valueType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.value_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_))
787
- return
788
709
  }
789
710
  }
790
711
  return
791
712
  }
792
- }
793
- {
794
713
  if(term_a.ESequential) {
795
714
  const at_ = term_a.at_;
796
715
  const before_ = term_a.before_;
797
716
  const after_ = term_a.after_;
798
717
  return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
799
- return
800
- }
801
718
  }
802
- {
803
719
  if(term_a.EAssign) {
804
720
  const at_ = term_a.at_;
805
721
  const operator_ = term_a.operator_;
@@ -810,8 +726,6 @@ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Sy
810
726
  })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
811
727
  return
812
728
  }
813
- }
814
- {
815
729
  if(term_a.EAssignField) {
816
730
  const at_ = term_a.at_;
817
731
  const operator_ = term_a.operator_;
@@ -819,24 +733,16 @@ const record_ = term_a.record_;
819
733
  const field_ = term_a.field_;
820
734
  const value_ = term_a.value_;
821
735
  return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
822
- return
823
- }
824
- }
825
736
  }
826
737
  }
827
738
 
828
739
  export function Resolver_resolveType(self_, type_, topLevel_) {
829
- {
830
740
  const self_a = self_;
831
741
  const type_a = type_;
832
742
  const topLevel_a = topLevel_;
833
- {
834
743
  if(type_a.TVariable) {
835
744
  return type_
836
- return
837
- }
838
745
  }
839
- {
840
746
  if(type_a.TConstructor) {
841
747
  const constructor_ = type_a;
842
748
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
@@ -871,7 +777,6 @@ const _1 = constructor_;
871
777
  {
872
778
  const _c = _1;
873
779
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...arguments_, returnType_])
874
- return
875
780
  }
876
781
  }
877
782
  } else {
@@ -880,15 +785,12 @@ const _1 = constructor_;
880
785
  {
881
786
  const _c = _1;
882
787
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...generics_])
883
- return
884
788
  }
885
789
  }
886
790
  }
887
791
  return
888
792
  }
889
793
  }
890
- }
891
- }
892
794
 
893
795
  export function Resolver_makeEffectArgument(self_, at_, topLevel_) {
894
796
  if(topLevel_) {
@@ -944,7 +846,7 @@ return ff_compiler_Syntax.DFunction(definition_.at_, signature_, body_)
944
846
 
945
847
  export function Resolver_resolveSignature(self_, signature_, topLevel_, isInstanceMethod_) {
946
848
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, signature_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, signature_.at_))) {
947
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_))
849
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_, topLevel_))
948
850
  };
949
851
  const newSignature_ = (topLevel_
950
852
  ? (((_c) => {
@@ -999,52 +901,30 @@ const _1 = self_;
999
901
  {
1000
902
  const _c = _1;
1001
903
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, variableMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, variableLocationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, ff_core_Map.Map_addAll(self_.types_, typeMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1002
- return
1003
904
  }
1004
905
  }
1005
906
  }
1006
907
 
1007
908
  export function Resolver_resolveCase(self_, case_, topLevel_) {
1008
909
  function findVariables_(pattern_) {
1009
- {
1010
910
  const pattern_a = pattern_;
1011
- {
1012
911
  if(pattern_a.PString) {
1013
912
  return ff_core_Map.empty_()
1014
- return
1015
- }
1016
913
  }
1017
- {
1018
914
  if(pattern_a.PInt) {
1019
915
  return ff_core_Map.empty_()
1020
- return
1021
916
  }
1022
- }
1023
- {
1024
917
  if(pattern_a.PChar) {
1025
918
  return ff_core_Map.empty_()
1026
- return
1027
919
  }
1028
- }
1029
- {
1030
- if(pattern_a.PVariable) {
920
+ if(pattern_a.PVariable && pattern_a.name_.Some) {
1031
921
  const at_ = pattern_a.at_;
1032
- if(pattern_a.name_.Some) {
1033
922
  const name_ = pattern_a.name_.value_;
1034
923
  return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_core_Pair.Pair(at_, name_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1035
- return
1036
- }
1037
924
  }
1038
- }
1039
- {
1040
- if(pattern_a.PVariable) {
1041
- if(pattern_a.name_.None) {
925
+ if(pattern_a.PVariable && pattern_a.name_.None) {
1042
926
  return ff_core_Map.empty_()
1043
- return
1044
- }
1045
- }
1046
927
  }
1047
- {
1048
928
  if(pattern_a.PVariant) {
1049
929
  const patterns_ = pattern_a.patterns_;
1050
930
  return ff_core_List.List_foldLeft(ff_core_List.List_map(patterns_, ((pattern_) => {
@@ -1054,8 +934,6 @@ return ff_core_Map.Map_addAll(_w1, _w2, ff_core_Ordering.ff_core_Ordering_Order$
1054
934
  }))
1055
935
  return
1056
936
  }
1057
- }
1058
- {
1059
937
  if(pattern_a.PVariantAs) {
1060
938
  const at_ = pattern_a.at_;
1061
939
  const variableAt_ = pattern_a.variableAt_;
@@ -1065,16 +943,11 @@ return ff_core_Pair.Pair(x_, ff_core_Pair.Pair(variableAt_, x_))
1065
943
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1066
944
  return
1067
945
  }
1068
- }
1069
- {
1070
946
  if(pattern_a.PAlias) {
1071
947
  const at_ = pattern_a.at_;
1072
948
  const pattern_ = pattern_a.pattern_;
1073
949
  const variable_ = pattern_a.variable_;
1074
950
  return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_core_Pair.Pair(at_, variable_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1075
- return
1076
- }
1077
- }
1078
951
  }
1079
952
  }
1080
953
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -1110,34 +983,20 @@ return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
1110
983
  }
1111
984
 
1112
985
  export function Resolver_resolvePattern(self_, pattern_) {
1113
- {
1114
986
  const self_a = self_;
1115
987
  const pattern_a = pattern_;
1116
- {
1117
988
  if(pattern_a.PString) {
1118
989
  return pattern_
1119
- return
1120
- }
1121
990
  }
1122
- {
1123
991
  if(pattern_a.PInt) {
1124
992
  return pattern_
1125
- return
1126
- }
1127
993
  }
1128
- {
1129
994
  if(pattern_a.PChar) {
1130
995
  return pattern_
1131
- return
1132
996
  }
1133
- }
1134
- {
1135
997
  if(pattern_a.PVariable) {
1136
998
  return pattern_
1137
- return
1138
- }
1139
999
  }
1140
- {
1141
1000
  if(pattern_a.PVariant) {
1142
1001
  const at_ = pattern_a.at_;
1143
1002
  const name_ = pattern_a.name_;
@@ -1149,10 +1008,7 @@ const newPatterns_ = ff_core_List.List_map(patterns_, ((_w1) => {
1149
1008
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
1150
1009
  }));
1151
1010
  return ff_compiler_Syntax.PVariant(at_, newName_, newPatterns_)
1152
- return
1153
- }
1154
1011
  }
1155
- {
1156
1012
  if(pattern_a.PVariantAs) {
1157
1013
  const at_ = pattern_a.at_;
1158
1014
  const name_ = pattern_a.name_;
@@ -1162,33 +1018,22 @@ const newName_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_,
1162
1018
  return name_
1163
1019
  }));
1164
1020
  return ff_compiler_Syntax.PVariantAs(at_, newName_, variableAt_, variable_)
1165
- return
1166
- }
1167
1021
  }
1168
- {
1169
1022
  if(pattern_a.PAlias) {
1170
1023
  const at_ = pattern_a.at_;
1171
1024
  const pattern_ = pattern_a.pattern_;
1172
1025
  const variable_ = pattern_a.variable_;
1173
1026
  const newPattern_ = ff_compiler_Resolver.Resolver_resolvePattern(self_, pattern_);
1174
1027
  return ff_compiler_Syntax.PAlias(at_, newPattern_, variable_)
1175
- return
1176
- }
1177
- }
1178
1028
  }
1179
1029
  }
1180
1030
 
1181
1031
  export function Resolver_containsAsyncType(self_, type_) {
1182
- {
1183
1032
  const self_a = self_;
1184
1033
  const type_a = type_;
1185
- {
1186
1034
  if(type_a.TVariable) {
1187
1035
  return false
1188
- return
1189
1036
  }
1190
- }
1191
- {
1192
1037
  if(type_a.TConstructor) {
1193
1038
  const constructor_ = type_a;
1194
1039
  const name_ = (ff_core_String.String_contains(constructor_.name_, "$")
@@ -1207,8 +1052,6 @@ return ff_compiler_Resolver.Resolver_containsAsyncType(self_, _w1)
1207
1052
  return
1208
1053
  }
1209
1054
  }
1210
- }
1211
- }
1212
1055
 
1213
1056
  export async function Resolver_freshUnificationVariable$(self_, at_, $task) {
1214
1057
  const result_ = ff_compiler_Syntax.TVariable(at_, self_.state_.nextUnificationVariableIndex_);
@@ -1250,7 +1093,6 @@ return module2_
1250
1093
  export async function Resolver_checkInstanceType$(self_, type_, $task) {
1251
1094
  {
1252
1095
  const _1 = type_;
1253
- {
1254
1096
  if(_1.TConstructor) {
1255
1097
  const name_ = _1.name_;
1256
1098
  const typeArguments_ = _1.generics_;
@@ -1262,7 +1104,6 @@ ff_compiler_Resolver.Resolver_checkInstanceType(self_, _w1)
1262
1104
  }))
1263
1105
  return
1264
1106
  }
1265
- }
1266
1107
  {
1267
1108
 
1268
1109
  return
@@ -1277,18 +1118,13 @@ ff_core_List.List_each(imports_, ((import_) => {
1277
1118
  const _1 = ff_core_List.List_find(modules_, ((_w1) => {
1278
1119
  return (ff_core_String.String_dropLast(_w1.file_, 3) === import_.file_)
1279
1120
  }));
1280
- {
1281
1121
  if(_1.Some) {
1282
1122
  const module_ = _1.value_;
1283
1123
  resolver_ = ff_compiler_Resolver.Resolver_processDefinitions(resolver_, module_, ff_core_Option.Some(import_.alias_))
1284
1124
  return
1285
1125
  }
1286
- }
1287
- {
1288
1126
  if(_1.None) {
1289
1127
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(import_.at_, ("No such module: " + import_.file_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1290
- return
1291
- }
1292
1128
  }
1293
1129
  }
1294
1130
  }));
@@ -1300,28 +1136,18 @@ function entry_(name_, unqualified_) {
1300
1136
  const full_ = ((((ff_compiler_Syntax.PackagePair_groupName(module_.packagePair_, ":") + "/") + ff_core_String.String_dropLast(module_.file_, 3)) + ".") + name_);
1301
1137
  {
1302
1138
  const _1 = importAlias_;
1303
- {
1304
1139
  if(_1.None) {
1305
1140
  return [ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
1306
- return
1307
- }
1308
1141
  }
1309
- {
1310
1142
  if(_1.Some) {
1311
1143
  const alias_ = _1.value_;
1312
- const _guard1 = unqualified_;
1313
- if(_guard1) {
1144
+ if(unqualified_) {
1314
1145
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(name_, full_), ff_core_Pair.Pair(full_, full_)]
1315
- return
1316
- }
1317
1146
  }
1318
1147
  }
1319
- {
1320
1148
  if(_1.Some) {
1321
1149
  const alias_ = _1.value_;
1322
1150
  return [ff_core_Pair.Pair(((alias_ + ".") + name_), full_), ff_core_Pair.Pair(full_, full_)]
1323
- return
1324
- }
1325
1151
  }
1326
1152
  }
1327
1153
  }
@@ -1404,14 +1230,13 @@ const _1 = self_;
1404
1230
  {
1405
1231
  const _c = _1;
1406
1232
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variables_, lets_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functions_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethods_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(ff_core_Map.Map_addAll(self_.variableLocations_, letLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), functionLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), traitMethodLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variants_, variants_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.types_, types_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeGenerics_, typeGenerics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.typeLocations_, typeLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.asyncTypes_, asyncTypes_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_List.List_toSet([], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traits_, traits_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.traitLocations_, traitLocations_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), self_.state_, _c.lspHook_)
1407
- return
1408
1233
  }
1409
1234
  }
1410
1235
  }
1411
1236
 
1412
1237
  export async function Resolver_resolveTypeDefinition$(self_, definition_, $task) {
1413
1238
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_)) {
1414
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
1239
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
1415
1240
  };
1416
1241
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
1417
1242
  return ff_core_Pair.Pair(g_, g_)
@@ -1453,7 +1278,7 @@ return
1453
1278
  }
1454
1279
  })), ff_core_List.List_map(definition_.variants_, ((v_) => {
1455
1280
  if(ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, v_.at_)) {
1456
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None()))
1281
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(v_.name_, v_.at_, v_.at_), ff_core_Option.None(), true))
1457
1282
  };
1458
1283
  {
1459
1284
  const _1 = v_;
@@ -1486,7 +1311,7 @@ return
1486
1311
 
1487
1312
  export async function Resolver_resolveTraitDefinition$(self_, definition_, $task) {
1488
1313
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
1489
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
1314
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), true))
1490
1315
  };
1491
1316
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
1492
1317
  return ff_core_Pair.Pair(g_, g_)
@@ -1512,16 +1337,12 @@ return (_w1.name_ === name_)
1512
1337
  const function1_ = ff_compiler_Syntax.DFunction(signature_.at_, signature_, ff_compiler_Syntax.FireflyTarget(lambda_));
1513
1338
  const function2_ = ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, function1_, true, false);
1514
1339
  return ff_core_Pair.Pair(name_, (((_1) => {
1515
- {
1516
1340
  if(_1.FireflyTarget) {
1517
1341
  const lambda_ = _1.lambda_;
1518
1342
  return lambda_
1519
- return
1520
- }
1521
1343
  }
1522
1344
  {
1523
1345
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(signature_.at_, "Internal error: Expected method default to be a lambda"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1524
- return
1525
1346
  }
1526
1347
  }))(function2_.body_))
1527
1348
  return
@@ -1537,7 +1358,7 @@ const traitDefinedAt_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.tra
1537
1358
  return definition_.at_
1538
1359
  }));
1539
1360
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, traitDefinedAt_))) {
1540
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None()))
1361
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.traitName_, definition_.at_, traitDefinedAt_), ff_core_Option.None(), true))
1541
1362
  };
1542
1363
  const generics_ = ff_core_List.List_toMap(ff_core_List.List_map(definition_.generics_, ((g_) => {
1543
1364
  return ff_core_Pair.Pair(g_, g_)
@@ -1590,48 +1411,33 @@ return
1590
1411
 
1591
1412
  export async function Resolver_resolveLetDefinition$(self_, definition_, topLevel_, $task) {
1592
1413
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, definition_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, definition_.at_))) {
1593
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None()))
1414
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(definition_.name_, definition_.at_, definition_.at_), ff_core_Option.None(), topLevel_))
1594
1415
  };
1595
1416
  {
1596
1417
  const _1 = definition_;
1597
1418
  {
1598
1419
  const _c = _1;
1599
1420
  return ff_compiler_Syntax.DLet(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, definition_.variableType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, definition_.value_, true))
1600
- return
1601
1421
  }
1602
1422
  }
1603
1423
  }
1604
1424
 
1605
1425
  export async function Resolver_resolveTerm$(self_, term_, topLevel_, $task) {
1606
- {
1607
1426
  const self_a = self_;
1608
1427
  const term_a = term_;
1609
1428
  const topLevel_a = topLevel_;
1610
- {
1611
1429
  if(term_a.EString) {
1612
1430
  return term_
1613
- return
1614
1431
  }
1615
- }
1616
- {
1617
1432
  if(term_a.EChar) {
1618
1433
  return term_
1619
- return
1620
1434
  }
1621
- }
1622
- {
1623
1435
  if(term_a.EInt) {
1624
1436
  return term_
1625
- return
1626
- }
1627
1437
  }
1628
- {
1629
1438
  if(term_a.EFloat) {
1630
1439
  return term_
1631
- return
1632
- }
1633
1440
  }
1634
- {
1635
1441
  if(term_a.EVariable) {
1636
1442
  const e_ = term_a;
1637
1443
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
@@ -1639,7 +1445,7 @@ const at_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variableLocatio
1639
1445
  return e_.at_
1640
1446
  }));
1641
1447
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, at_))) {
1642
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None()))
1448
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, at_), ff_core_Option.None(), true))
1643
1449
  }
1644
1450
  };
1645
1451
  return ff_core_Option.Option_else(ff_core_Option.Option_map(ff_core_Map.Map_get(self_.variables_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ((_w1) => {
@@ -1648,7 +1454,6 @@ const _1 = e_;
1648
1454
  {
1649
1455
  const _c = _1;
1650
1456
  return ff_compiler_Syntax.EVariable(_c.at_, _w1)
1651
- return
1652
1457
  }
1653
1458
  }
1654
1459
  })), (() => {
@@ -1656,8 +1461,6 @@ return term_
1656
1461
  }))
1657
1462
  return
1658
1463
  }
1659
- }
1660
- {
1661
1464
  if(term_a.EList) {
1662
1465
  const at_ = term_a.at_;
1663
1466
  const t_ = term_a.elementType_;
@@ -1667,13 +1470,10 @@ return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(s
1667
1470
  const item_ = _1.first_;
1668
1471
  const spread_ = _1.second_;
1669
1472
  return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
1670
- return
1671
1473
  }
1672
1474
  })))
1673
1475
  return
1674
1476
  }
1675
- }
1676
- {
1677
1477
  if(term_a.EVariant) {
1678
1478
  const at_ = term_a.at_;
1679
1479
  const name_ = term_a.name_;
@@ -1690,15 +1490,12 @@ const _1 = a_;
1690
1490
  {
1691
1491
  const _c = _1;
1692
1492
  return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1693
- return
1694
1493
  }
1695
1494
  }
1696
1495
  }))
1697
1496
  })))
1698
1497
  return
1699
1498
  }
1700
- }
1701
- {
1702
1499
  if(term_a.EVariantIs) {
1703
1500
  const at_ = term_a.at_;
1704
1501
  const name_ = term_a.name_;
@@ -1710,8 +1507,6 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1710
1507
  })))
1711
1508
  return
1712
1509
  }
1713
- }
1714
- {
1715
1510
  if(term_a.ECopy) {
1716
1511
  const at_ = term_a.at_;
1717
1512
  const name_ = term_a.name_;
@@ -1725,14 +1520,11 @@ const _1 = f_;
1725
1520
  {
1726
1521
  const _c = _1;
1727
1522
  return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1728
- return
1729
1523
  }
1730
1524
  }
1731
1525
  })))
1732
1526
  return
1733
1527
  }
1734
- }
1735
- {
1736
1528
  if(term_a.EField) {
1737
1529
  const e_ = term_a;
1738
1530
  {
@@ -1740,13 +1532,10 @@ const _1 = e_;
1740
1532
  {
1741
1533
  const _c = _1;
1742
1534
  return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
1743
- return
1744
1535
  }
1745
1536
  }
1746
1537
  return
1747
1538
  }
1748
- }
1749
- {
1750
1539
  if(term_a.ELambda) {
1751
1540
  const at_ = term_a.at_;
1752
1541
  const lambdaAt_ = term_a.lambda_.at_;
@@ -1757,21 +1546,15 @@ return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
1757
1546
  }))))
1758
1547
  return
1759
1548
  }
1760
- }
1761
- {
1762
1549
  if(term_a.EPipe) {
1763
1550
  const at_ = term_a.at_;
1764
1551
  const value_ = term_a.value_;
1765
1552
  const effect_ = term_a.effect_;
1766
1553
  const function_ = term_a.function_;
1767
1554
  return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_))
1768
- return
1769
1555
  }
1770
- }
1771
- {
1772
- if(term_a.ECall) {
1556
+ if(term_a.ECall && term_a.target_.DynamicCall) {
1773
1557
  const at_ = term_a.at_;
1774
- if(term_a.target_.DynamicCall) {
1775
1558
  const target_ = term_a.target_;
1776
1559
  const effect_ = term_a.effect_;
1777
1560
  const typeArguments_ = term_a.typeArguments_;
@@ -1787,24 +1570,14 @@ const _1 = a_;
1787
1570
  {
1788
1571
  const _c = _1;
1789
1572
  return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1790
- return
1791
1573
  }
1792
1574
  }
1793
1575
  })), dictionaries_)
1794
1576
  return
1795
1577
  }
1796
- }
1797
- }
1798
- {
1799
- if(term_a.ECall) {
1800
- const at_ = term_a.at_;
1801
- if(term_a.target_.StaticCall) {
1578
+ if(term_a.ECall && term_a.target_.StaticCall) {
1802
1579
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, "Internal error: Static calls not expected in the Resolver phase"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1803
- return
1804
- }
1805
- }
1806
1580
  }
1807
- {
1808
1581
  if(term_a.ERecord) {
1809
1582
  const at_ = term_a.at_;
1810
1583
  const fields_ = term_a.fields_;
@@ -1814,14 +1587,11 @@ const _1 = f_;
1814
1587
  {
1815
1588
  const _c = _1;
1816
1589
  return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1817
- return
1818
1590
  }
1819
1591
  }
1820
1592
  })))
1821
1593
  return
1822
1594
  }
1823
- }
1824
- {
1825
1595
  if(term_a.EWildcard) {
1826
1596
  const e_ = term_a;
1827
1597
  if((e_.index_ === 0)) {
@@ -1832,13 +1602,10 @@ const _1 = e_;
1832
1602
  {
1833
1603
  const _c = _1;
1834
1604
  return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
1835
- return
1836
1605
  }
1837
1606
  }
1838
1607
  return
1839
1608
  }
1840
- }
1841
- {
1842
1609
  if(term_a.EFunctions) {
1843
1610
  const at_ = term_a.at_;
1844
1611
  const functions_ = term_a.functions_;
@@ -1861,8 +1628,6 @@ return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topL
1861
1628
  })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
1862
1629
  return
1863
1630
  }
1864
- }
1865
- {
1866
1631
  if(term_a.ELet) {
1867
1632
  const e_ = term_a;
1868
1633
  const self2_ = (((_c) => {
@@ -1870,7 +1635,7 @@ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.na
1870
1635
  }))(self_);
1871
1636
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
1872
1637
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, e_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, e_.at_))) {
1873
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None()))
1638
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymbolHook(ff_compiler_LspHook.SymbolHook(e_.name_, e_.at_, e_.at_), ff_core_Option.None(), false))
1874
1639
  }
1875
1640
  };
1876
1641
  {
@@ -1878,22 +1643,16 @@ const _1 = e_;
1878
1643
  {
1879
1644
  const _c = _1;
1880
1645
  return ff_compiler_Syntax.ELet(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self_, e_.valueType_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.value_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_))
1881
- return
1882
1646
  }
1883
1647
  }
1884
1648
  return
1885
1649
  }
1886
- }
1887
- {
1888
1650
  if(term_a.ESequential) {
1889
1651
  const at_ = term_a.at_;
1890
1652
  const before_ = term_a.before_;
1891
1653
  const after_ = term_a.after_;
1892
1654
  return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
1893
- return
1894
- }
1895
1655
  }
1896
- {
1897
1656
  if(term_a.EAssign) {
1898
1657
  const at_ = term_a.at_;
1899
1658
  const operator_ = term_a.operator_;
@@ -1904,8 +1663,6 @@ throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Sy
1904
1663
  })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
1905
1664
  return
1906
1665
  }
1907
- }
1908
- {
1909
1666
  if(term_a.EAssignField) {
1910
1667
  const at_ = term_a.at_;
1911
1668
  const operator_ = term_a.operator_;
@@ -1913,24 +1670,16 @@ const record_ = term_a.record_;
1913
1670
  const field_ = term_a.field_;
1914
1671
  const value_ = term_a.value_;
1915
1672
  return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
1916
- return
1917
- }
1918
- }
1919
1673
  }
1920
1674
  }
1921
1675
 
1922
1676
  export async function Resolver_resolveType$(self_, type_, topLevel_, $task) {
1923
- {
1924
1677
  const self_a = self_;
1925
1678
  const type_a = type_;
1926
1679
  const topLevel_a = topLevel_;
1927
- {
1928
1680
  if(type_a.TVariable) {
1929
1681
  return type_
1930
- return
1931
- }
1932
1682
  }
1933
- {
1934
1683
  if(type_a.TConstructor) {
1935
1684
  const constructor_ = type_a;
1936
1685
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
@@ -1965,7 +1714,6 @@ const _1 = constructor_;
1965
1714
  {
1966
1715
  const _c = _1;
1967
1716
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...arguments_, returnType_])
1968
- return
1969
1717
  }
1970
1718
  }
1971
1719
  } else {
@@ -1974,15 +1722,12 @@ const _1 = constructor_;
1974
1722
  {
1975
1723
  const _c = _1;
1976
1724
  return ff_compiler_Syntax.TConstructor(_c.at_, name_, [...effect_, ...generics_])
1977
- return
1978
1725
  }
1979
1726
  }
1980
1727
  }
1981
1728
  return
1982
1729
  }
1983
1730
  }
1984
- }
1985
- }
1986
1731
 
1987
1732
  export async function Resolver_makeEffectArgument$(self_, at_, topLevel_, $task) {
1988
1733
  if(topLevel_) {
@@ -2038,7 +1783,7 @@ return ff_compiler_Syntax.DFunction(definition_.at_, signature_, body_)
2038
1783
 
2039
1784
  export async function Resolver_resolveSignature$(self_, signature_, topLevel_, isInstanceMethod_, $task) {
2040
1785
  if((ff_compiler_LspHook.LspHook_isAt(self_.lspHook_, signature_.at_) || ff_compiler_LspHook.LspHook_isDefinedAt(self_.lspHook_, signature_.at_))) {
2041
- ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_))
1786
+ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSignatureHook(signature_, isInstanceMethod_, topLevel_))
2042
1787
  };
2043
1788
  const newSignature_ = (topLevel_
2044
1789
  ? (((_c) => {
@@ -2093,52 +1838,30 @@ const _1 = self_;
2093
1838
  {
2094
1839
  const _c = _1;
2095
1840
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, variableMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, variableLocationMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, ff_core_Map.Map_addAll(self_.types_, typeMap_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.typeGenerics_, _c.typeLocations_, ff_core_Set.Set_removeAll(self_.asyncTypes_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Set.Set_addAll(self_.typeParameters_, ff_core_List.List_toSet(signature_.generics_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
2096
- return
2097
1841
  }
2098
1842
  }
2099
1843
  }
2100
1844
 
2101
1845
  export async function Resolver_resolveCase$(self_, case_, topLevel_, $task) {
2102
1846
  function findVariables_(pattern_) {
2103
- {
2104
1847
  const pattern_a = pattern_;
2105
- {
2106
1848
  if(pattern_a.PString) {
2107
1849
  return ff_core_Map.empty_()
2108
- return
2109
- }
2110
1850
  }
2111
- {
2112
1851
  if(pattern_a.PInt) {
2113
1852
  return ff_core_Map.empty_()
2114
- return
2115
1853
  }
2116
- }
2117
- {
2118
1854
  if(pattern_a.PChar) {
2119
1855
  return ff_core_Map.empty_()
2120
- return
2121
1856
  }
2122
- }
2123
- {
2124
- if(pattern_a.PVariable) {
1857
+ if(pattern_a.PVariable && pattern_a.name_.Some) {
2125
1858
  const at_ = pattern_a.at_;
2126
- if(pattern_a.name_.Some) {
2127
1859
  const name_ = pattern_a.name_.value_;
2128
1860
  return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_core_Pair.Pair(at_, name_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2129
- return
2130
- }
2131
1861
  }
2132
- }
2133
- {
2134
- if(pattern_a.PVariable) {
2135
- if(pattern_a.name_.None) {
1862
+ if(pattern_a.PVariable && pattern_a.name_.None) {
2136
1863
  return ff_core_Map.empty_()
2137
- return
2138
- }
2139
- }
2140
1864
  }
2141
- {
2142
1865
  if(pattern_a.PVariant) {
2143
1866
  const patterns_ = pattern_a.patterns_;
2144
1867
  return ff_core_List.List_foldLeft(ff_core_List.List_map(patterns_, ((pattern_) => {
@@ -2148,8 +1871,6 @@ return ff_core_Map.Map_addAll(_w1, _w2, ff_core_Ordering.ff_core_Ordering_Order$
2148
1871
  }))
2149
1872
  return
2150
1873
  }
2151
- }
2152
- {
2153
1874
  if(pattern_a.PVariantAs) {
2154
1875
  const at_ = pattern_a.at_;
2155
1876
  const variableAt_ = pattern_a.variableAt_;
@@ -2159,16 +1880,11 @@ return ff_core_Pair.Pair(x_, ff_core_Pair.Pair(variableAt_, x_))
2159
1880
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2160
1881
  return
2161
1882
  }
2162
- }
2163
- {
2164
1883
  if(pattern_a.PAlias) {
2165
1884
  const at_ = pattern_a.at_;
2166
1885
  const pattern_ = pattern_a.pattern_;
2167
1886
  const variable_ = pattern_a.variable_;
2168
1887
  return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_core_Pair.Pair(at_, variable_))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
2169
- return
2170
- }
2171
- }
2172
1888
  }
2173
1889
  }
2174
1890
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -2204,34 +1920,20 @@ return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
2204
1920
  }
2205
1921
 
2206
1922
  export async function Resolver_resolvePattern$(self_, pattern_, $task) {
2207
- {
2208
1923
  const self_a = self_;
2209
1924
  const pattern_a = pattern_;
2210
- {
2211
1925
  if(pattern_a.PString) {
2212
1926
  return pattern_
2213
- return
2214
- }
2215
1927
  }
2216
- {
2217
1928
  if(pattern_a.PInt) {
2218
1929
  return pattern_
2219
- return
2220
- }
2221
1930
  }
2222
- {
2223
1931
  if(pattern_a.PChar) {
2224
1932
  return pattern_
2225
- return
2226
1933
  }
2227
- }
2228
- {
2229
1934
  if(pattern_a.PVariable) {
2230
1935
  return pattern_
2231
- return
2232
- }
2233
1936
  }
2234
- {
2235
1937
  if(pattern_a.PVariant) {
2236
1938
  const at_ = pattern_a.at_;
2237
1939
  const name_ = pattern_a.name_;
@@ -2243,10 +1945,7 @@ const newPatterns_ = ff_core_List.List_map(patterns_, ((_w1) => {
2243
1945
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
2244
1946
  }));
2245
1947
  return ff_compiler_Syntax.PVariant(at_, newName_, newPatterns_)
2246
- return
2247
- }
2248
1948
  }
2249
- {
2250
1949
  if(pattern_a.PVariantAs) {
2251
1950
  const at_ = pattern_a.at_;
2252
1951
  const name_ = pattern_a.name_;
@@ -2256,33 +1955,22 @@ const newName_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_,
2256
1955
  return name_
2257
1956
  }));
2258
1957
  return ff_compiler_Syntax.PVariantAs(at_, newName_, variableAt_, variable_)
2259
- return
2260
- }
2261
1958
  }
2262
- {
2263
1959
  if(pattern_a.PAlias) {
2264
1960
  const at_ = pattern_a.at_;
2265
1961
  const pattern_ = pattern_a.pattern_;
2266
1962
  const variable_ = pattern_a.variable_;
2267
1963
  const newPattern_ = ff_compiler_Resolver.Resolver_resolvePattern(self_, pattern_);
2268
1964
  return ff_compiler_Syntax.PAlias(at_, newPattern_, variable_)
2269
- return
2270
- }
2271
- }
2272
1965
  }
2273
1966
  }
2274
1967
 
2275
1968
  export async function Resolver_containsAsyncType$(self_, type_, $task) {
2276
- {
2277
1969
  const self_a = self_;
2278
1970
  const type_a = type_;
2279
- {
2280
1971
  if(type_a.TVariable) {
2281
1972
  return false
2282
- return
2283
1973
  }
2284
- }
2285
- {
2286
1974
  if(type_a.TConstructor) {
2287
1975
  const constructor_ = type_a;
2288
1976
  const name_ = (ff_core_String.String_contains(constructor_.name_, "$")
@@ -2301,8 +1989,6 @@ return ff_compiler_Resolver.Resolver_containsAsyncType(self_, _w1)
2301
1989
  return
2302
1990
  }
2303
1991
  }
2304
- }
2305
- }
2306
1992
 
2307
1993
 
2308
1994