firefly-compiler 0.4.30 → 0.4.32

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 (94) hide show
  1. package/bin/Release.ff +6 -0
  2. package/compiler/Builder.ff +15 -8
  3. package/compiler/Compiler.ff +13 -8
  4. package/compiler/Dependencies.ff +24 -17
  5. package/compiler/DependencyLock.ff +17 -0
  6. package/compiler/Deriver.ff +2 -1
  7. package/compiler/Dictionaries.ff +4 -4
  8. package/compiler/Environment.ff +3 -3
  9. package/compiler/Inference.ff +38 -8
  10. package/compiler/JsEmitter.ff +2 -2
  11. package/compiler/JsImporter.ff +2 -2
  12. package/compiler/LspHook.ff +2 -2
  13. package/compiler/Main.ff +22 -8
  14. package/compiler/ModuleCache.ff +6 -6
  15. package/compiler/Parser.ff +36 -36
  16. package/compiler/Resolver.ff +7 -7
  17. package/compiler/Syntax.ff +1 -1
  18. package/compiler/Tokenizer.ff +2 -3
  19. package/compiler/Unification.ff +3 -4
  20. package/compiler/Wildcards.ff +1 -1
  21. package/core/.firefly/include/package-lock.json +96 -96
  22. package/core/.firefly/include/package.json +1 -1
  23. package/core/Array.ff +2 -2
  24. package/core/Atomic.ff +1 -1
  25. package/core/Buffer.ff +1 -1
  26. package/core/Int.ff +2 -2
  27. package/core/IntMap.ff +4 -4
  28. package/core/Json.ff +5 -5
  29. package/core/List.ff +15 -15
  30. package/core/Map.ff +1 -1
  31. package/core/NodeSystem.ff +85 -0
  32. package/core/Option.ff +10 -3
  33. package/core/Random.ff +1 -1
  34. package/core/RbMap.ff +1 -1
  35. package/core/Serializable.ff +2 -2
  36. package/core/Set.ff +2 -2
  37. package/core/Stream.ff +4 -4
  38. package/core/StringMap.ff +4 -4
  39. package/experimental/random/Index.ff +53 -0
  40. package/experimental/random/MapTest.ff +2 -2
  41. package/experimental/random/Process.ff +120 -0
  42. package/experimental/random/RunLength.ff +2 -2
  43. package/experimental/random/Symbols.ff +2 -2
  44. package/experimental/random/Units.ff +36 -0
  45. package/lsp/CompletionHandler.ff +3 -6
  46. package/lsp/Handler.ff +45 -25
  47. package/lsp/LanguageServer.ff +13 -3
  48. package/lsp/SymbolHandler.ff +2 -2
  49. package/lsp/TestReferences.ff +3 -3
  50. package/lux/Lux.ff +6 -7
  51. package/output/js/ff/compiler/Builder.mjs +40 -28
  52. package/output/js/ff/compiler/Compiler.mjs +38 -14
  53. package/output/js/ff/compiler/Dependencies.mjs +30 -16
  54. package/output/js/ff/compiler/DependencyLock.mjs +128 -0
  55. package/output/js/ff/compiler/Deriver.mjs +4 -4
  56. package/output/js/ff/compiler/Dictionaries.mjs +8 -8
  57. package/output/js/ff/compiler/Environment.mjs +6 -6
  58. package/output/js/ff/compiler/Inference.mjs +256 -14
  59. package/output/js/ff/compiler/JsEmitter.mjs +4 -4
  60. package/output/js/ff/compiler/JsImporter.mjs +4 -4
  61. package/output/js/ff/compiler/LspHook.mjs +4 -4
  62. package/output/js/ff/compiler/Main.mjs +16 -14
  63. package/output/js/ff/compiler/ModuleCache.mjs +6 -6
  64. package/output/js/ff/compiler/Parser.mjs +72 -72
  65. package/output/js/ff/compiler/Patterns.mjs +2 -2
  66. package/output/js/ff/compiler/Resolver.mjs +14 -14
  67. package/output/js/ff/compiler/Syntax.mjs +2 -2
  68. package/output/js/ff/compiler/Tokenizer.mjs +4 -4
  69. package/output/js/ff/compiler/Unification.mjs +4 -4
  70. package/output/js/ff/compiler/Wildcards.mjs +2 -2
  71. package/output/js/ff/core/Array.mjs +5 -5
  72. package/output/js/ff/core/Atomic.mjs +3 -3
  73. package/output/js/ff/core/Buffer.mjs +3 -3
  74. package/output/js/ff/core/Int.mjs +4 -4
  75. package/output/js/ff/core/IntMap.mjs +9 -9
  76. package/output/js/ff/core/Json.mjs +10 -10
  77. package/output/js/ff/core/List.mjs +31 -31
  78. package/output/js/ff/core/Map.mjs +2 -2
  79. package/output/js/ff/core/NodeSystem.mjs +119 -0
  80. package/output/js/ff/core/Option.mjs +28 -2
  81. package/output/js/ff/core/Random.mjs +2 -2
  82. package/output/js/ff/core/RbMap.mjs +2 -2
  83. package/output/js/ff/core/Serializable.mjs +4 -4
  84. package/output/js/ff/core/Set.mjs +4 -4
  85. package/output/js/ff/core/Stream.mjs +8 -8
  86. package/output/js/ff/core/StringMap.mjs +9 -9
  87. package/output/js/ff/core/Task.mjs +4 -4
  88. package/package.json +1 -1
  89. package/postgresql/Pg.ff +2 -2
  90. package/rpc/Rpc.ff +3 -3
  91. package/vscode/package.json +1 -1
  92. package/webserver/WebServer.ff +2 -2
  93. package/httpserver/.firefly/package.ff +0 -1
  94. package/httpserver/HttpServer.ff +0 -184
