firefly-compiler 0.4.21 → 0.4.23

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.
@@ -106,6 +106,11 @@ export function ResolverState(nextUnificationVariableIndex_) {
106
106
  return {nextUnificationVariableIndex_};
107
107
  }
108
108
 
109
+ // type CaseVariable
110
+ export function CaseVariable(at_, name_, asBound_) {
111
+ return {at_, name_, asBound_};
112
+ }
113
+
109
114
 
110
115
 
111
116
  export function make_(packagePair_, moduleName_, lspHook_) {
@@ -334,7 +339,7 @@ const _1 = f_;
334
339
  {
335
340
  const _c = _1;
336
341
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
337
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
342
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
338
343
  })))
339
344
  return
340
345
  }
@@ -357,7 +362,7 @@ const _1 = f_;
357
362
  {
358
363
  const _c = _1;
359
364
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
360
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
365
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
361
366
  })))
362
367
  return
363
368
  }
@@ -480,29 +485,28 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
480
485
  const _1 = definition_;
481
486
  {
482
487
  const _c = _1;
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))
488
+ 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, false))
484
489
  }
485
490
  }
486
491
  }
487
492
 
488
- export function Resolver_resolveTerm(self_, term_, topLevel_) {
489
- const self_a = self_;
490
- const term_a = term_;
491
- const topLevel_a = topLevel_;
492
- if(term_a.EString) {
493
+ export function Resolver_resolveTerm(self_, term_, topLevel_, inField_ = false) {
494
+ {
495
+ const _1 = term_;
496
+ if(_1.EString) {
493
497
  return term_
494
498
  }
495
- if(term_a.EChar) {
499
+ if(_1.EChar) {
496
500
  return term_
497
501
  }
498
- if(term_a.EInt) {
502
+ if(_1.EInt) {
499
503
  return term_
500
504
  }
501
- if(term_a.EFloat) {
505
+ if(_1.EFloat) {
502
506
  return term_
503
507
  }
504
- if(term_a.EVariable) {
505
- const e_ = term_a;
508
+ if(_1.EVariable) {
509
+ const e_ = _1;
506
510
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
507
511
  const at_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variableLocations_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
508
512
  return e_.at_
@@ -524,24 +528,24 @@ return term_
524
528
  }))
525
529
  return
526
530
  }
527
- if(term_a.EList) {
528
- const at_ = term_a.at_;
529
- const t_ = term_a.elementType_;
530
- const items_ = term_a.items_;
531
+ if(_1.EList) {
532
+ const at_ = _1.at_;
533
+ const t_ = _1.elementType_;
534
+ const items_ = _1.items_;
531
535
  return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(self_, t_, topLevel_), ff_core_List.List_map(items_, ((_1) => {
532
536
  {
533
537
  const item_ = _1.first_;
534
538
  const spread_ = _1.second_;
535
- return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
539
+ return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_, false), spread_)
536
540
  }
537
541
  })))
538
542
  return
539
543
  }
540
- if(term_a.EVariant) {
541
- const at_ = term_a.at_;
542
- const name_ = term_a.name_;
543
- const typeArguments_ = term_a.typeArguments_;
544
- const arguments_ = term_a.arguments_;
544
+ if(_1.EVariant) {
545
+ const at_ = _1.at_;
546
+ const name_ = _1.name_;
547
+ const typeArguments_ = _1.typeArguments_;
548
+ const arguments_ = _1.arguments_;
545
549
  return ff_compiler_Syntax.EVariant(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
546
550
  return name_
547
551
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -552,17 +556,17 @@ return ff_core_List.List_map(_w1, ((a_) => {
552
556
  const _1 = a_;
553
557
  {
554
558
  const _c = _1;
555
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
559
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
556
560
  }
557
561
  }
558
562
  }))
559
563
  })))
560
564
  return
561
565
  }
562
- if(term_a.EVariantIs) {
563
- const at_ = term_a.at_;
564
- const name_ = term_a.name_;
565
- const typeArguments_ = term_a.typeArguments_;
566
+ if(_1.EVariantIs) {
567
+ const at_ = _1.at_;
568
+ const name_ = _1.name_;
569
+ const typeArguments_ = _1.typeArguments_;
566
570
  return ff_compiler_Syntax.EVariantIs(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
567
571
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variant: " + name_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
568
572
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -570,61 +574,61 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
570
574
  })))
571
575
  return
572
576
  }
