firefly-compiler 0.4.23 → 0.4.25

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 (84) hide show
  1. package/bin/firefly.mjs +2 -0
  2. package/compiler/Builder.ff +14 -1
  3. package/compiler/Compiler.ff +13 -40
  4. package/compiler/Main.ff +15 -1
  5. package/compiler/ModuleCache.ff +160 -0
  6. package/core/Map.ff +8 -0
  7. package/core/Path.ff +4 -0
  8. package/experimental/bidirectional/Bidi.ff +88 -0
  9. package/lsp/Handler.ff +109 -37
  10. package/lsp/LanguageServer.ff +12 -8
  11. package/lsp/TestReferences.ff +3 -1
  12. package/lux/.firefly/package.ff +0 -1
  13. package/output/js/ff/compiler/Builder.mjs +30 -16
  14. package/output/js/ff/compiler/Compiler.mjs +29 -67
  15. package/output/js/ff/compiler/Dependencies.mjs +0 -2
  16. package/output/js/ff/compiler/Deriver.mjs +0 -2
  17. package/output/js/ff/compiler/Dictionaries.mjs +0 -2
  18. package/output/js/ff/compiler/Environment.mjs +0 -2
  19. package/output/js/ff/compiler/Inference.mjs +0 -2
  20. package/output/js/ff/compiler/JsEmitter.mjs +0 -2
  21. package/output/js/ff/compiler/JsImporter.mjs +0 -2
  22. package/output/js/ff/compiler/LspHook.mjs +0 -2
  23. package/output/js/ff/compiler/Main.mjs +8 -8
  24. package/output/js/ff/compiler/ModuleCache.mjs +428 -0
  25. package/output/js/ff/compiler/Parser.mjs +0 -2
  26. package/output/js/ff/compiler/Patterns.mjs +0 -2
  27. package/output/js/ff/compiler/Resolver.mjs +0 -2
  28. package/output/js/ff/compiler/Substitution.mjs +0 -2
  29. package/output/js/ff/compiler/Syntax.mjs +0 -2
  30. package/output/js/ff/compiler/Token.mjs +0 -2
  31. package/output/js/ff/compiler/Tokenizer.mjs +0 -2
  32. package/output/js/ff/compiler/Unification.mjs +0 -2
  33. package/output/js/ff/compiler/Wildcards.mjs +0 -2
  34. package/output/js/ff/compiler/Workspace.mjs +0 -2
  35. package/output/js/ff/core/Any.mjs +0 -2
  36. package/output/js/ff/core/Array.mjs +0 -2
  37. package/output/js/ff/core/AssetSystem.mjs +0 -2
  38. package/output/js/ff/core/Atomic.mjs +0 -2
  39. package/output/js/ff/core/Bool.mjs +0 -2
  40. package/output/js/ff/core/BrowserSystem.mjs +0 -2
  41. package/output/js/ff/core/Buffer.mjs +0 -2
  42. package/output/js/ff/core/BuildSystem.mjs +0 -2
  43. package/output/js/ff/core/Channel.mjs +0 -2
  44. package/output/js/ff/core/Char.mjs +0 -2
  45. package/output/js/ff/core/Core.mjs +0 -2
  46. package/output/js/ff/core/Duration.mjs +0 -2
  47. package/output/js/ff/core/Equal.mjs +0 -2
  48. package/output/js/ff/core/Error.mjs +0 -2
  49. package/output/js/ff/core/FileHandle.mjs +0 -2
  50. package/output/js/ff/core/Float.mjs +0 -2
  51. package/output/js/ff/core/HttpClient.mjs +0 -2
  52. package/output/js/ff/core/Instant.mjs +0 -2
  53. package/output/js/ff/core/Int.mjs +0 -2
  54. package/output/js/ff/core/IntMap.mjs +0 -2
  55. package/output/js/ff/core/JsSystem.mjs +0 -2
  56. package/output/js/ff/core/JsValue.mjs +0 -2
  57. package/output/js/ff/core/Json.mjs +0 -2
  58. package/output/js/ff/core/List.mjs +0 -2
  59. package/output/js/ff/core/Lock.mjs +0 -2
  60. package/output/js/ff/core/Log.mjs +0 -2
  61. package/output/js/ff/core/Map.mjs +16 -2
  62. package/output/js/ff/core/NodeSystem.mjs +0 -2
  63. package/output/js/ff/core/Nothing.mjs +0 -2
  64. package/output/js/ff/core/Option.mjs +0 -2
  65. package/output/js/ff/core/Ordering.mjs +0 -2
  66. package/output/js/ff/core/Pair.mjs +0 -2
  67. package/output/js/ff/core/Path.mjs +12 -2
  68. package/output/js/ff/core/Random.mjs +0 -2
  69. package/output/js/ff/core/RbMap.mjs +0 -2
  70. package/output/js/ff/core/Serializable.mjs +0 -2
  71. package/output/js/ff/core/Set.mjs +0 -2
  72. package/output/js/ff/core/Show.mjs +0 -2
  73. package/output/js/ff/core/SourceLocation.mjs +0 -2
  74. package/output/js/ff/core/Stream.mjs +0 -2
  75. package/output/js/ff/core/String.mjs +0 -2
  76. package/output/js/ff/core/StringMap.mjs +0 -2
  77. package/output/js/ff/core/Task.mjs +0 -2
  78. package/output/js/ff/core/Try.mjs +0 -2
  79. package/output/js/ff/core/Unit.mjs +0 -2
  80. package/package.json +1 -1
  81. package/vscode/README.md +3 -1
  82. package/vscode/client/src/extension.ts +4 -3
  83. package/vscode/package.json +1 -1
  84. package/output/js/ff/core/Box.mjs +0 -114