@@ -29,7 +29,7 @@ data ParsedTargets(
29
29
  nodeAsync: Option[String]
30
30
  )
31
31
 
32
- make(
32
+ new(
33
33
  packagePair: PackagePair
34
34
  file: String
35
35
  tokens: List[Token]
@@ -151,12 +151,12 @@ extend self: Parser {
151
151
  /* TODO: if(self.package != None && self.current().is(LKeyword) && self.current().rawIs("dependency")) {
152
152
  self.fail(self.current().at(), "Dependencies must be defined in the same file as the package declaration")
153
153
  }*/
154
- let dependencies = Array.make[DDependency]()
154
+ let dependencies = Array.new[DDependency]()
155
155
  while {self.current().is(LKeyword) && self.current().rawIs("dependency")} {
156
156
  dependencies.push(self.parseDependencyDefinition(package.targets))
157
157
  if(!self.current().is(LEnd)) {self.skipSeparator(LSemicolon)}
158
158
  }
159
- let includes = Array.make[DInclude]()
159
+ let includes = Array.new[DInclude]()
160
160
  while {self.current().is(LKeyword) && self.current().rawIs("include")} {
161
161
  includes.push(self.parseIncludeDefinition())
162
162
  if(!self.current().is(LEnd)) {self.skipSeparator(LSemicolon)}
@@ -166,13 +166,13 @@ extend self: Parser {
166
166
  }
167
167
 
168
168
  parseModule(): Module {
169
- let imports = Array.make[DImport]()
170
- let types = Array.make[DType]()
171
- let traits = Array.make[DTrait]()
172
- let instances = Array.make[DInstance]()
173
- let extends = Array.make[DExtend]()
174
- let lets = Array.make[DLet]()
175
- let functions = Array.make[DFunction]()
169
+ let imports = Array.new[DImport]()
170
+ let types = Array.new[DType]()
171
+ let traits = Array.new[DTrait]()
172
+ let instances = Array.new[DInstance]()
173
+ let extends = Array.new[DExtend]()
174
+ let lets = Array.new[DLet]()
175
+ let functions = Array.new[DFunction]()
176
176
  while {!self.current().is(LEnd)} {
177
177
  if(self.current().is(LLower) && (self.ahead().is(LAssign) || self.ahead().is(LColon))) {
178
178
  lets.push(self.parseLetDefinition())
@@ -348,7 +348,7 @@ extend self: Parser {
348
348
  self.skip(LColon)
349
349
  let type = self.parseType()
350
350
  self.rawSkip(LBracketLeft, "{")
351
- let methods = Array.make[DFunction]()
351
+ let methods = Array.new[DFunction]()
352
352
  while {!self.current().is(LBracketRight)} {
353
353
  methods.push(self.parseFunctionDefinition(member = True))
354
354
  if(!self.current().is(LBracketRight)) {self.skipSeparator(LSemicolon)}
@@ -388,7 +388,7 @@ extend self: Parser {
388
388
  self.skip(LColon)
389
389
  let nameToken = self.skip(LUpper)
390
390
  let poly = if(!self.current().rawIs("[")) {Poly([], [])} else {self.parseTypeParameters()}
391
- let constraints = Array.make[Constraint]()
391
+ let constraints = Array.new[Constraint]()
392
392
  while {self.current().is(LColon)} {
393
393
  self.fail(self.current().at(), "Trait constraints is not yet implemented")
394
394
  self.skip(LColon)
@@ -398,10 +398,10 @@ extend self: Parser {
398
398
  ))
399
399
  }
400
400
  let generatorParameters = if(!self.current().rawIs("(")) {[]} else {self.parseFunctionParameters()}
401
- let methodGenerators = Array.make[Pair[String, Lambda]]()
402
- let methodDefaults = Array.make[Pair[String, Lambda]]()
401
+ let methodGenerators = Array.new[Pair[String, Lambda]]()
402
+ let methodDefaults = Array.new[Pair[String, Lambda]]()
403
403
  let methodSignatures = if(!self.current().rawIs("{")) {[]} else {
404
- let signatures = Array.make[Signature]()
404
+ let signatures = Array.new[Signature]()
405
405
  self.rawSkip(LBracketLeft, "{")
406
406
  while {!self.current().is(LBracketRight)} {
407
407
  if(self.lspHook.trackSymbols) {self.lspHook.emit(ParseSymbolBegin)}
@@ -459,7 +459,7 @@ extend self: Parser {
459
459
  let instanceToken = self.rawSkip(LKeyword, "instance")
460
460
  let token = self.skip(LUpper)
461
461
  let poly = if(!self.current().rawIs("[")) {Poly([], [])} else {self.parseTypeParameters()}
462
- let typeArguments = Array.make[Type]()
462
+ let typeArguments = Array.new[Type]()
463
463
  typeArguments.push(TConstructor(token.at(), token.raw(), poly.generics.map {TConstructor(token.at(), _, [])}))
464
464
  self.skip(LColon)
465
465
  let nameToken = self.skip(LUpper)
@@ -473,7 +473,7 @@ extend self: Parser {
473
473
  }
474
474
  let generatorArguments = self.parseFunctionArguments(nameToken.at(), False).first
475
475
  let methods = if(!self.current().rawIs("{")) {[]} else {
476
- let definitions = Array.make[DFunction]()
476
+ let definitions = Array.new[DFunction]()
477
477
  self.rawSkip(LBracketLeft, "{")
478
478
  while {!self.current().is(LBracketRight)} {
479
479
  definitions.push(self.parseFunctionDefinition(member = False))
@@ -527,7 +527,7 @@ extend self: Parser {
527
527
  [Variant(nameToken.at(), nameToken.raw(), [])]
528
528
  } else {
529
529
  self.rawSkip(LBracketLeft, "{")
530
- let variantsBuilder = Array.make[Variant]()
530
+ let variantsBuilder = Array.new[Variant]()
531
531
  while {!self.current().is(LBracketRight)} {
532
532
  if(self.lspHook.trackSymbols) {self.lspHook.emit(ParseSymbolBegin)}
533
533
  let variantNameToken = self.skip(LUpper)
@@ -582,7 +582,7 @@ extend self: Parser {
582
582
 
583
583
  parseImportDefinition(currentPackagePair: PackagePair): DImport {
584
584
  let importToken = self.rawSkip(LKeyword, "import")
585
- let path = Array.make[String]()
585
+ let path = Array.new[String]()
586
586
  while {self.current().is(LLower)} {
587
587
  path.push(self.parseDashedName())
588
588
  self.skip(LDot)
@@ -711,8 +711,8 @@ extend self: Parser {
711
711
 
712
712
  parseTypeParameters(): Poly {
713
713
  self.rawSkip(LBracketLeft, "[")
714
- let parameters = Array.make[String]()
715
- let constraints = Array.make[Constraint]()
714
+ let parameters = Array.new[String]()
715
+ let constraints = Array.new[Constraint]()
716
716
  while {!self.current().is(LBracketRight) && !self.current().is(LSemicolon)} {
717
717
  if(self.ahead().is(LBracketLeft)) {
718
718
  constraints.push(self.parseConstraint())
@@ -735,7 +735,7 @@ extend self: Parser {
735
735
 
736
736
  parseTypeArguments(parenthesis: Bool = False): List[Type] {
737
737
  self.rawSkip(LBracketLeft, if(parenthesis) {"("} else {"["})
738
- let types = Array.make[Type]()
738
+ let types = Array.new[Type]()
739
739
  while {!self.current().is(LBracketRight)} {
740
740
  types.push(self.parseType())
741
741
  if(!self.current().is(LBracketRight)) {self.skip(LComma)}
@@ -745,7 +745,7 @@ extend self: Parser {
745
745
  }
746
746
 
747
747
  parseFunctionParameters(allowMutable: Bool = False): List[Parameter] {
748
- let parameters = Array.make[Parameter]()
748
+ let parameters = Array.new[Parameter]()
749
749
  self.rawSkip(LBracketLeft, "(")
750
750
  while {!self.current().is(LBracketRight)} {
751
751
  let lspTrackSymbols = self.lspHook.trackSymbols && allowMutable
@@ -783,7 +783,7 @@ extend self: Parser {
783
783
  }
784
784
 
785
785
  parseFunctionArguments(callAt: Location, trailing: Bool): Pair[List[Argument], Bool] {
786
- let arguments = Array.make[Argument]()
786
+ let arguments = Array.new[Argument]()
787
787
  if(self.current().rawIs("(")){
788
788
  self.rawSkip(LBracketLeft, "(")
789
789
  while {!self.current().is(LBracketRight)} {
@@ -853,13 +853,13 @@ extend self: Parser {
853
853
  let token = if(colon) {self.skip(LColon)} else {self.rawSkip(LBracketLeft, "{")}
854
854
  if(ignoreGenerateKeyword && self.current().is(LKeyword) && self.current().rawIs("generate")) {self.skip(LKeyword)}
855
855
  let result = if(self.current().is(LPipe)) {
856
- let cases = Array.make[MatchCase]()
856
+ let cases = Array.new[MatchCase]()
857
857
  while {self.current().is(LPipe)} {
858
858
  cases.push(self.parseCase())
859
859
  }
860
860
  cases.toList()
861
861
  } elseIf {self.current().is2(LLower, LWildcard) && self.ahead().is2(LComma, LArrowThick)} {
862
- let parameters = Array.make[MatchPattern]()
862
+ let parameters = Array.new[MatchPattern]()
863
863
  while {!self.current().is(LArrowThick)} {
864
864
  let isVariable = self.current().is(LLower)
865
865
  let parameterToken = if(isVariable) {self.skip(LLower)} else {self.skip(LWildcard)}
@@ -871,7 +871,7 @@ extend self: Parser {
871
871
  [MatchCase(token.at(), parameters.toList(), [], term)]
872
872
  } else {
873
873
  let term = self.parseStatements()
874
- let wildcards = Wildcards.make()
874
+ let wildcards = Wildcards.new()
875
875
  let e = wildcards.fixWildcards(term)
876
876
  let arguments = if(wildcards.seenWildcards != 0) {
877
877
  List.range(wildcards.seenWildcards).map {i => PVariable(token.at(), Some("_w" + (i + 1)))}
@@ -887,14 +887,14 @@ extend self: Parser {
887
887
 
888
888
  parseCase(): MatchCase {
889
889
  let token = self.skip(LPipe)
890
- let patterns = Array.make[MatchPattern]()
890
+ let patterns = Array.new[MatchPattern]()
891
891
  while {!self.current().is3(LArrowThick, LPipe, LBracketRight) && !self.current().rawIs("{")} {
892
892
  patterns.push(self.parsePattern())
893
893
  if(!self.current().is3(LArrowThick, LPipe, LBracketRight) && !self.current().rawIs("{")) {
894
894
  self.skip(LComma)
895
895
  }
896
896
  }
897
- let guards = Array.make[MatchGuard]()
897
+ let guards = Array.new[MatchGuard]()
898
898
  while {self.current().rawIs("{")} {
899
899
  guards.push(self.parseCaseGuard())
900
900
  }
@@ -943,7 +943,7 @@ extend self: Parser {
943
943
  } else {
944
944
  let token = self.skip(LUpper)
945
945
  if(self.current().rawIs("(")) {
946
- let patterns = Array.make[MatchPattern]()
946
+ let patterns = Array.new[MatchPattern]()
947
947
  self.rawSkip(LBracketLeft, "(")
948
948
  while {!self.current().is(LBracketRight)} {
949
949
  let pattern = self.parsePattern()
@@ -1078,7 +1078,7 @@ extend self: Parser {
1078
1078
 
1079
1079
  parseFunctions(): Term {
1080
1080
  let at = self.current().at()
1081
- let functions = Array.make[DFunction]()
1081
+ let functions = Array.new[DFunction]()
1082
1082
  while {self.current().rawIs("function")} {
1083
1083
  if(self.lspHook.trackSymbols) {self.lspHook.emit(ParseSymbolBegin)}
1084
1084
  let functionAt = self.rawSkip(LKeyword, "function").at()
@@ -1254,7 +1254,7 @@ extend self: Parser {
1254
1254
  }
1255
1255
 
1256
1256
  parseRecord(copyAt: Option[Location]): List[Field] {
1257
- let fields = Array.make[Field]()
1257
+ let fields = Array.new[Field]()
1258
1258
  let startBracketAt = self.rawSkip(LBracketLeft, "(").at()
1259
1259
  let startAt = copyAt.else {startBracketAt}
1260
1260
  while {!self.current().is(LBracketRight)} {
@@ -1285,7 +1285,7 @@ extend self: Parser {
1285
1285
  }
1286
1286
 
1287
1287
  parseRecordType(): List[Pair[String, Type]] {
1288
- let fields = Array.make[Pair[String, Type]]()
1288
+ let fields = Array.new[Pair[String, Type]]()
1289
1289
  self.rawSkip(LBracketLeft, "(")
1290
1290
  while {!self.current().is(LBracketRight)} {
1291
1291
  let fieldToken = self.skip(LLower)
@@ -1298,7 +1298,7 @@ extend self: Parser {
1298
1298
  }
1299
1299
 
1300
1300
  parseRecordPattern(): List[Pair[String, MatchPattern]] {
1301
- let fields = Array.make[Pair[String, MatchPattern]]()
1301
+ let fields = Array.new[Pair[String, MatchPattern]]()
1302
1302
  self.rawSkip(LBracketLeft, "(")
1303
1303
  while {!self.current().is(LBracketRight)} {
1304
1304
  let fieldToken = self.skip(LLower)
@@ -1319,7 +1319,7 @@ extend self: Parser {
1319
1319
  | _, [Pair(p, True), ...] =>
1320
1320
  throw(CompileError(p.at, "Invalid pattern: ... is only allowed for the last element in a list"))
1321
1321
  }
1322
- let items = Array.make[Pair[MatchPattern, Bool]]()
1322
+ let items = Array.new[Pair[MatchPattern, Bool]]()
1323
1323
  let at = self.rawSkip(LBracketLeft, "[").at()
1324
1324
  while {!self.current().rawIs("]")} {
1325
1325
  let spread = self.current().is(LDotDotDot)
@@ -1337,7 +1337,7 @@ extend self: Parser {
1337
1337
  }
1338
1338
 
1339
1339
  parseList(): Term {
1340
- let items = Array.make[Pair[Term, Bool]]()
1340
+ let items = Array.new[Pair[Term, Bool]]()
1341
1341
  let at = self.rawSkip(LBracketLeft, "[").at()
1342
1342
  while {!self.current().rawIs("]")} {
1343
1343
  let spread = self.current().is(LDotDotDot)
@@ -26,7 +26,7 @@ data CaseVariable(
26
26
  asBound: Option[String]
27
27
  )
28
28
 
29
- make(packagePair: PackagePair, moduleName: String, lspHook: LspHook): Resolver {
29
+ new(packagePair: PackagePair, moduleName: String, lspHook: LspHook): Resolver {
30
30
  Resolver(
31
31
  variables = [].toMap()
32
32
  variableLocations = [].toMap()
@@ -545,23 +545,23 @@ extend self: Resolver {
545
545
  resolveCase(case: MatchCase, topLevel: Bool): MatchCase {
546
546
  function findVariables(pattern: MatchPattern): Map[String, CaseVariable] {
547
547
  | PString _ =>
548
- Map.empty()
548
+ Map.new()
549
549
  | PInt _ =>
550
- Map.empty()
550
+ Map.new()
551
551
  | PChar _ =>
552
- Map.empty()
552
+ Map.new()
553
553
  | PVariable(at, Some(name)) =>
554
554
  [Pair(name, CaseVariable(at, name, None))].toMap()
555
555
  | PVariable(_, None) =>
556
- Map.empty()
556
+ Map.new()
557
557
  | PVariant(_, _, patterns) =>
558
- patterns.map(findVariables).foldLeft(Map.empty()) {_.addAll(_)}
558
+ patterns.map(findVariables).foldLeft(Map.new()) {_.addAll(_)}
559
559
  | PVariantAs(at, variant, variableAt, variable) =>
560
560
  variable.toList().map {x => Pair(x, CaseVariable(variableAt, x, Some(variant)))}.toMap()
561
561
  | PAlias(at, pattern, variable) =>
562
562
  [Pair(variable, CaseVariable(at, variable, None))].toMap().addAll(findVariables(pattern))
563
563
  }
564
- let variableMap = case.patterns.map(findVariables).foldLeft(Map.empty()) {_.addAll(_)}
564
+ let variableMap = case.patterns.map(findVariables).foldLeft(Map.new()) {_.addAll(_)}
565
565
  mutable guards = []
566
566
  let variableMap2 = case.guards.foldLeft(variableMap) {variableMap1, g =>
567
567
  let self2 = self.Resolver(
@@ -231,7 +231,7 @@ data Version(at: Location, major: Int, minor: Int, patch: Int)
231
231
 
232
232
  extend self: Type {
233
233
  show(shownTypes: List[Type]): String {
234
- mutable seenTypes = Map.empty()
234
+ mutable seenTypes = Map.new()
235
235
  let typeNames = 'a'.codeUnit.to('z'.codeUnit).map {Char(_).toString()}.toStream()
236
236
  function shortenType(qualified: String): String {
237
237
  qualified.reverse().takeWhile {_ != '.'}.reverse()
@@ -7,7 +7,7 @@ tokenize(file: String, code: String, completionAt: Option[Location], attemptFixe
7
7
  let completionLine = completionAt.filter {_.file == file}.map {_.line}.else {-1}
8
8
  let completionColumn = completionAt.filter {_.file == file}.map {_.column}.else {-1}
9
9
 
10
- let tokens = Array.make[Token]()
10
+ let tokens = Array.new[Token]()
11
11
  mutable line = 1
12
12
  mutable lineOffset = 0
13
13
 
@@ -15,7 +15,7 @@ tokenize(file: String, code: String, completionAt: Option[Location], attemptFixe
15
15
  mutable startLineOffset = lineOffset
16
16
 
17
17
  let operatorCharactersString = "!@#$%&/=?+|^~*<>.:-;"
18
- mutable operatorCharacters = Set.empty[Char]()
18
+ mutable operatorCharacters = Set.new[Char]()
19
19
  List.range(operatorCharactersString.size()).map {j =>
20
20
  operatorCharacters = operatorCharacters.add(operatorCharactersString.grab(j))
21
21
  }
@@ -83,7 +83,6 @@ tokenize(file: String, code: String, completionAt: Option[Location], attemptFixe
83
83
  if(i + 1 < code.size() && code.grab(i) == '_') {i += 1}
84
84
  }
85
85
  }
86
- Unit // Think about how to avoid requiring this
87
86
  } else {
88
87
  while {i < code.size() && (code.grab(i) == ' ' || code.grab(i) == '\t' || code.grab(i) == '\r')} {i += 1}
89
88
  }
@@ -27,11 +27,11 @@ fail[T](at: Location, message: String): T {
27
27
  throw(CompileError(at, message))
28
28
  }
29
29
 
30
- make(modules: List[Module], attemptFixes: Bool): Unification {
30
+ new(modules: List[Module], attemptFixes: Bool): Unification {
31
31
 
32
32
  Unification(
33
- Map.empty()
34
- Map.empty()
33
+ Map.new()
34
+ Map.new()
35
35
  3 // To avoid collision with the parser and resolver
36
36
  modules.flatMap {module =>
37
37
  let moduleName = module.file.dropLast(".ff".size())
@@ -173,7 +173,6 @@ extend self: Unification {
173
173
  generics1.dropLast().zip(generics2.dropLast()).each {| Pair(t3, t4) => self.unify(at, t3, t4)}
174
174
  generics1.takeLast().zip(generics2.takeLast()).each {| Pair(t3, t4) => self.unify(at, t3, t4)}
175
175
  }
176
- Unit // TODO: Think about how to avoid writing this
177
176
  } else {
178
177
  generics1.zip(generics2).each {| Pair(t1, t2) => self.unify(at, t1, t2) }
179
178
  }
@@ -2,7 +2,7 @@ import Syntax
2
2
 
3
3
  class Wildcards(mutable seenWildcards : Int)
4
4
 
5
- make(): Wildcards {
5
+ new(): Wildcards {
6
6
  Wildcards(0)
7
7
  }
8
8