573
- if(term_a.ECopy) {
574
- const at_ = term_a.at_;
575
- const name_ = term_a.name_;
576
- const record_ = term_a.record_;
577
- const arguments_ = term_a.arguments_;
577
+ if(_1.ECopy) {
578
+ const at_ = _1.at_;
579
+ const name_ = _1.name_;
580
+ const record_ = _1.record_;
581
+ const arguments_ = _1.arguments_;
578
582
  return ff_compiler_Syntax.ECopy(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
579
583
  return name_
580
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), ff_core_List.List_map(arguments_, ((f_) => {
584
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, true), ff_core_List.List_map(arguments_, ((f_) => {
581
585
  {
582
586
  const _1 = f_;
583
587
  {
584
588
  const _c = _1;
585
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
589
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
586
590
  }
587
591
  }
588
592
  })))
589
593
  return
590
594
  }
591
- if(term_a.EField) {
592
- const e_ = term_a;
595
+ if(_1.EField) {
596
+ const e_ = _1;
593
597
  {
594
598
  const _1 = e_;
595
599
  {
596
600
  const _c = _1;
597
- return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
601
+ return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_, true), _c.field_)
598
602
  }
599
603
  }
600
604
  return
601
605
  }
602
- if(term_a.ELambda) {
603
- const at_ = term_a.at_;
604
- const lambdaAt_ = term_a.lambda_.at_;
605
- const cases_ = term_a.lambda_.cases_;
606
+ if(_1.ELambda) {
607
+ const at_ = _1.at_;
608
+ const lambdaAt_ = _1.lambda_.at_;
609
+ const cases_ = _1.lambda_.cases_;
606
610
  const effect_ = ff_compiler_Resolver.Resolver_makeEffectArgument(self_, lambdaAt_, topLevel_);
607
611
  return ff_compiler_Syntax.ELambda(at_, ff_compiler_Syntax.Lambda(lambdaAt_, effect_, ff_core_List.List_map(cases_, ((_w1) => {
608
612
  return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
609
613
  }))))
610
614
  return
611
615
  }
612
- if(term_a.EPipe) {
613
- const at_ = term_a.at_;
614
- const value_ = term_a.value_;
615
- const effect_ = term_a.effect_;
616
- const function_ = term_a.function_;
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_))
618
- }
619
- if(term_a.ECall && term_a.target_.DynamicCall) {
620
- const at_ = term_a.at_;
621
- const target_ = term_a.target_;
622
- const effect_ = term_a.effect_;
623
- const typeArguments_ = term_a.typeArguments_;
624
- const arguments_ = term_a.arguments_;
625
- const dictionaries_ = term_a.dictionaries_;
616
+ if(_1.EPipe) {
617
+ const at_ = _1.at_;
618
+ const value_ = _1.value_;
619
+ const effect_ = _1.effect_;
620
+ const function_ = _1.function_;
621
+ return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_, false))
622
+ }
623
+ if(_1.ECall && _1.target_.DynamicCall) {
624
+ const at_ = _1.at_;
625
+ const target_ = _1.target_;
626
+ const effect_ = _1.effect_;
627
+ const typeArguments_ = _1.typeArguments_;
628
+ const arguments_ = _1.arguments_;
629
+ const dictionaries_ = _1.dictionaries_;
626
630
  return ff_compiler_Syntax.ECall(at_, (((_c) => {
627
- return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_), _c.tailCall_)
631
+ return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_, false), _c.tailCall_)
628
632
  }))(target_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_core_List.List_map(typeArguments_, ((_w1) => {
629
633
  return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
630
634
  })), ff_core_List.List_map(arguments_, ((a_) => {
@@ -632,31 +636,31 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
632
636
  const _1 = a_;
633
637
  {
634
638
  const _c = _1;
635
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
639
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
636
640
  }
637
641
  }
638
642
  })), dictionaries_)
639
643
  return
640
644
  }
641
- if(term_a.ECall && term_a.target_.StaticCall) {
645
+ if(_1.ECall && _1.target_.StaticCall) {
642
646
  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)})
643
647
  }
644
- if(term_a.ERecord) {
645
- const at_ = term_a.at_;
646
- const fields_ = term_a.fields_;
648
+ if(_1.ERecord) {
649
+ const at_ = _1.at_;
650
+ const fields_ = _1.fields_;
647
651
  return ff_compiler_Syntax.ERecord(at_, ff_core_List.List_map(fields_, ((f_) => {
648
652
  {
649
653
  const _1 = f_;
650
654
  {
651
655
  const _c = _1;
652
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
656
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
653
657
  }
654
658
  }
655
659
  })))
656
660
  return
657
661
  }
658
- if(term_a.EWildcard) {
659
- const e_ = term_a;
662
+ if(_1.EWildcard) {
663
+ const e_ = _1;
660
664
  if((e_.index_ === 0)) {
661
665
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(e_.at_, "Unbound wildcard"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
662
666
  };
@@ -669,10 +673,10 @@ return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
669
673
  }
670
674
  return
671
675
  }
672
- if(term_a.EFunctions) {
673
- const at_ = term_a.at_;
674
- const functions_ = term_a.functions_;
675
- const body_ = term_a.body_;
676
+ if(_1.EFunctions) {
677
+ const at_ = _1.at_;
678
+ const functions_ = _1.functions_;
679
+ const body_ = _1.body_;
676
680
  const functionMap_ = ff_core_List.List_toMap(ff_core_List.List_map(ff_core_List.List_map(functions_, ((_w1) => {
677
681
  return _w1.signature_.name_
678
682
  })), ((name_) => {
@@ -688,11 +692,11 @@ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, fu
688
692
  }))(self_);
689
693
  return ff_compiler_Syntax.EFunctions(at_, ff_core_List.List_map(functions_, ((_w1) => {
690
694
  return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topLevel_, false)
691
- })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
695
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_, false))
692
696
  return
693
697
  }
694
- if(term_a.ELet) {
695
- const e_ = term_a;
698
+ if(_1.ELet) {
699
+ const e_ = _1;
696
700
  const self2_ = (((_c) => {
697
701
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.name_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, e_.name_, e_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
698
702
  }))(self_);
@@ -705,34 +709,35 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
705
709
  const _1 = e_;
706
710
  {
707
711
  const _c = _1;
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_))
712
+ 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_, false), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_, false))
709
713
  }
710
714
  }
711
715
  return
712
716
  }
713
- if(term_a.ESequential) {
714
- const at_ = term_a.at_;
715
- const before_ = term_a.before_;
716
- const after_ = term_a.after_;
717
- return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
717
+ if(_1.ESequential) {
718
+ const at_ = _1.at_;
719
+ const before_ = _1.before_;
720
+ const after_ = _1.after_;
721
+ return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_, false))
718
722
  }