@@ -14,6 +14,8 @@ import * as ff_compiler_JsEmitter from "../../ff/compiler/JsEmitter.mjs"
14
14
 
15
15
  import * as ff_compiler_LspHook from "../../ff/compiler/LspHook.mjs"
16
16
 
17
+ import * as ff_compiler_ModuleCache from "../../ff/compiler/ModuleCache.mjs"
18
+
17
19
  import * as ff_compiler_Parser from "../../ff/compiler/Parser.mjs"
18
20
 
19
21
  import * as ff_compiler_Resolver from "../../ff/compiler/Resolver.mjs"
@@ -32,8 +34,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
32
34
 
33
35
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
34
36
 
35
- import * as ff_core_Box from "../../ff/core/Box.mjs"
36
-
37
37
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
38
38
 
39
39
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -113,24 +113,24 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
113
113
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
114
114
 
115
115
  // type Compiler
116
- export function Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_, packagePaths_, singleFilePackages_, virtualFiles_, lspHook_, parsedModules_, resolvedModules_, derivedModules_, inferredModules_, emittedModules_, phaseDurationDelta_, phaseDurations_) {
117
- return {emitTarget_, task_, compilerModulePath_, jsOutputPath_, packagePaths_, singleFilePackages_, virtualFiles_, lspHook_, parsedModules_, resolvedModules_, derivedModules_, inferredModules_, emittedModules_, phaseDurationDelta_, phaseDurations_};
116
+ export function Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_, packagePaths_, singleFilePackages_, virtualFiles_, cache_, lspHook_, phaseDurationDelta_, phaseDurations_) {
117
+ return {emitTarget_, task_, compilerModulePath_, jsOutputPath_, packagePaths_, singleFilePackages_, virtualFiles_, cache_, lspHook_, phaseDurationDelta_, phaseDurations_};
118
118
  }
119
119
 