719
- if(term_a.EAssign) {
720
- const at_ = term_a.at_;
721
- const operator_ = term_a.operator_;
722
- const variable_ = term_a.variable_;
723
- const value_ = term_a.value_;
723
+ if(_1.EAssign) {
724
+ const at_ = _1.at_;
725
+ const operator_ = _1.operator_;
726
+ const variable_ = _1.variable_;
727
+ const value_ = _1.value_;
724
728
  return ff_compiler_Syntax.EAssign(at_, operator_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variables_, variable_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
725
729
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variable: " + variable_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
726
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
730
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
727
731
  return
728
732
  }
729
- if(term_a.EAssignField) {
730
- const at_ = term_a.at_;
731
- const operator_ = term_a.operator_;
732
- const record_ = term_a.record_;
733
- const field_ = term_a.field_;
734
- const value_ = term_a.value_;
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_))
733
+ if(_1.EAssignField) {
734
+ const at_ = _1.at_;
735
+ const operator_ = _1.operator_;
736
+ const record_ = _1.record_;
737
+ const field_ = _1.field_;
738
+ const value_ = _1.value_;
739
+ return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, false), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
740
+ }
736
741
  }
737
742
  }
738
743
 
@@ -873,7 +878,7 @@ const _1 = p_;
873
878
  {
874
879
  const _c = _1;
875
880
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self2_, p_.valueType_, topLevel_), ff_core_Option.Option_map(p_.default_, ((_w1) => {
876
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_)
881
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_, false)
877
882
  })))
878
883
  return
879
884
  }
@@ -920,7 +925,7 @@ return ff_core_Map.empty_()
920
925
  if(pattern_a.PVariable && pattern_a.name_.Some) {
921
926
  const at_ = pattern_a.at_;
922
927
  const name_ = pattern_a.name_.value_;
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)
928
+ return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_compiler_Resolver.CaseVariable(at_, name_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
924
929
  }
925
930
  if(pattern_a.PVariable && pattern_a.name_.None) {
926
931
  return ff_core_Map.empty_()
@@ -936,10 +941,11 @@ return
936
941
  }
937
942
  if(pattern_a.PVariantAs) {
938
943
  const at_ = pattern_a.at_;
944
+ const variant_ = pattern_a.name_;
939
945
  const variableAt_ = pattern_a.variableAt_;
940
946
  const variable_ = pattern_a.variable_;
941
947
  return ff_core_List.List_toMap(ff_core_List.List_map(ff_core_Option.Option_toList(variable_), ((x_) => {
942
- return ff_core_Pair.Pair(x_, ff_core_Pair.Pair(variableAt_, x_))
948
+ return ff_core_Pair.Pair(x_, ff_compiler_Resolver.CaseVariable(variableAt_, x_, ff_core_Option.Some(variant_)))
943
949
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
944
950
  return
945
951
  }
@@ -947,7 +953,7 @@ if(pattern_a.PAlias) {
947
953
  const at_ = pattern_a.at_;
948
954
  const pattern_ = pattern_a.pattern_;
949
955
  const variable_ = pattern_a.variable_;
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)
956
+ return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_compiler_Resolver.CaseVariable(at_, variable_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
951
957
  }
952
958
  }
953
959
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -959,27 +965,27 @@ let guards_ = [];
959
965
  const variableMap2_ = ff_core_List.List_foldLeft(case_.guards_, variableMap_, ((variableMap1_, g_) => {
960
966
  const self2_ = (((_c) => {
961
967
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
962
- return p_.second_
968
+ return p_.name_
963
969
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
964
- return p_.first_
970
+ return p_.at_
965
971
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
966
972
  }))(self_);
967
973
  const guard_ = (((_c) => {
968
- return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
974
+ return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_, false), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
969
975
  }))(g_);
970
976
  guards_ = [guard_, ...guards_];
971
977
  return ff_core_Map.Map_addAll(variableMap1_, findVariables_(guard_.pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
972
978
  }));
973
979
  const self3_ = (((_c) => {
974
980
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
975
- return p_.second_
981
+ return p_.name_
976
982
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
977
- return p_.first_
983
+ return p_.at_
978
984
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
979
985
  }))(self_);
980
986
  return ff_compiler_Syntax.MatchCase(case_.at_, ff_core_List.List_map(case_.patterns_, ((_w1) => {
981
987
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
982
- })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_))
988
+ })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_, false))
983
989
  }
984
990
 
985
991
  export function Resolver_resolvePattern(self_, pattern_) {
@@ -1271,7 +1277,7 @@ const _1 = f_;
1271
1277
  {
1272
1278
  const _c = _1;
1273
1279
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
1274
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
1280
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
1275
1281
  })))
1276
1282
  return
1277
1283
  }
@@ -1294,7 +1300,7 @@ const _1 = f_;
1294
1300
  {
1295
1301
  const _c = _1;
1296
1302
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, valueType_, ff_core_Option.Option_map(f_.default_, ((_w1) => {
1297
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true)
1303
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, true, false)
1298
1304
  })))
1299
1305
  return
1300
1306
  }
@@ -1417,29 +1423,28 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
1417
1423
  const _1 = definition_;
1418
1424
  {
1419
1425
  const _c = _1;
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))
1426
+ 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, false))
1421
1427
  }
1422
1428
  }
1423
1429
  }
1424
1430
 
1425
- export async function Resolver_resolveTerm$(self_, term_, topLevel_, $task) {
1426
- const self_a = self_;
1427
- const term_a = term_;
1428
- const topLevel_a = topLevel_;
1429
- if(term_a.EString) {
1431
+ export async function Resolver_resolveTerm$(self_, term_, topLevel_, inField_ = false, $task) {
1432
+ {
1433
+ const _1 = term_;
1434
+ if(_1.EString) {
1430
1435
  return term_
1431
1436
  }
1432
- if(term_a.EChar) {
1437
+ if(_1.EChar) {
1433
1438
  return term_
1434
1439
  }
1435
- if(term_a.EInt) {
1440
+ if(_1.EInt) {
1436
1441
  return term_
1437
1442
  }
1438
- if(term_a.EFloat) {
1443
+ if(_1.EFloat) {
1439
1444
  return term_
1440
1445
  }
1441
- if(term_a.EVariable) {
1442
- const e_ = term_a;
1446
+ if(_1.EVariable) {
1447
+ const e_ = _1;
1443
1448
  if(ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_)) {
1444
1449
  const at_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variableLocations_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1445
1450
  return e_.at_
@@ -1461,24 +1466,24 @@ return term_
1461
1466
  }))
1462
1467
  return
1463
1468
  }
1464
- if(term_a.EList) {
1465
- const at_ = term_a.at_;
1466
- const t_ = term_a.elementType_;
1467
- const items_ = term_a.items_;
1469
+ if(_1.EList) {
1470
+ const at_ = _1.at_;
1471
+ const t_ = _1.elementType_;
1472
+ const items_ = _1.items_;
1468
1473
  return ff_compiler_Syntax.EList(at_, ff_compiler_Resolver.Resolver_resolveType(self_, t_, topLevel_), ff_core_List.List_map(items_, ((_1) => {
1469
1474
  {
1470
1475
  const item_ = _1.first_;
1471
1476
  const spread_ = _1.second_;
1472
- return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_), spread_)
1477
+ return ff_core_Pair.Pair(ff_compiler_Resolver.Resolver_resolveTerm(self_, item_, topLevel_, false), spread_)
1473
1478
  }
1474
1479
  })))
1475
1480
  return
1476
1481
  }
1477
- if(term_a.EVariant) {
1478
- const at_ = term_a.at_;
1479
- const name_ = term_a.name_;
1480
- const typeArguments_ = term_a.typeArguments_;
1481
- const arguments_ = term_a.arguments_;
1482
+ if(_1.EVariant) {
1483
+ const at_ = _1.at_;
1484
+ const name_ = _1.name_;
1485
+ const typeArguments_ = _1.typeArguments_;
1486
+ const arguments_ = _1.arguments_;
1482
1487
  return ff_compiler_Syntax.EVariant(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1483
1488
  return name_
1484
1489
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -1489,17 +1494,17 @@ return ff_core_List.List_map(_w1, ((a_) => {
1489
1494
  const _1 = a_;
1490
1495
  {
1491
1496
  const _c = _1;
1492
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1497
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
1493
1498
  }
1494
1499
  }
1495
1500
  }))
1496
1501
  })))
1497
1502
  return
1498
1503
  }
1499
- if(term_a.EVariantIs) {
1500
- const at_ = term_a.at_;
1501
- const name_ = term_a.name_;
1502
- const typeArguments_ = term_a.typeArguments_;
1504
+ if(_1.EVariantIs) {
1505
+ const at_ = _1.at_;
1506
+ const name_ = _1.name_;
1507
+ const typeArguments_ = _1.typeArguments_;
1503
1508
  return ff_compiler_Syntax.EVariantIs(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1504
1509
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variant: " + name_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1505
1510
  })), ff_core_List.List_map(typeArguments_, ((_w1) => {
@@ -1507,61 +1512,61 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1507
1512
  })))
1508
1513
  return
1509
1514
  }
1510
- if(term_a.ECopy) {
1511
- const at_ = term_a.at_;
1512
- const name_ = term_a.name_;
1513
- const record_ = term_a.record_;
1514
- const arguments_ = term_a.arguments_;
1515
+ if(_1.ECopy) {
1516
+ const at_ = _1.at_;
1517
+ const name_ = _1.name_;
1518
+ const record_ = _1.record_;
1519
+ const arguments_ = _1.arguments_;
1515
1520
  return ff_compiler_Syntax.ECopy(at_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variants_, name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1516
1521
  return name_
1517
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_), ff_core_List.List_map(arguments_, ((f_) => {
1522
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, true), ff_core_List.List_map(arguments_, ((f_) => {
1518
1523
  {
1519
1524
  const _1 = f_;
1520
1525
  {
1521
1526
  const _c = _1;
1522
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1527
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
1523
1528
  }
1524
1529
  }
1525
1530
  })))
1526
1531
  return
1527
1532
  }
1528
- if(term_a.EField) {
1529
- const e_ = term_a;
1533
+ if(_1.EField) {
1534
+ const e_ = _1;
1530
1535
  {
1531
1536
  const _1 = e_;
1532
1537
  {
1533
1538
  const _c = _1;
1534
- return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_), _c.field_)
1539
+ return ff_compiler_Syntax.EField(_c.at_, _c.newtype_, ff_compiler_Resolver.Resolver_resolveTerm(self_, e_.record_, topLevel_, true), _c.field_)
1535
1540
  }
1536
1541
  }
1537
1542
  return
1538
1543
  }
1539
- if(term_a.ELambda) {
1540
- const at_ = term_a.at_;
1541
- const lambdaAt_ = term_a.lambda_.at_;
1542
- const cases_ = term_a.lambda_.cases_;
1544
+ if(_1.ELambda) {
1545
+ const at_ = _1.at_;
1546
+ const lambdaAt_ = _1.lambda_.at_;
1547
+ const cases_ = _1.lambda_.cases_;
1543
1548
  const effect_ = ff_compiler_Resolver.Resolver_makeEffectArgument(self_, lambdaAt_, topLevel_);
1544
1549
  return ff_compiler_Syntax.ELambda(at_, ff_compiler_Syntax.Lambda(lambdaAt_, effect_, ff_core_List.List_map(cases_, ((_w1) => {
1545
1550
  return ff_compiler_Resolver.Resolver_resolveCase(self_, _w1, topLevel_)
1546
1551
  }))))
1547
1552
  return
1548
1553
  }
1549
- if(term_a.EPipe) {
1550
- const at_ = term_a.at_;
1551
- const value_ = term_a.value_;
1552
- const effect_ = term_a.effect_;
1553
- const function_ = term_a.function_;
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_))
1555
- }
1556
- if(term_a.ECall && term_a.target_.DynamicCall) {
1557
- const at_ = term_a.at_;
1558
- const target_ = term_a.target_;
1559
- const effect_ = term_a.effect_;
1560
- const typeArguments_ = term_a.typeArguments_;
1561
- const arguments_ = term_a.arguments_;
1562
- const dictionaries_ = term_a.dictionaries_;
1554
+ if(_1.EPipe) {
1555
+ const at_ = _1.at_;
1556
+ const value_ = _1.value_;
1557
+ const effect_ = _1.effect_;
1558
+ const function_ = _1.function_;
1559
+ return ff_compiler_Syntax.EPipe(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, function_, topLevel_, false))
1560
+ }
1561
+ if(_1.ECall && _1.target_.DynamicCall) {
1562
+ const at_ = _1.at_;
1563
+ const target_ = _1.target_;
1564
+ const effect_ = _1.effect_;
1565
+ const typeArguments_ = _1.typeArguments_;
1566
+ const arguments_ = _1.arguments_;
1567
+ const dictionaries_ = _1.dictionaries_;
1563
1568
  return ff_compiler_Syntax.ECall(at_, (((_c) => {
1564
- return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_), _c.tailCall_)
1569
+ return ff_compiler_Syntax.DynamicCall(ff_compiler_Resolver.Resolver_resolveTerm(self_, target_.function_, topLevel_, false), _c.tailCall_)
1565
1570
  }))(target_), ff_compiler_Resolver.Resolver_resolveType(self_, effect_, topLevel_), ff_core_List.List_map(typeArguments_, ((_w1) => {
1566
1571
  return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1567
1572
  })), ff_core_List.List_map(arguments_, ((a_) => {
@@ -1569,31 +1574,31 @@ return ff_compiler_Resolver.Resolver_resolveType(self_, _w1, topLevel_)
1569
1574
  const _1 = a_;
1570
1575
  {
1571
1576
  const _c = _1;
1572
- return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_))
1577
+ return ff_compiler_Syntax.Argument(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, a_.value_, topLevel_, false))
1573
1578
  }