120
- export const coreImports_ = ff_core_List.List_map(["Any", "Array", "AssetSystem", "Atomic", "Bool", "Box", "BrowserSystem", "Buffer", "BuildSystem", "Channel", "Char", "Core", "Duration", "Equal", "Error", "FileHandle", "Float", "HttpClient", "Instant", "Int", "IntMap", "Json", "JsValue", "JsSystem", "List", "Lock", "Log", "Map", "NodeSystem", "Nothing", "Option", "Ordering", "Pair", "Path", "Random", "Serializable", "Set", "Show", "SourceLocation", "Stream", "String", "StringMap", "Task", "Try", "Unit"], ((moduleName_) => {
120
+ export const coreImports_ = ff_core_List.List_map(["Any", "Array", "AssetSystem", "Atomic", "Bool", "BrowserSystem", "Buffer", "BuildSystem", "Channel", "Char", "Core", "Duration", "Equal", "Error", "FileHandle", "Float", "HttpClient", "Instant", "Int", "IntMap", "Json", "JsValue", "JsSystem", "List", "Lock", "Log", "Map", "NodeSystem", "Nothing", "Option", "Ordering", "Pair", "Path", "Random", "Serializable", "Set", "Show", "SourceLocation", "Stream", "String", "StringMap", "Task", "Try", "Unit"], ((moduleName_) => {
121
121
  return ff_compiler_Syntax.DImport(ff_compiler_Syntax.Location("<prelude>", 1, 1), moduleName_, ff_compiler_Syntax.PackagePair("ff", "core"), [], moduleName_)
122
122
  }));
123
123
 
124
- export function make_(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_, virtualFiles_, lspHook_) {
125
- return ff_compiler_Compiler.Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_.packagePaths_, resolvedDependencies_.singleFilePackages_, virtualFiles_, lspHook_, ff_core_Map.empty_(), ff_core_Map.empty_(), ff_core_Map.empty_(), ff_core_Map.empty_(), ff_core_Set.empty_(), 0.0, ff_core_List.List_toArray([]))
124
+ export function make_(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_, virtualFiles_, cache_, lspHook_) {
125
+ return ff_compiler_Compiler.Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_.packagePaths_, resolvedDependencies_.singleFilePackages_, virtualFiles_, cache_, lspHook_, 0.0, ff_core_List.List_toArray([]))
126
126
  }
127
127
 
128
128
  export function fail_(at_, message_) {
129
129
  return ff_core_Core.panic_(((message_ + " ") + ff_compiler_Syntax.Location_show(at_)))
130
130
  }
131
131
 
132
- export async function make_$(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_, virtualFiles_, lspHook_, $task) {
133
- return ff_compiler_Compiler.Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_.packagePaths_, resolvedDependencies_.singleFilePackages_, virtualFiles_, lspHook_, ff_core_Map.empty_(), ff_core_Map.empty_(), ff_core_Map.empty_(), ff_core_Map.empty_(), ff_core_Set.empty_(), 0.0, ff_core_List.List_toArray([]))
132
+ export async function make_$(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_, virtualFiles_, cache_, lspHook_, $task) {
133
+ return ff_compiler_Compiler.Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_, resolvedDependencies_.packagePaths_, resolvedDependencies_.singleFilePackages_, virtualFiles_, cache_, lspHook_, 0.0, ff_core_List.List_toArray([]))
134
134
  }
135
135
 
136
136
  export async function fail_$(at_, message_, $task) {
@@ -163,14 +163,9 @@ return
163
163
  }
164
164
 
165
165
  export function Compiler_parse(self_, packagePair_, moduleName_, importedAt_) {
166
+ return ff_compiler_ModuleCache.ModuleCache_cacheParsedModule(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, ((path_) => {
166
167
  const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
167
- return ff_core_Option.Option_else(ff_core_Map.Map_get(self_.parsedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
168
168
  return ff_compiler_Compiler.Compiler_measure(self_, "Parse", packagePair_, moduleName_, (() => {
169
- const packagePath_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.packagePaths_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), (() => {
170
- return ff_core_Core.panic_(("Internal error - package path missing: " + ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":")))
171
- }));
172
- const file_ = (moduleName_ + ".ff");
173
- const path_ = ff_core_Path.Path_slash(packagePath_, file_);
174
169
  const code_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.virtualFiles_, ff_core_Path.Path_absolute(path_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
175
170
  ff_core_Option.Option_each(importedAt_, ((at_) => {
176
171
  if((!ff_core_Path.Path_exists(path_, false, false, false))) {
@@ -183,14 +178,13 @@ const completionAt_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) &&
183
178
  ? ff_core_Option.Some(self_.lspHook_.at_)
184
179
  : ff_core_Option.None());
185
180
  const tokens_ = ff_compiler_Tokenizer.tokenize_(ff_core_Path.Path_absolute(path_), code_, completionAt_, ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_));
186
- const parser_ = ff_compiler_Parser.make_(packagePair_, file_, tokens_, ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBrowser(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget), self_.lspHook_);
181
+ const parser_ = ff_compiler_Parser.make_(packagePair_, ff_core_Path.Path_base(path_), tokens_, ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBrowser(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget), self_.lspHook_);
187
182
  const module_ = (ff_core_Set.Set_contains(self_.singleFilePackages_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)
188
183
  ? ff_compiler_Parser.Parser_parseModuleWithPackageInfo(parser_).module_
189
184
  : ff_compiler_Parser.Parser_parseModuleWithoutPackageInfo(parser_));
190
185
  const result_ = (((_c) => {
191
186
  return ff_compiler_Syntax.Module(_c.file_, _c.packagePair_, [...ff_compiler_Compiler.coreImports_, ...module_.imports_], _c.types_, _c.traits_, _c.instances_, _c.extends_, _c.lets_, _c.functions_)
192
187
  }))(module_);
193
- self_.parsedModules_ = ff_core_Map.Map_add(self_.parsedModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
194
188
  return result_
195
189
  }))
196
190
  }))
@@ -210,34 +204,27 @@ return ff_compiler_Compiler.Compiler_parse(self_, newPackagePair_, newModuleName
210
204
  }
211
205
 
212
206
  export function Compiler_resolve(self_, packagePair_, moduleName_) {
213
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
214
- return ff_core_Option.Option_else(ff_core_Map.Map_get(self_.resolvedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
207
+ return ff_compiler_ModuleCache.ModuleCache_cacheResolvedModule(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, ((path_) => {
215
208
  return ff_compiler_Compiler.Compiler_measure(self_, "Resolve", packagePair_, moduleName_, (() => {
216
209
  const module_ = ff_compiler_Compiler.Compiler_parse(self_, packagePair_, moduleName_, ff_core_Option.None());
217
210
  const otherModules_ = ff_compiler_Compiler.Compiler_imports(self_, module_);
218
211
  const resolver_ = ff_compiler_Resolver.make_(packagePair_, moduleName_, self_.lspHook_);
219
- const result_ = ff_compiler_Resolver.Resolver_resolveModule(resolver_, module_, otherModules_);
220
- self_.resolvedModules_ = ff_core_Map.Map_add(self_.resolvedModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
221
- return result_
212
+ return ff_compiler_Resolver.Resolver_resolveModule(resolver_, module_, otherModules_)
222
213
  }))
223
214
  }))
224
215
  }
225
216
 
226
217
  export function Compiler_derive(self_, packagePair_, moduleName_) {
227
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
228
- return ff_core_Option.Option_else(ff_core_Map.Map_get(self_.derivedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
218
+ return ff_compiler_ModuleCache.ModuleCache_cacheDerivedModule(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, ((path_) => {
229
219
  return ff_compiler_Compiler.Compiler_measure(self_, "Derive", packagePair_, moduleName_, (() => {
230
220
  const module_ = ff_compiler_Compiler.Compiler_resolve(self_, packagePair_, moduleName_);
231
- const result_ = ff_compiler_Deriver.Deriver_deriveModule(ff_compiler_Deriver.make_(), module_);
232
- self_.derivedModules_ = ff_core_Map.Map_add(self_.derivedModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
233
- return result_
221
+ return ff_compiler_Deriver.Deriver_deriveModule(ff_compiler_Deriver.make_(), module_)
234
222
  }))
235
223
  }))
236
224
  }
237
225
 
238
226
  export function Compiler_infer(self_, packagePair_, moduleName_) {
239
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
240
- return ff_core_Option.Option_else(ff_core_Map.Map_get(self_.inferredModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (() => {
227
+ return ff_compiler_ModuleCache.ModuleCache_cacheInferredModule(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, ((path_) => {
241
228
  return ff_compiler_Compiler.Compiler_measure(self_, "Infer", packagePair_, moduleName_, (() => {
242
229
  const module_ = ff_compiler_Compiler.Compiler_derive(self_, packagePair_, moduleName_);
243
230
  const otherModules_ = ff_core_List.List_map(ff_compiler_Compiler.Compiler_imports(self_, module_), ((i_) => {
@@ -245,20 +232,14 @@ return ff_compiler_Compiler.Compiler_derive(self_, i_.packagePair_, ff_core_Stri
245
232
  }));
246
233
  const inference_ = ff_compiler_Inference.make_([module_, ...otherModules_], self_.lspHook_);
247
234
  const inferredModule_ = ff_compiler_Inference.Inference_inferModule(inference_, module_, otherModules_);
248
- const result_ = ff_compiler_Dictionaries.Dictionaries_processModule(ff_compiler_Dictionaries.make_([module_, ...otherModules_]), inferredModule_, otherModules_);
249
- self_.inferredModules_ = ff_core_Map.Map_add(self_.inferredModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
250
- return result_
235
+ return ff_compiler_Dictionaries.Dictionaries_processModule(ff_compiler_Dictionaries.make_([module_, ...otherModules_]), inferredModule_, otherModules_)
251
236
  }))
252
237
  }))
253
238
  }
254
239
 
255
240
  export function Compiler_emit(self_, packagePair_, moduleName_, isMainModule_) {
256
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
257
- if(ff_core_Set.Set_contains(self_.emittedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)) {
258
-
259
- } else {
241
+ ff_compiler_ModuleCache.ModuleCache_cacheEmittedModule(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, ((path_) => {
260
242
  ff_compiler_Compiler.Compiler_measure(self_, "Emit", packagePair_, moduleName_, (() => {
261
- self_.emittedModules_ = ff_core_Set.Set_add(self_.emittedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
262
243
  const module_ = ff_compiler_Compiler.Compiler_infer(self_, packagePair_, moduleName_);
263
244
  const otherModules_ = ff_core_List.List_map(ff_compiler_Compiler.Compiler_imports(self_, module_), ((i_) => {
264
245
  const newModuleName_ = ff_core_String.String_dropLast(i_.file_, ff_core_String.String_size(".ff"));
@@ -272,7 +253,7 @@ const jsFile_ = ff_core_Path.Path_slash(jsPath_, (moduleName_ + ".mjs"));
272
253
  ff_core_Path.Path_createDirectory(jsPath_, true);
273
254
  return ff_core_Path.Path_writeText(jsFile_, js_)
274
255
  }))
275
- }
256
+ }))
276
257
  }
277
258
 
278
259
  export async function Compiler_measure$(self_, phase_, packagePair_, moduleName_, body_, $task) {
@@ -301,14 +282,9 @@ return
301
282
  }
302
283
 
303
284
  export async function Compiler_parse$(self_, packagePair_, moduleName_, importedAt_, $task) {
285
+ return (await ff_compiler_ModuleCache.ModuleCache_cacheParsedModule$(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, (async (path_, $task) => {
304
286
  const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
305
- return (await ff_core_Option.Option_else$(ff_core_Map.Map_get(self_.parsedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (async ($task) => {
306
287
  return (await ff_compiler_Compiler.Compiler_measure$(self_, "Parse", packagePair_, moduleName_, (async ($task) => {
307
- const packagePath_ = ff_core_Option.Option_else(ff_core_Map.Map_get(self_.packagePaths_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), (() => {
308
- return ff_core_Core.panic_(("Internal error - package path missing: " + ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":")))
309
- }));
310
- const file_ = (moduleName_ + ".ff");
311
- const path_ = (await ff_core_Path.Path_slash$(packagePath_, file_, $task));
312
288
  const code_ = (await ff_core_Option.Option_else$(ff_core_Map.Map_get(self_.virtualFiles_, (await ff_core_Path.Path_absolute$(path_, $task)), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (async ($task) => {
313
289
  (await ff_core_Option.Option_each$(importedAt_, (async (at_, $task) => {
314
290
  if((!(await ff_core_Path.Path_exists$(path_, false, false, false, $task)))) {
@@ -321,14 +297,13 @@ const completionAt_ = ((ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_) &&
321
297
  ? ff_core_Option.Some(self_.lspHook_.at_)
322
298
  : ff_core_Option.None());
323
299
  const tokens_ = ff_compiler_Tokenizer.tokenize_((await ff_core_Path.Path_absolute$(path_, $task)), code_, completionAt_, ff_compiler_LspHook.LspHook_isEnabled(self_.lspHook_));
324
- const parser_ = ff_compiler_Parser.make_(packagePair_, file_, tokens_, ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBrowser(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget), self_.lspHook_);
300
+ const parser_ = ff_compiler_Parser.make_(packagePair_, (await ff_core_Path.Path_base$(path_, $task)), tokens_, ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBrowser(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget), self_.lspHook_);
325
301
  const module_ = (ff_core_Set.Set_contains(self_.singleFilePackages_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)
326
302
  ? ff_compiler_Parser.Parser_parseModuleWithPackageInfo(parser_).module_
327
303
  : ff_compiler_Parser.Parser_parseModuleWithoutPackageInfo(parser_));
328
304
  const result_ = (((_c) => {
329
305
  return ff_compiler_Syntax.Module(_c.file_, _c.packagePair_, [...ff_compiler_Compiler.coreImports_, ...module_.imports_], _c.types_, _c.traits_, _c.instances_, _c.extends_, _c.lets_, _c.functions_)
330
306
  }))(module_);
331
- self_.parsedModules_ = ff_core_Map.Map_add(self_.parsedModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
332
307
  return result_
333
308
  }), $task))
334
309
  }), $task))
@@ -348,34 +323,27 @@ return (await ff_compiler_Compiler.Compiler_parse$(self_, newPackagePair_, newMo
348
323
  }
349
324
 
350
325
  export async function Compiler_resolve$(self_, packagePair_, moduleName_, $task) {
351
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
352
- return (await ff_core_Option.Option_else$(ff_core_Map.Map_get(self_.resolvedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (async ($task) => {
326
+ return (await ff_compiler_ModuleCache.ModuleCache_cacheResolvedModule$(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, (async (path_, $task) => {
353
327
  return (await ff_compiler_Compiler.Compiler_measure$(self_, "Resolve", packagePair_, moduleName_, (async ($task) => {
354
328
  const module_ = (await ff_compiler_Compiler.Compiler_parse$(self_, packagePair_, moduleName_, ff_core_Option.None(), $task));
355
329
  const otherModules_ = (await ff_compiler_Compiler.Compiler_imports$(self_, module_, $task));
356
330
  const resolver_ = ff_compiler_Resolver.make_(packagePair_, moduleName_, self_.lspHook_);
357
- const result_ = ff_compiler_Resolver.Resolver_resolveModule(resolver_, module_, otherModules_);
358
- self_.resolvedModules_ = ff_core_Map.Map_add(self_.resolvedModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
359
- return result_
331
+ return ff_compiler_Resolver.Resolver_resolveModule(resolver_, module_, otherModules_)
360
332
  }), $task))
361
333
  }), $task))
362
334
  }
363
335
 
364
336
  export async function Compiler_derive$(self_, packagePair_, moduleName_, $task) {
365
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
366
- return (await ff_core_Option.Option_else$(ff_core_Map.Map_get(self_.derivedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (async ($task) => {
337
+ return (await ff_compiler_ModuleCache.ModuleCache_cacheDerivedModule$(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, (async (path_, $task) => {
367
338
  return (await ff_compiler_Compiler.Compiler_measure$(self_, "Derive", packagePair_, moduleName_, (async ($task) => {
368
339
  const module_ = (await ff_compiler_Compiler.Compiler_resolve$(self_, packagePair_, moduleName_, $task));
369
- const result_ = ff_compiler_Deriver.Deriver_deriveModule(ff_compiler_Deriver.make_(), module_);
370
- self_.derivedModules_ = ff_core_Map.Map_add(self_.derivedModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
371
- return result_
340
+ return ff_compiler_Deriver.Deriver_deriveModule(ff_compiler_Deriver.make_(), module_)
372
341
  }), $task))
373
342
  }), $task))
374
343
  }
375
344
 
376
345
  export async function Compiler_infer$(self_, packagePair_, moduleName_, $task) {
377
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
378
- return (await ff_core_Option.Option_else$(ff_core_Map.Map_get(self_.inferredModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String), (async ($task) => {
346
+ return (await ff_compiler_ModuleCache.ModuleCache_cacheInferredModule$(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, (async (path_, $task) => {
379
347
  return (await ff_compiler_Compiler.Compiler_measure$(self_, "Infer", packagePair_, moduleName_, (async ($task) => {
380
348
  const module_ = (await ff_compiler_Compiler.Compiler_derive$(self_, packagePair_, moduleName_, $task));
381
349
  const otherModules_ = (await ff_core_List.List_map$((await ff_compiler_Compiler.Compiler_imports$(self_, module_, $task)), (async (i_, $task) => {
@@ -383,20 +351,14 @@ return (await ff_compiler_Compiler.Compiler_derive$(self_, i_.packagePair_, ff_c
383
351
  }), $task));
384
352
  const inference_ = ff_compiler_Inference.make_([module_, ...otherModules_], self_.lspHook_);
385
353
  const inferredModule_ = ff_compiler_Inference.Inference_inferModule(inference_, module_, otherModules_);
386
- const result_ = ff_compiler_Dictionaries.Dictionaries_processModule(ff_compiler_Dictionaries.make_([module_, ...otherModules_]), inferredModule_, otherModules_);
387
- self_.inferredModules_ = ff_core_Map.Map_add(self_.inferredModules_, ((packageName_ + ":") + moduleName_), result_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
388
- return result_
354
+ return ff_compiler_Dictionaries.Dictionaries_processModule(ff_compiler_Dictionaries.make_([module_, ...otherModules_]), inferredModule_, otherModules_)
389
355
  }), $task))
390
356
  }), $task))
391
357
  }
392
358
 
393
359
  export async function Compiler_emit$(self_, packagePair_, moduleName_, isMainModule_, $task) {
394
- const packageName_ = ff_compiler_Syntax.PackagePair_groupName(packagePair_, ":");
395
- if(ff_core_Set.Set_contains(self_.emittedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)) {
396
-
397
- } else {
360
+ (await ff_compiler_ModuleCache.ModuleCache_cacheEmittedModule$(self_.cache_, self_.packagePaths_, packagePair_, moduleName_, (async (path_, $task) => {
398
361
  (await ff_compiler_Compiler.Compiler_measure$(self_, "Emit", packagePair_, moduleName_, (async ($task) => {
399
- self_.emittedModules_ = ff_core_Set.Set_add(self_.emittedModules_, ((packageName_ + ":") + moduleName_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
400
362
  const module_ = (await ff_compiler_Compiler.Compiler_infer$(self_, packagePair_, moduleName_, $task));
401
363
  const otherModules_ = (await ff_core_List.List_map$((await ff_compiler_Compiler.Compiler_imports$(self_, module_, $task)), (async (i_, $task) => {
402
364
  const newModuleName_ = ff_core_String.String_dropLast(i_.file_, ff_core_String.String_size(".ff"));
@@ -410,7 +372,7 @@ const jsFile_ = (await ff_core_Path.Path_slash$(jsPath_, (moduleName_ + ".mjs"),
410
372
  (await ff_core_Path.Path_createDirectory$(jsPath_, true, $task));
411
373
  return (await ff_core_Path.Path_writeText$(jsFile_, js_, $task))
412
374
  }), $task))
413
- }
375
+ }), $task))
414
376
  }
415
377
 
416
378
 
@@ -22,8 +22,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
22
22
 
23
23
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
24
24
 
25
- import * as ff_core_Box from "../../ff/core/Box.mjs"
26
-
27
25
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
28
26
 
29
27
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -14,8 +14,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
14
14
 
15
15
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
16
16
 
17
- import * as ff_core_Box from "../../ff/core/Box.mjs"
18
-
19
17
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
20
18
 
21
19
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -18,8 +18,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
18
18
 
19
19
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
20
20
 
21
- import * as ff_core_Box from "../../ff/core/Box.mjs"
22
-
23
21
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
24
22
 
25
23
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -14,8 +14,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
14
14
 
15
15
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
16
16
 
17
- import * as ff_core_Box from "../../ff/core/Box.mjs"
18
-
19
17
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
20
18
 
21
19
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -22,8 +22,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
22
22
 
23
23
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
24
24
 
25
- import * as ff_core_Box from "../../ff/core/Box.mjs"
26
-
27
25
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
28
26
 
29
27
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -18,8 +18,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
18
18
 
19
19
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
20
20
 
21
- import * as ff_core_Box from "../../ff/core/Box.mjs"
22
-
23
21
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
24
22
 
25
23
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -14,8 +14,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
14
14
 
15
15
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
16
16
 
17
- import * as ff_core_Box from "../../ff/core/Box.mjs"
18
-
19
17
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
20
18
 
21
19
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -18,8 +18,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
18
18
 
19
19
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
20
20
 
21
- import * as ff_core_Box from "../../ff/core/Box.mjs"
22
-
23
21
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
24
22
 
25
23
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -14,6 +14,8 @@ import * as ff_compiler_JsEmitter from "../../ff/compiler/JsEmitter.mjs"
14
14
 
15
15
  import * as ff_compiler_LspHook from "../../ff/compiler/LspHook.mjs"
16
16
 
17
+ import * as ff_compiler_ModuleCache from "../../ff/compiler/ModuleCache.mjs"
18
+
17
19
  import * as ff_compiler_Parser from "../../ff/compiler/Parser.mjs"
18
20
 
19
21
  import * as ff_compiler_Resolver from "../../ff/compiler/Resolver.mjs"
@@ -34,8 +36,6 @@ import * as ff_core_Atomic from "../../ff/core/Atomic.mjs"
34
36
 
35
37
  import * as ff_core_Bool from "../../ff/core/Bool.mjs"
36
38
 
37
- import * as ff_core_Box from "../../ff/core/Box.mjs"
38
-
39
39
  import * as ff_core_BrowserSystem from "../../ff/core/BrowserSystem.mjs"
40
40
 
41
41
  import * as ff_core_Buffer from "../../ff/core/Buffer.mjs"
@@ -173,7 +173,7 @@ return "executable"
173
173
  }))(emitTarget_);
174
174
  ff_compiler_Builder.build_(system_, emitTarget_, mainPackagePair_, mainFile_, (((_c) => {
175
175
  return ff_compiler_Dependencies.ResolvedDependencies(_c.mainPackagePair_, _c.packages_, fixedPackagePaths_, _c.singleFilePackages_)
176
- }))(resolvedDependencies_), compilerModulePath_, ff_core_Path.Path_slash(ff_core_NodeSystem.NodeSystem_path(system_, ".firefly"), "temporary"), ff_core_Path.Path_path(ff_core_Path.Path_path(ff_core_NodeSystem.NodeSystem_path(system_, ".firefly"), "output"), targetName_), false)
176
+ }))(resolvedDependencies_), compilerModulePath_, ff_core_Path.Path_slash(ff_core_NodeSystem.NodeSystem_path(system_, ".firefly"), "temporary"), ff_core_Path.Path_path(ff_core_Path.Path_path(ff_core_NodeSystem.NodeSystem_path(system_, ".firefly"), "output"), targetName_), false, ff_compiler_ModuleCache.empty_(0))
177
177
  }
178
178
  function runCommand_(command_) {
179
179
  const command_a = command_;
@@ -212,7 +212,7 @@ return
212
212
  }
213
213
  if(command_a.CheckCommand) {
214
214
  const filePath_ = command_a.filePath_;
215
- const errors_ = ff_compiler_Builder.check_(system_, fireflyPath_, ff_core_NodeSystem.NodeSystem_path(system_, filePath_), ff_core_Option.None(), ff_core_Map.empty_(), ff_compiler_LspHook.disabled_(), true);
215
+ const errors_ = ff_compiler_Builder.check_(system_, fireflyPath_, ff_core_NodeSystem.NodeSystem_path(system_, filePath_), ff_core_Option.None(), ff_core_Map.empty_(), ff_compiler_ModuleCache.empty_(1), 0, ff_compiler_LspHook.disabled_(), true, false);
216
216
  if((!ff_core_List.List_isEmpty(errors_))) {
217
217
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileErrors(ff_core_List.List_distinct(errors_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_CompileError)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileErrors)})
218
218
  }
@@ -220,7 +220,7 @@ return
220
220
  }
221
221
  if(command_a.BootstrapCommand) {
222
222
  const workingDirectory_ = ff_core_NodeSystem.NodeSystem_path(system_, ".");
223
- ff_compiler_Builder.build_(system_, ff_compiler_JsEmitter.EmitNode(), ff_compiler_Syntax.PackagePair("ff", "compiler"), "Main", ff_compiler_Dependencies.ResolvedDependencies(ff_compiler_Syntax.PackagePair("ff", "compiler"), ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toMap([ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "compiler"), ff_core_Path.Path_slash(workingDirectory_, "compiler")), ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "core"), ff_core_Path.Path_slash(workingDirectory_, "core"))], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toSet([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)), ff_core_Option.None(), ff_core_Path.Path_slash(ff_core_Path.Path_slash(workingDirectory_, "output"), "temporary"), ff_core_Path.Path_slash(ff_core_Path.Path_slash(workingDirectory_, "output"), "js"), true)
223
+ ff_compiler_Builder.build_(system_, ff_compiler_JsEmitter.EmitNode(), ff_compiler_Syntax.PackagePair("ff", "compiler"), "Main", ff_compiler_Dependencies.ResolvedDependencies(ff_compiler_Syntax.PackagePair("ff", "compiler"), ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toMap([ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "compiler"), ff_core_Path.Path_slash(workingDirectory_, "compiler")), ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "core"), ff_core_Path.Path_slash(workingDirectory_, "core"))], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toSet([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)), ff_core_Option.None(), ff_core_Path.Path_slash(ff_core_Path.Path_slash(workingDirectory_, "output"), "temporary"), ff_core_Path.Path_slash(ff_core_Path.Path_slash(workingDirectory_, "output"), "js"), true, ff_compiler_ModuleCache.empty_(0))
224
224
  return
225
225
  }
226
226
  }
@@ -420,7 +420,7 @@ return "executable"
420
420
  }))(emitTarget_);
421
421
  (await ff_compiler_Builder.build_$(system_, emitTarget_, mainPackagePair_, mainFile_, (((_c) => {
422
422
  return ff_compiler_Dependencies.ResolvedDependencies(_c.mainPackagePair_, _c.packages_, fixedPackagePaths_, _c.singleFilePackages_)
423
- }))(resolvedDependencies_), compilerModulePath_, (await ff_core_Path.Path_slash$((await ff_core_NodeSystem.NodeSystem_path$(system_, ".firefly", $task)), "temporary", $task)), (await ff_core_Path.Path_path$((await ff_core_Path.Path_path$((await ff_core_NodeSystem.NodeSystem_path$(system_, ".firefly", $task)), "output", $task)), targetName_, $task)), false, $task))
423
+ }))(resolvedDependencies_), compilerModulePath_, (await ff_core_Path.Path_slash$((await ff_core_NodeSystem.NodeSystem_path$(system_, ".firefly", $task)), "temporary", $task)), (await ff_core_Path.Path_path$((await ff_core_Path.Path_path$((await ff_core_NodeSystem.NodeSystem_path$(system_, ".firefly", $task)), "output", $task)), targetName_, $task)), false, ff_compiler_ModuleCache.empty_(0), $task))
424
424
  }
425
425
  async function runCommand_$(command_, $task) {
426
426
  const command_a = command_;
@@ -459,7 +459,7 @@ return
459
459
  }
460
460
  if(command_a.CheckCommand) {
461
461
  const filePath_ = command_a.filePath_;
462
- const errors_ = (await ff_compiler_Builder.check_$(system_, fireflyPath_, (await ff_core_NodeSystem.NodeSystem_path$(system_, filePath_, $task)), ff_core_Option.None(), ff_core_Map.empty_(), ff_compiler_LspHook.disabled_(), true, $task));
462
+ const errors_ = (await ff_compiler_Builder.check_$(system_, fireflyPath_, (await ff_core_NodeSystem.NodeSystem_path$(system_, filePath_, $task)), ff_core_Option.None(), ff_core_Map.empty_(), ff_compiler_ModuleCache.empty_(1), 0, ff_compiler_LspHook.disabled_(), true, false, $task));
463
463
  if((!ff_core_List.List_isEmpty(errors_))) {
464
464
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_compiler_Syntax.CompileErrors(ff_core_List.List_distinct(errors_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_CompileError)), ff_compiler_Syntax.ff_core_Any_HasAnyTag$ff_compiler_Syntax_CompileErrors)})
465
465
  }
@@ -467,7 +467,7 @@ return
467
467
  }
468
468
  if(command_a.BootstrapCommand) {
469
469
  const workingDirectory_ = (await ff_core_NodeSystem.NodeSystem_path$(system_, ".", $task));
470
- (await ff_compiler_Builder.build_$(system_, ff_compiler_JsEmitter.EmitNode(), ff_compiler_Syntax.PackagePair("ff", "compiler"), "Main", ff_compiler_Dependencies.ResolvedDependencies(ff_compiler_Syntax.PackagePair("ff", "compiler"), ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toMap([ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "compiler"), (await ff_core_Path.Path_slash$(workingDirectory_, "compiler", $task))), ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "core"), (await ff_core_Path.Path_slash$(workingDirectory_, "core", $task)))], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toSet([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)), ff_core_Option.None(), (await ff_core_Path.Path_slash$((await ff_core_Path.Path_slash$(workingDirectory_, "output", $task)), "temporary", $task)), (await ff_core_Path.Path_slash$((await ff_core_Path.Path_slash$(workingDirectory_, "output", $task)), "js", $task)), true, $task))
470
+ (await ff_compiler_Builder.build_$(system_, ff_compiler_JsEmitter.EmitNode(), ff_compiler_Syntax.PackagePair("ff", "compiler"), "Main", ff_compiler_Dependencies.ResolvedDependencies(ff_compiler_Syntax.PackagePair("ff", "compiler"), ff_core_List.List_toMap([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toMap([ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "compiler"), (await ff_core_Path.Path_slash$(workingDirectory_, "compiler", $task))), ff_core_Pair.Pair(ff_compiler_Syntax.PackagePair("ff", "core"), (await ff_core_Path.Path_slash$(workingDirectory_, "core", $task)))], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair), ff_core_List.List_toSet([], ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)), ff_core_Option.None(), (await ff_core_Path.Path_slash$((await ff_core_Path.Path_slash$(workingDirectory_, "output", $task)), "temporary", $task)), (await ff_core_Path.Path_slash$((await ff_core_Path.Path_slash$(workingDirectory_, "output", $task)), "js", $task)), true, ff_compiler_ModuleCache.empty_(0), $task))
471
471
  return
472
472
  }
473
473
  }