1574
1579
  }
1575
1580
  })), dictionaries_)
1576
1581
  return
1577
1582
  }
1578
- if(term_a.ECall && term_a.target_.StaticCall) {
1583
+ if(_1.ECall && _1.target_.StaticCall) {
1579
1584
  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)})
1580
1585
  }
1581
- if(term_a.ERecord) {
1582
- const at_ = term_a.at_;
1583
- const fields_ = term_a.fields_;
1586
+ if(_1.ERecord) {
1587
+ const at_ = _1.at_;
1588
+ const fields_ = _1.fields_;
1584
1589
  return ff_compiler_Syntax.ERecord(at_, ff_core_List.List_map(fields_, ((f_) => {
1585
1590
  {
1586
1591
  const _1 = f_;
1587
1592
  {
1588
1593
  const _c = _1;
1589
- return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_))
1594
+ return ff_compiler_Syntax.Field(_c.at_, _c.name_, ff_compiler_Resolver.Resolver_resolveTerm(self_, f_.value_, topLevel_, false))
1590
1595
  }
1591
1596
  }
1592
1597
  })))
1593
1598
  return
1594
1599
  }
1595
- if(term_a.EWildcard) {
1596
- const e_ = term_a;
1600
+ if(_1.EWildcard) {
1601
+ const e_ = _1;
1597
1602
  if((e_.index_ === 0)) {
1598
1603
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(e_.at_, "Unbound wildcard"), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1599
1604
  };
@@ -1606,10 +1611,10 @@ return ff_compiler_Syntax.EWildcard(_c.at_, _c.index_)
1606
1611
  }
1607
1612
  return
1608
1613
  }
1609
- if(term_a.EFunctions) {
1610
- const at_ = term_a.at_;
1611
- const functions_ = term_a.functions_;
1612
- const body_ = term_a.body_;
1614
+ if(_1.EFunctions) {
1615
+ const at_ = _1.at_;
1616
+ const functions_ = _1.functions_;
1617
+ const body_ = _1.body_;
1613
1618
  const functionMap_ = ff_core_List.List_toMap(ff_core_List.List_map(ff_core_List.List_map(functions_, ((_w1) => {
1614
1619
  return _w1.signature_.name_
1615
1620
  })), ((name_) => {
@@ -1625,11 +1630,11 @@ return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, fu
1625
1630
  }))(self_);
1626
1631
  return ff_compiler_Syntax.EFunctions(at_, ff_core_List.List_map(functions_, ((_w1) => {
1627
1632
  return ff_compiler_Resolver.Resolver_resolveFunctionDefinition(self2_, _w1, topLevel_, false)
1628
- })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_))
1633
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self2_, body_, topLevel_, false))
1629
1634
  return
1630
1635
  }
1631
- if(term_a.ELet) {
1632
- const e_ = term_a;
1636
+ if(_1.ELet) {
1637
+ const e_ = _1;
1633
1638
  const self2_ = (((_c) => {
1634
1639
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_add(self_.variables_, e_.name_, e_.name_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_add(self_.variableLocations_, e_.name_, e_.at_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1635
1640
  }))(self_);
@@ -1642,34 +1647,35 @@ ff_compiler_LspHook.LspHook_emit(self_.lspHook_, ff_compiler_LspHook.ResolveSymb
1642
1647
  const _1 = e_;
1643
1648
  {
1644
1649
  const _c = _1;
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_))
1650
+ 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_, false), ff_compiler_Resolver.Resolver_resolveTerm(self2_, e_.body_, topLevel_, false))
1646
1651
  }
1647
1652
  }
1648
1653
  return
1649
1654
  }
1650
- if(term_a.ESequential) {
1651
- const at_ = term_a.at_;
1652
- const before_ = term_a.before_;
1653
- const after_ = term_a.after_;
1654
- return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_))
1655
+ if(_1.ESequential) {
1656
+ const at_ = _1.at_;
1657
+ const before_ = _1.before_;
1658
+ const after_ = _1.after_;
1659
+ return ff_compiler_Syntax.ESequential(at_, ff_compiler_Resolver.Resolver_resolveTerm(self_, before_, topLevel_, false), ff_compiler_Resolver.Resolver_resolveTerm(self_, after_, topLevel_, false))
1655
1660
  }
1656
- if(term_a.EAssign) {
1657
- const at_ = term_a.at_;
1658
- const operator_ = term_a.operator_;
1659
- const variable_ = term_a.variable_;
1660
- const value_ = term_a.value_;
1661
+ if(_1.EAssign) {
1662
+ const at_ = _1.at_;
1663
+ const operator_ = _1.operator_;
1664
+ const variable_ = _1.variable_;
1665
+ const value_ = _1.value_;
1661
1666
  return ff_compiler_Syntax.EAssign(at_, operator_, ff_core_Option.Option_else(ff_core_Map.Map_get(self_.variables_, variable_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
1662
1667
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileError(at_, ("No such variable: " + variable_)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileError)})
1663
- })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_))
1668
+ })), ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
1664
1669
  return
1665
1670
  }
1666
- if(term_a.EAssignField) {
1667
- const at_ = term_a.at_;
1668
- const operator_ = term_a.operator_;
1669
- const record_ = term_a.record_;
1670
- const field_ = term_a.field_;
1671
- const value_ = term_a.value_;
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_))
1671
+ if(_1.EAssignField) {
1672
+ const at_ = _1.at_;
1673
+ const operator_ = _1.operator_;
1674
+ const record_ = _1.record_;
1675
+ const field_ = _1.field_;
1676
+ const value_ = _1.value_;
1677
+ return ff_compiler_Syntax.EAssignField(at_, operator_, ff_compiler_Resolver.Resolver_resolveTerm(self_, record_, topLevel_, false), field_, ff_compiler_Resolver.Resolver_resolveTerm(self_, value_, topLevel_, false))
1678
+ }
1673
1679
  }
1674
1680
  }
1675
1681
 
@@ -1810,7 +1816,7 @@ const _1 = p_;
1810
1816
  {
1811
1817
  const _c = _1;
1812
1818
  return ff_compiler_Syntax.Parameter(_c.at_, _c.mutable_, _c.name_, ff_compiler_Resolver.Resolver_resolveType(self2_, p_.valueType_, topLevel_), ff_core_Option.Option_map(p_.default_, ((_w1) => {
1813
- return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_)
1819
+ return ff_compiler_Resolver.Resolver_resolveTerm(self2_, _w1, topLevel_, false)
1814
1820
  })))
1815
1821
  return
1816
1822
  }
@@ -1857,7 +1863,7 @@ return ff_core_Map.empty_()
1857
1863
  if(pattern_a.PVariable && pattern_a.name_.Some) {
1858
1864
  const at_ = pattern_a.at_;
1859
1865
  const name_ = pattern_a.name_.value_;
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)
1866
+ return ff_core_List.List_toMap([ff_core_Pair.Pair(name_, ff_compiler_Resolver.CaseVariable(at_, name_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1861
1867
  }
1862
1868
  if(pattern_a.PVariable && pattern_a.name_.None) {
1863
1869
  return ff_core_Map.empty_()
@@ -1873,10 +1879,11 @@ return
1873
1879
  }
1874
1880
  if(pattern_a.PVariantAs) {
1875
1881
  const at_ = pattern_a.at_;
1882
+ const variant_ = pattern_a.name_;
1876
1883
  const variableAt_ = pattern_a.variableAt_;
1877
1884
  const variable_ = pattern_a.variable_;
1878
1885
  return ff_core_List.List_toMap(ff_core_List.List_map(ff_core_Option.Option_toList(variable_), ((x_) => {
1879
- return ff_core_Pair.Pair(x_, ff_core_Pair.Pair(variableAt_, x_))
1886
+ return ff_core_Pair.Pair(x_, ff_compiler_Resolver.CaseVariable(variableAt_, x_, ff_core_Option.Some(variant_)))
1880
1887
  })), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1881
1888
  return
1882
1889
  }
@@ -1884,7 +1891,7 @@ if(pattern_a.PAlias) {
1884
1891
  const at_ = pattern_a.at_;
1885
1892
  const pattern_ = pattern_a.pattern_;
1886
1893
  const variable_ = pattern_a.variable_;
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)
1894
+ return ff_core_Map.Map_addAll(ff_core_List.List_toMap([ff_core_Pair.Pair(variable_, ff_compiler_Resolver.CaseVariable(at_, variable_, ff_core_Option.None()))], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), findVariables_(pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1888
1895
  }
1889
1896
  }
1890
1897
  const variableMap_ = ff_core_List.List_foldLeft(ff_core_List.List_map(case_.patterns_, ((pattern_) => {
@@ -1896,27 +1903,27 @@ let guards_ = [];
1896
1903
  const variableMap2_ = ff_core_List.List_foldLeft(case_.guards_, variableMap_, ((variableMap1_, g_) => {
1897
1904
  const self2_ = (((_c) => {
1898
1905
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
1899
- return p_.second_
1906
+ return p_.name_
1900
1907
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap1_, ((_, p_) => {
1901
- return p_.first_
1908
+ return p_.at_
1902
1909
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1903
1910
  }))(self_);
1904
1911
  const guard_ = (((_c) => {
1905
- return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
1912
+ return ff_compiler_Syntax.MatchGuard(_c.at_, ff_compiler_Resolver.Resolver_resolveTerm(self2_, g_.term_, topLevel_, false), ff_compiler_Resolver.Resolver_resolvePattern(self2_, g_.pattern_))
1906
1913
  }))(g_);
1907
1914
  guards_ = [guard_, ...guards_];
1908
1915
  return ff_core_Map.Map_addAll(variableMap1_, findVariables_(guard_.pattern_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
1909
1916
  }));
1910
1917
  const self3_ = (((_c) => {
1911
1918
  return ff_compiler_Resolver.Resolver(ff_core_Map.Map_addAll(self_.variables_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
1912
- return p_.second_
1919
+ return p_.name_
1913
1920
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Map.Map_addAll(self_.variableLocations_, ff_core_Map.Map_mapValues(variableMap2_, ((_, p_) => {
1914
- return p_.first_
1921
+ return p_.at_
1915
1922
  }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), _c.variants_, _c.types_, _c.typeGenerics_, _c.typeLocations_, _c.asyncTypes_, _c.typeParameters_, _c.traits_, _c.traitLocations_, _c.state_, _c.lspHook_)
1916
1923
  }))(self_);
1917
1924
  return ff_compiler_Syntax.MatchCase(case_.at_, ff_core_List.List_map(case_.patterns_, ((_w1) => {
1918
1925
  return ff_compiler_Resolver.Resolver_resolvePattern(self_, _w1)
1919
- })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_))
1926
+ })), ff_core_List.List_reverse(guards_), ff_compiler_Resolver.Resolver_resolveTerm(self3_, case_.body_, topLevel_, false))
1920
1927
  }
1921
1928
 
1922
1929
  export async function Resolver_resolvePattern$(self_, pattern_, $task) {
@@ -1990,6 +1997,169 @@ return
1990
1997
  }
1991
1998
  }
1992
1999
 
2000
+ export const ff_core_Any_HasAnyTag$ff_compiler_Resolver_CaseVariable = {
2001
+ anyTag_() {
2002
+ return ff_core_Any.internalAnyTag_((("ff:compiler/Resolver.CaseVariable" + "[") + "]"))
2003
+ },
2004
+ async anyTag_$($task) {
2005
+ return ff_core_Any.internalAnyTag_((("ff:compiler/Resolver.CaseVariable" + "[") + "]"))
2006
+ }
2007
+ };
2008
+
2009
+ export const ff_core_Show_Show$ff_compiler_Resolver_CaseVariable = {
2010
+ show_(value_) {
2011
+ const value_a = value_;
2012
+ {
2013
+ const z_ = value_a;
2014
+ return ((((((("CaseVariable" + "(") + ff_compiler_Syntax.ff_core_Show_Show$ff_compiler_Syntax_Location.show_(z_.at_)) + ", ") + ff_core_Show.ff_core_Show_Show$ff_core_String_String.show_(z_.name_)) + ", ") + ff_core_Option.ff_core_Show_Show$ff_core_Option_Option(ff_core_Show.ff_core_Show_Show$ff_core_String_String).show_(z_.asBound_)) + ")")
2015
+ }
2016
+ },
2017
+ async show_$(value_, $task) {
2018
+ const value_a = value_;
2019
+ {
2020
+ const z_ = value_a;
2021
+ return ((((((("CaseVariable" + "(") + ff_compiler_Syntax.ff_core_Show_Show$ff_compiler_Syntax_Location.show_(z_.at_)) + ", ") + ff_core_Show.ff_core_Show_Show$ff_core_String_String.show_(z_.name_)) + ", ") + ff_core_Option.ff_core_Show_Show$ff_core_Option_Option(ff_core_Show.ff_core_Show_Show$ff_core_String_String).show_(z_.asBound_)) + ")")
2022
+ }
2023
+ }
2024
+ };
2025
+
2026
+ export const ff_core_Equal_Equal$ff_compiler_Resolver_CaseVariable = {
2027
+ equals_(x_, y_) {
2028
+ const x_a = x_;
2029
+ const y_a = y_;
2030
+ if((x_ === y_)) {
2031
+ return true
2032
+ }
2033
+ {
2034
+ return (ff_compiler_Syntax.ff_core_Equal_Equal$ff_compiler_Syntax_Location.equals_(x_.at_, y_.at_) && ((x_.name_ === y_.name_) && ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String).equals_(x_.asBound_, y_.asBound_)))
2035
+ }
2036
+ },
2037
+ async equals_$(x_, y_, $task) {
2038
+ const x_a = x_;
2039
+ const y_a = y_;
2040
+ if((x_ === y_)) {
2041
+ return true
2042
+ }
2043
+ {
2044
+ return (ff_compiler_Syntax.ff_core_Equal_Equal$ff_compiler_Syntax_Location.equals_(x_.at_, y_.at_) && ((x_.name_ === y_.name_) && ff_core_Option.ff_core_Equal_Equal$ff_core_Option_Option(ff_core_Equal.ff_core_Equal_Equal$ff_core_String_String).equals_(x_.asBound_, y_.asBound_)))
2045
+ }
2046
+ }
2047
+ };
1993
2048
 
2049
+ export const ff_core_Ordering_Order$ff_compiler_Resolver_CaseVariable = {
2050
+ compare_(x_, y_) {
2051
+ const x_a = x_;
2052
+ const y_a = y_;
2053
+ if((x_ === y_)) {
2054
+ return ff_core_Ordering.OrderingSame()
2055
+ }
2056
+ {
2057
+ const atOrdering_ = ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_Location.compare_(x_.at_, y_.at_);
2058
+ if((atOrdering_ !== ff_core_Ordering.OrderingSame())) {
2059
+ return atOrdering_
2060
+ } else {
2061
+ const nameOrdering_ = ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String.compare_(x_.name_, y_.name_);
2062
+ if((nameOrdering_ !== ff_core_Ordering.OrderingSame())) {
2063
+ return nameOrdering_
2064
+ } else {
2065
+ const asBoundOrdering_ = ff_core_Option.ff_core_Ordering_Order$ff_core_Option_Option(ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String).compare_(x_.asBound_, y_.asBound_);
2066
+ if((asBoundOrdering_ !== ff_core_Ordering.OrderingSame())) {
2067
+ return asBoundOrdering_
2068
+ } else {
2069
+ return ff_core_Ordering.OrderingSame()
2070
+ }
2071
+ }
2072
+ }
2073
+ return
2074
+ }
2075
+ },
2076
+ async compare_$(x_, y_, $task) {
2077
+ const x_a = x_;
2078
+ const y_a = y_;
2079
+ if((x_ === y_)) {
2080
+ return ff_core_Ordering.OrderingSame()
2081
+ }
2082
+ {
2083
+ const atOrdering_ = ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_Location.compare_(x_.at_, y_.at_);
2084
+ if((atOrdering_ !== ff_core_Ordering.OrderingSame())) {
2085
+ return atOrdering_
2086
+ } else {
2087
+ const nameOrdering_ = ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String.compare_(x_.name_, y_.name_);
2088
+ if((nameOrdering_ !== ff_core_Ordering.OrderingSame())) {
2089
+ return nameOrdering_
2090
+ } else {
2091
+ const asBoundOrdering_ = ff_core_Option.ff_core_Ordering_Order$ff_core_Option_Option(ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String).compare_(x_.asBound_, y_.asBound_);
2092
+ if((asBoundOrdering_ !== ff_core_Ordering.OrderingSame())) {
2093
+ return asBoundOrdering_
2094
+ } else {
2095
+ return ff_core_Ordering.OrderingSame()
2096
+ }
2097
+ }
2098
+ }
2099
+ return
2100
+ }
2101
+ }
2102
+ };
2103
+
2104
+ export const ff_core_Serializable_Serializable$ff_compiler_Resolver_CaseVariable = {
2105
+ serializeUsing_(serialization_, value_) {
2106
+ const serialization_a = serialization_;
2107
+ const value_a = value_;
2108
+ {
2109
+ const v_ = value_a;
2110
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2111
+ ff_core_Serializable.Serialization_autoResize(serialization_, 1);
2112
+ ff_core_Buffer.Buffer_setUint8(serialization_.buffer_, serialization_.offset_, 0);
2113
+ serialization_.offset_ += 1;
2114
+ ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.serializeUsing_(serialization_, v_.at_);
2115
+ ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String.serializeUsing_(serialization_, v_.name_);
2116
+ ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).serializeUsing_(serialization_, v_.asBound_)
2117
+ return
2118
+ }
2119
+ },
2120
+ deserializeUsing_(serialization_) {
2121
+ const variantIndex_ = ff_core_Buffer.Buffer_grabUint8(serialization_.buffer_, serialization_.offset_);
2122
+ serialization_.offset_ += 1;
2123
+ {
2124
+ const _1 = variantIndex_;
2125
+ if(_1 === 0) {
2126
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2127
+ return ff_compiler_Resolver.CaseVariable(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.deserializeUsing_(serialization_), ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String.deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_))
2128
+ }
2129
+ {
2130
+ 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)})
2131
+ }
2132
+ }
2133
+ },
2134
+ async serializeUsing_$(serialization_, value_, $task) {
2135
+ const serialization_a = serialization_;
2136
+ const value_a = value_;
2137
+ {
2138
+ const v_ = value_a;
2139
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2140
+ ff_core_Serializable.Serialization_autoResize(serialization_, 1);
2141
+ ff_core_Buffer.Buffer_setUint8(serialization_.buffer_, serialization_.offset_, 0);
2142
+ serialization_.offset_ += 1;
2143
+ ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.serializeUsing_(serialization_, v_.at_);
2144
+ ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String.serializeUsing_(serialization_, v_.name_);
2145
+ ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).serializeUsing_(serialization_, v_.asBound_)
2146
+ return
2147
+ }
2148
+ },
2149
+ async deserializeUsing_$(serialization_, $task) {
2150
+ const variantIndex_ = ff_core_Buffer.Buffer_grabUint8(serialization_.buffer_, serialization_.offset_);
2151
+ serialization_.offset_ += 1;
2152
+ {
2153
+ const _1 = variantIndex_;
2154
+ if(_1 === 0) {
2155
+ serialization_.checksum_ = ff_core_Int.Int_bitOr(((31 * serialization_.checksum_) + 33), 0);
2156
+ return ff_compiler_Resolver.CaseVariable(ff_compiler_Syntax.ff_core_Serializable_Serializable$ff_compiler_Syntax_Location.deserializeUsing_(serialization_), ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String.deserializeUsing_(serialization_), ff_core_Option.ff_core_Serializable_Serializable$ff_core_Option_Option(ff_core_Serializable.ff_core_Serializable_Serializable$ff_core_String_String).deserializeUsing_(serialization_))
2157
+ }
2158
+ {
2159
+ 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)})
2160
+ }
2161
+ }
2162
+ }
2163
+ };
1994
2164
 
1995
2165