firefly-compiler 0.5.79 → 0.5.80

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 (105) hide show
  1. package/compiler/Builder.ff +31 -39
  2. package/compiler/Compiler.ff +14 -4
  3. package/compiler/DevelopMode.ff +406 -0
  4. package/compiler/Main.ff +73 -53
  5. package/compiler/ModuleCache.ff +5 -5
  6. package/core/.firefly/include/package.json +1 -1
  7. package/core/BuildSystem.ff +82 -11
  8. package/core/NodeSystem.ff +47 -30
  9. package/core/Path.ff +7 -2
  10. package/experimental/proxy/Main.ff +60 -0
  11. package/experimental/proxy/Runner.ff +11 -0
  12. package/experimental/proxy/Tcp.ff +162 -0
  13. package/experimental/random/Superdigit.ff +18 -0
  14. package/experimental/terrain/Main.ff +40 -0
  15. package/experimental/terrain/Terrain.ff +97 -0
  16. package/experimental/terrain/Terrain2.ff +109 -0
  17. package/fireflysite/Main.ff +0 -1
  18. package/fireflysite/assets/markdown/reference/statements-and-expressions.md +1 -1
  19. package/lsp/CompletionHandler.ff +2 -2
  20. package/output/js/ff/compiler/Builder.mjs +24 -48
  21. package/output/js/ff/compiler/Builder.mjs.map +7 -11
  22. package/output/js/ff/compiler/Compiler.mjs +66 -12
  23. package/output/js/ff/compiler/Compiler.mjs.map +18 -14
  24. package/output/js/ff/compiler/Dependencies.mjs.map +2 -2
  25. package/output/js/ff/compiler/DependencyLock.mjs.map +1 -1
  26. package/output/js/ff/compiler/Deriver.mjs.map +1 -1
  27. package/output/js/ff/compiler/DevelopMode.mjs +1049 -0
  28. package/output/js/ff/compiler/DevelopMode.mjs.map +183 -0
  29. package/output/js/ff/compiler/Dictionaries.mjs.map +1 -1
  30. package/output/js/ff/compiler/Environment.mjs.map +1 -1
  31. package/output/js/ff/compiler/Inference.mjs.map +1 -1
  32. package/output/js/ff/compiler/JsEmitter.mjs.map +1 -1
  33. package/output/js/ff/compiler/JsImporter.mjs.map +1 -1
  34. package/output/js/ff/compiler/LspHook.mjs.map +1 -1
  35. package/output/js/ff/compiler/Main.mjs +256 -105
  36. package/output/js/ff/compiler/Main.mjs.map +43 -38
  37. package/output/js/ff/compiler/ModuleCache.mjs +12 -8
  38. package/output/js/ff/compiler/ModuleCache.mjs.map +4 -3
  39. package/output/js/ff/compiler/Parser.mjs.map +1 -1
  40. package/output/js/ff/compiler/Patterns.mjs.map +1 -1
  41. package/output/js/ff/compiler/Resolver.mjs.map +1 -1
  42. package/output/js/ff/compiler/SourceMap.mjs.map +1 -1
  43. package/output/js/ff/compiler/Substitution.mjs.map +1 -1
  44. package/output/js/ff/compiler/Syntax.mjs.map +1 -1
  45. package/output/js/ff/compiler/Token.mjs.map +1 -1
  46. package/output/js/ff/compiler/Tokenizer.mjs.map +1 -1
  47. package/output/js/ff/compiler/Unification.mjs.map +1 -1
  48. package/output/js/ff/compiler/Wildcards.mjs.map +1 -1
  49. package/output/js/ff/compiler/Workspace.mjs.map +1 -1
  50. package/output/js/ff/core/Any.mjs.map +1 -1
  51. package/output/js/ff/core/Array.mjs.map +1 -1
  52. package/output/js/ff/core/AssetSystem.mjs.map +1 -1
  53. package/output/js/ff/core/Atomic.mjs.map +1 -1
  54. package/output/js/ff/core/Bool.mjs.map +1 -1
  55. package/output/js/ff/core/BrowserSystem.mjs.map +1 -1
  56. package/output/js/ff/core/Buffer.mjs.map +1 -1
  57. package/output/js/ff/core/BuildSystem.mjs +116 -12
  58. package/output/js/ff/core/BuildSystem.mjs.map +35 -6
  59. package/output/js/ff/core/Channel.mjs.map +1 -1
  60. package/output/js/ff/core/Char.mjs.map +1 -1
  61. package/output/js/ff/core/Core.mjs.map +1 -1
  62. package/output/js/ff/core/Crypto.mjs.map +1 -1
  63. package/output/js/ff/core/Date.mjs.map +1 -1
  64. package/output/js/ff/core/Duration.mjs.map +1 -1
  65. package/output/js/ff/core/Equal.mjs.map +1 -1
  66. package/output/js/ff/core/Error.mjs.map +1 -1
  67. package/output/js/ff/core/FileHandle.mjs.map +1 -1
  68. package/output/js/ff/core/Float.mjs.map +1 -1
  69. package/output/js/ff/core/HttpClient.mjs.map +1 -1
  70. package/output/js/ff/core/Int.mjs.map +1 -1
  71. package/output/js/ff/core/IntMap.mjs.map +1 -1
  72. package/output/js/ff/core/Js.mjs.map +1 -1
  73. package/output/js/ff/core/JsSystem.mjs.map +1 -1
  74. package/output/js/ff/core/JsValue.mjs.map +1 -1
  75. package/output/js/ff/core/Json.mjs.map +1 -1
  76. package/output/js/ff/core/List.mjs.map +1 -1
  77. package/output/js/ff/core/Lock.mjs.map +1 -1
  78. package/output/js/ff/core/Log.mjs.map +1 -1
  79. package/output/js/ff/core/Map.mjs.map +1 -1
  80. package/output/js/ff/core/NodeSystem.mjs +54 -20
  81. package/output/js/ff/core/NodeSystem.mjs.map +14 -6
  82. package/output/js/ff/core/Nothing.mjs.map +1 -1
  83. package/output/js/ff/core/Option.mjs.map +1 -1
  84. package/output/js/ff/core/Ordering.mjs.map +1 -1
  85. package/output/js/ff/core/Pair.mjs.map +1 -1
  86. package/output/js/ff/core/Path.mjs +30 -4
  87. package/output/js/ff/core/Path.mjs.map +8 -6
  88. package/output/js/ff/core/Queue.mjs.map +1 -1
  89. package/output/js/ff/core/Random.mjs.map +1 -1
  90. package/output/js/ff/core/RbMap.mjs.map +1 -1
  91. package/output/js/ff/core/Serializable.mjs.map +1 -1
  92. package/output/js/ff/core/Set.mjs.map +1 -1
  93. package/output/js/ff/core/Show.mjs.map +1 -1
  94. package/output/js/ff/core/SourceLocation.mjs.map +1 -1
  95. package/output/js/ff/core/Stream.mjs.map +1 -1
  96. package/output/js/ff/core/String.mjs.map +1 -1
  97. package/output/js/ff/core/StringMap.mjs.map +1 -1
  98. package/output/js/ff/core/Task.mjs.map +1 -1
  99. package/output/js/ff/core/Try.mjs.map +1 -1
  100. package/output/js/ff/core/Unit.mjs.map +1 -1
  101. package/output/js/ff/core/node_modules +1 -0
  102. package/package.json +1 -1
  103. package/vscode/package.json +1 -1
  104. package/webserver/.firefly/include/package.json +1 -1
  105. package/webserver/WebServer.ff +6 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": [
4
- "../../../../../compiler/Dependencies.ff"
4
+ "../../../../compiler/Dependencies.ff"
5
5
  ],
6
6
  "sourcesContent": [
7
7
  "import Parser\r\nimport Syntax\r\nimport Tokenizer\r\nimport Workspace\r\nimport LspHook\r\nimport DependencyLock\r\n\r\ncapability Dependencies(\r\n workspace: Workspace\r\n mutable packages: Map[PackagePair, PackageInfo]\r\n mutable packagePaths: Map[PackagePair, Path]\r\n mutable singleFilePackages: Set[PackagePair]\r\n)\r\n\r\ncapability ResolvedDependencies(\r\n mainPackagePair: PackagePair\r\n packages: Map[PackagePair, PackageInfo]\r\n packagePaths: Map[PackagePair, Path]\r\n singleFilePackages: Set[PackagePair]\r\n)\r\n\r\nextend self: Dependencies {\r\n\r\n loadPackageInfo(\r\n packagePair: PackagePair\r\n path: Path\r\n ): Option[PackageInfo] {\r\n //let packageDirectory = if(path.extension() == \".ff\") {path.parent().grab()} else {path}\r\n let packageDirectory = findScriptPackageLocation(path)\r\n let sharedPackageFile = packageDirectory.slash(\".firefly\").slash(\"package.ff\")\r\n let packageFile = if(sharedPackageFile.exists()) {\r\n sharedPackageFile\r\n } else {\r\n self.singleFilePackages = self.singleFilePackages.add(packagePair)\r\n path\r\n }\r\n try {packageFile.readText()}.toOption().map: code =>\r\n self.parsePackageFile(packagePair, packageFile.absolute(), code)\r\n }\r\n \r\n parsePackageFile(\r\n packagePair: PackagePair\r\n fileName: String\r\n code: String\r\n ): PackageInfo {\r\n let tokens = Tokenizer.tokenize(fileName, code, None, True)\r\n let moduleKey = ModuleKey(packagePair, [], \"<package>\")\r\n let parser = Parser.new(moduleKey, tokens, False, LspHook.disabled())\r\n let info = parser.parsePackageInfo()\r\n self.addCoreDependencyIfMissing(info)\r\n }\r\n\r\n addCoreDependencyIfMissing(info: PackageInfo): PackageInfo {\r\n if(info.dependencies.any {d =>\r\n d.packagePair.group == \"ff\" && d.packagePair.name == \"core\"\r\n }) {\r\n info\r\n } else {\r\n let coreDependency = DDependency(\r\n at = info.package.at\r\n packagePair = PackagePair(\"ff\", \"core\")\r\n version = Version(info.package.at, 0, 0, 0)\r\n safety = Trusted\r\n targets = info.package.targets\r\n )\r\n info.PackageInfo(dependencies = [coreDependency, ...info.dependencies])\r\n }\r\n }\r\n\r\n processPackageInfo(\r\n packageInfo: PackageInfo\r\n ): List[DDependency] {\r\n self.packages = self.packages.add(packageInfo.package.packagePair, packageInfo)\r\n packageInfo.dependencies.filter {!self.packages.contains(_.packagePair)}\r\n }\r\n\r\n fetchDependency(\r\n path: Path\r\n httpClient: HttpClient\r\n dependencyLock: DependencyLock\r\n dependency: DDependency\r\n ): Path {\r\n let location = self.workspace.findPackageLocation(dependency.packagePair, dependency.version)\r\n if(location.contains(\":\") && !location.dropFirst(1).startsWith(\":\")) {\r\n if(location.startsWith(\"http://\") || location.startsWith(\"https://\")) {\r\n let packagePair = dependency.packagePair\r\n let directory = if(path.isDirectory()) {path} else {path.parent().grab()}\r\n let dependenciesPath = directory.slash(\".firefly\").slash(\"dependencies\")\r\n let dependencyPath = dependenciesPath.slash(packagePair.group).slash(packagePair.name)\r\n let tarGzPath = dependenciesPath.slash(Workspace.tarGzName(packagePair, dependency.version))\r\n let donePath = dependenciesPath.slash(Workspace.tarGzName(packagePair, dependency.version) + \".done\")\r\n if(!donePath.exists()) {\r\n dependencyLock.do(donePath.absolute()) {\r\n if(!donePath.exists()) {\r\n Log.trace(\"Fetching \" + location)\r\n let buffer = httpClient.get(location, []) {response =>\r\n if(!response.ok()) {\r\n throw(CompileError(dependency.at, \"Could not download dependency: \" + location))\r\n }\r\n response.readBuffer()\r\n }\r\n if(dependencyPath.exists()) {\r\n dependencyPath.delete()\r\n }\r\n dependencyPath.createDirectory(createParentDirectories = True)\r\n tarGzPath.writeStream([buffer].toStream())\r\n internalExtractTarGz(tarGzPath, dependencyPath)\r\n tarGzPath.renameTo(donePath)\r\n }\r\n }\r\n }\r\n dependencyPath\r\n } else {\r\n throw(CompileError(dependency.at, \"Loading packages by this protocol is not supported: \" + location))\r\n }\r\n } else {\r\n path.path(location)\r\n }\r\n }\r\n\r\n processDependencies(\r\n path: Path\r\n httpClient: HttpClient\r\n dependencyLock: DependencyLock\r\n dependencies: List[DDependency]\r\n ): Unit {\r\n // Remember to check for cycles\r\n let packageInfos = dependencies.map {dependency =>\r\n let dependencyPath = self.fetchDependency(path, httpClient, dependencyLock, dependency)\r\n self.packagePaths = self.packagePaths.add(dependency.packagePair, dependencyPath)\r\n let packageInfo = self.loadPackageInfo(dependency.packagePair, dependencyPath).else {\r\n throw(CompileError(dependency.at, \"Dependency not found: \" + dependencyPath.absolute()))\r\n }\r\n checkPackagePairs(dependency.packagePair, packageInfo.package.packagePair)\r\n packageInfo\r\n }\r\n let newDependencies = packageInfos.flatMap {self.processPackageInfo(_)}\r\n if(newDependencies != []) {\r\n self.processDependencies(path, httpClient, dependencyLock, newDependencies)\r\n }\r\n }\r\n\r\n}\r\n\r\nprocess(fetch: HttpClient, dependencyLock: DependencyLock, path: Path): ResolvedDependencies {\r\n let workspace = Workspace.loadWorkspace(path)\r\n let self = Dependencies(workspace, [].toMap(), [].toMap(), [].toSet())\r\n let packageInfo = self.loadPackageInfo(Syntax.scriptPackagePair, path).else {\r\n if(!path.exists()) {\r\n throw(CompileError(Location(path.absolute(), 1, 1), \"File not found\"))\r\n } else {\r\n throw(CompileError(Location(path.absolute(), 1, 1), \"Could not load package info\"))\r\n }\r\n }\r\n let newDependencies = self.processPackageInfo(packageInfo)\r\n self.processDependencies(path, fetch, dependencyLock, newDependencies)\r\n let packagePaths = self.packagePaths.add(packageInfo.package.packagePair, findScriptPackageLocation(path))\r\n ResolvedDependencies(\r\n mainPackagePair = packageInfo.package.packagePair\r\n packages = self.packages\r\n packagePaths = packagePaths\r\n singleFilePackages = self.singleFilePackages\r\n )\r\n}\r\n\r\nfindScriptPackageLocation(path: Path): Path {\r\n let packageDirectory = if(path.extension() == \".ff\") {path.parent().grab()} else {path}\r\n function go(directory: Path): Path {\r\n let packageFile = directory.slash(\".firefly\").slash(\"package.ff\")\r\n if(packageFile.exists()) {\r\n directory\r\n } elseIf {!directory.parent().isEmpty()} {\r\n go(directory.parent().grab())\r\n } else {\r\n packageDirectory\r\n }\r\n }\r\n go(packageDirectory)\r\n}\r\n\r\ncheckPackagePairs(dependencyPair: PackagePair, packagePair: PackagePair): Unit {\r\n if(\r\n packagePair.group != dependencyPair.group ||\r\n packagePair.name != dependencyPair.name\r\n ) {\r\n panic(\r\n \"Dependency declaration and package declaration disagree on package name: \" +\r\n dependencyPair.groupName() + \" vs. \" + packagePair.groupName()\r\n )\r\n }\r\n}\r\n\r\ninternalExtractTarGz(tarGzPath: Path, path: Path): Unit {\r\n let tar = Js.import(\"tar\")\r\n Js.await(tar->extract(Js->(file = tarGzPath.absolutePath, cwd = path.absolutePath, strict = True)))\r\n}\r\n"
@@ -124,5 +124,5 @@
124
124
  "flatMap",
125
125
  "notEquals"
126
126
  ],
127
- "mappings": "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"
127
+ "mappings": "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"
128
128
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": [
4
- "../../../../../compiler/DependencyLock.ff"
4
+ "../../../../compiler/DependencyLock.ff"
5
5
  ],
6
6
  "sourcesContent": [
7
7
  "capability DependencyLock(\r\n doneLocks: StringMap[Lock]\r\n task: Task\r\n)\r\n\r\nnew(task: Task): DependencyLock {\r\n DependencyLock(StringMap.new(), task)\r\n}\r\n\r\nextend self: DependencyLock {\r\n do[T](doneFile: String, body: () => T): T {\r\n let lock = self.doneLocks.getOrSet(doneFile) {self.task.lock()}\r\n lock.do {\r\n body()\r\n }\r\n }\r\n}\r\n"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": [
4
- "../../../../../compiler/Deriver.ff"
4
+ "../../../../compiler/Deriver.ff"
5
5
  ],
6
6
  "sourcesContent": [
7
7
  "import Syntax\r\n\r\ndata Deriver()\r\n\r\nnew(): Deriver {\r\n Deriver()\r\n}\r\n\r\nfail[T](at: Location, message: String): T {\r\n panic(message + \" \" + at.show())\r\n}\r\n\r\nextend self: Deriver {\r\n\r\n deriveModule(module: Module): Module {\r\n\r\n let modulePrefix = module.moduleKey.qualifiedName()\r\n\r\n module.Module(\r\n instances = [\r\n ...module.instances\r\n ...self.makeHasAnyTagInstances(modulePrefix, module)\r\n ...self.makeShowInstances(modulePrefix, module)\r\n ...self.makeEqualInstances(modulePrefix, module)\r\n ...self.makeOrderingInstances(modulePrefix, module)\r\n ...self.makeSerializableInstances(modulePrefix, module)\r\n ]\r\n )\r\n }\r\n\r\n // HasAnyTag\r\n makeHasAnyTagInstances(modulePrefix: String, module: Module): List[DInstance] {\r\n let coreWhitelist = [\r\n \"ff:core/Serializable.DeserializationChecksumException\"\r\n \"ff:core/Core.GrabException\"\r\n \"ff:core/NodeSystem.ProcessException\"\r\n \"ff:core/Unit.Unit\"\r\n \"ff:core/Pair.Pair\"\r\n \"ff:core/Option.Option\"\r\n \"ff:core/Int.Int\"\r\n \"ff:core/Float.Float\"\r\n \"ff:core/String.String\"\r\n \"ff:core/Char.Char\"\r\n \"ff:core/Bool.Bool\"\r\n \"ff:core/List.List\"\r\n ].toSet() // Maybe whitelist all?\r\n let missingInstance =\r\n self.findTypesThatNeedInstances(\"ff:core/Any.HasAnyTag\", modulePrefix, coreWhitelist, True, module)\r\n missingInstance.map {self.makeHasAnyTagInstance(modulePrefix, _)}\r\n }\r\n\r\n makeHasAnyTagInstance(modulePrefix: String, declaration: DType): DInstance {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let constraints = declaration.generics.map {t =>\r\n Constraint(at, \"ff:core/Any.HasAnyTag\", [TConstructor(at, t, [])])\r\n }\r\n let typeArguments = declaration.generics.map {t =>\r\n TConstructor(at, t, [])\r\n }\r\n let selfTypeName = modulePrefix + \".\" + declaration.name\r\n let selfType = TConstructor(at, selfTypeName, typeArguments)\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let signature = Signature(\r\n at = at\r\n name = \"anyTag\"\r\n member = False\r\n generics = []\r\n constraints = []\r\n parameters = []\r\n returnType = TConstructor(at, \"ff:core/Any.AnyTag\", [selfType])\r\n effect = noEffect\r\n )\r\n let typeArgumentStrings = typeArguments.map {\r\n self.makeMethodCall(at, self.makeSimpleCall(at, \"ff:core/Any.anyTag\", [], [_]), \"show\", [])\r\n }\r\n let strings =\r\n [EString(at, \"\\\"[\\\"\"), ...typeArgumentStrings.separate([EString(at, \"\\\",\\\"\")]), EString(at, \"\\\"]\\\"\")]\r\n let body = Lambda(at, noEffect, [MatchCase(\r\n at = at\r\n patterns = []\r\n guards = []\r\n body = self.makeSimpleCall(at, \"ff:core/Any.internalAnyTag\", [\r\n strings.foldLeft(EString(at, \"\\\"\" + selfTypeName + \"\\\"\")) {a, b =>\r\n self.makeSimpleCall(at, \"+\", [a, b])\r\n }\r\n ])\r\n )])\r\n let method = DFunction(at, signature, body)\r\n DInstance(\r\n at = at\r\n generics = declaration.generics\r\n constraints = constraints\r\n traitName = \"ff:core/Any.HasAnyTag\"\r\n typeArguments = [selfType]\r\n generatorArguments = []\r\n methods = [method]\r\n derived = True\r\n )\r\n }\r\n\r\n // Show\r\n makeShowInstances(modulePrefix: String, module: Module): List[DInstance] {\r\n let coreWhitelist = [\r\n \"ff:core/Option.Option\"\r\n \"ff:core/Serializable.DeserializationChecksumException\"\r\n \"ff:core/Core.GrabException\"\r\n \"ff:core/NodeSystem.ProcessException\"\r\n ].toSet()\r\n let missingInstance =\r\n self.findTypesThatNeedInstances(\"ff:core/Show.Show\", modulePrefix, coreWhitelist, True, module)\r\n missingInstance.map {self.makeShowInstance(modulePrefix, _)}\r\n }\r\n\r\n makeShowInstance(modulePrefix: String, declaration: DType): DInstance {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let constraints = declaration.generics.map {t =>\r\n Constraint(at, \"ff:core/Show.Show\", [TConstructor(at, t, [])])\r\n }\r\n let typeArguments = declaration.generics.map {t =>\r\n TConstructor(at, t, [])\r\n }\r\n let selfType = TConstructor(at, modulePrefix + \".\" + declaration.name, typeArguments)\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let signature = Signature(\r\n at = at\r\n name = \"show\"\r\n member = False\r\n generics = []\r\n constraints = []\r\n parameters = [Parameter(at, False, \"value\", selfType, None)]\r\n returnType = TConstructor(at, \"ff:core/String.String\", [])\r\n effect = noEffect\r\n )\r\n let body = \r\n Lambda(at, noEffect, self.makeShowCases(modulePrefix, declaration, selfType))\r\n let showMethod = DFunction(at, signature, body)\r\n DInstance(\r\n at = at\r\n generics = declaration.generics\r\n constraints = constraints\r\n traitName = \"ff:core/Show.Show\"\r\n typeArguments = [selfType]\r\n generatorArguments = []\r\n methods = [showMethod]\r\n derived = True\r\n )\r\n }\r\n\r\n makeShowCases(modulePrefix: String, declaration: DType, selfType: Type): List[MatchCase] {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let wildcardPattern = PVariable(at, None)\r\n declaration.variants.{\r\n | variants =>\r\n variants.map {variant =>\r\n let variantName = modulePrefix + \".\" + variant.name\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n let strings = if(fields.size() == 0) {[]} else {[\r\n EString(at, \"\\\"(\\\"\")\r\n ...fields.map {field =>\r\n self.makeSimpleCall(at, \"ff:core/Show.show\", [\r\n EField(at, False, EVariable(at, \"z\"), field.name)\r\n ])\r\n }.separate([EString(at, \"\\\", \\\"\")])\r\n EString(at, \"\\\")\\\"\")\r\n ]}\r\n MatchCase(\r\n at = at\r\n patterns = [PVariantAs(at, variantName, at, Some(\"z\"))]\r\n guards = []\r\n body = strings.foldLeft(EString(at, \"\\\"\" + variant.name + \"\\\"\")) {a, b =>\r\n self.makeSimpleCall(at, \"+\", [a, b])\r\n }\r\n )\r\n }\r\n }\r\n }\r\n\r\n // Ordering\r\n makeOrderingInstances(modulePrefix: String, module: Module): List[DInstance] {\r\n let coreWhitelist = [\r\n \"ff:core/Option.Option\"\r\n ].toSet()\r\n let missingInstance =\r\n self.findTypesThatNeedInstances(\"ff:core/Ordering.Order\", modulePrefix, coreWhitelist, True, module)\r\n missingInstance.map {self.makeOrderingInstance(modulePrefix, _)}\r\n }\r\n\r\n makeOrderingInstance(modulePrefix: String, declaration: DType): DInstance {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let constraints = declaration.generics.map {t =>\r\n Constraint(at, \"ff:core/Ordering.Order\", [TConstructor(at, t, [])])\r\n }\r\n let typeArguments = declaration.generics.map {t =>\r\n TConstructor(at, t, [])\r\n }\r\n let selfType = TConstructor(at, modulePrefix + \".\" + declaration.name, typeArguments)\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let signature = Signature(\r\n at = at\r\n name = \"compare\"\r\n member = False\r\n generics = []\r\n constraints = []\r\n parameters = [\r\n Parameter(at, False, \"x\", selfType, None)\r\n Parameter(at, False, \"y\", selfType, None)\r\n ]\r\n returnType = TConstructor(at, \"ff:core/Ordering.Ordering\", [])\r\n effect = noEffect\r\n )\r\n let body =\r\n Lambda(at, noEffect, self.makeOrderingCases(modulePrefix, declaration, selfType))\r\n let compareMethod = DFunction(at, signature, body)\r\n DInstance(\r\n at = at\r\n generics = declaration.generics\r\n constraints = constraints\r\n traitName = \"ff:core/Ordering.Order\"\r\n typeArguments = [selfType]\r\n generatorArguments = []\r\n methods = [compareMethod]\r\n derived = True\r\n )\r\n }\r\n\r\n makeOrderingCases(modulePrefix: String, declaration: DType, selfType: Type): List[MatchCase] {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let wildcardPattern = PVariable(at, None)\r\n let sameCase = MatchCase(\r\n at = at,\r\n patterns = [wildcardPattern, wildcardPattern]\r\n guards = [MatchGuard(\r\n at,\r\n self.makeSimpleCall(at, \"===\", [EVariable(at, \"x\"), EVariable(at, \"y\")]),\r\n PVariant(at, \"ff:core/Bool.True\", [])\r\n )]\r\n body = EVariant(at, \"ff:core/Ordering.OrderingSame\", [], None)\r\n )\r\n declaration.variants.{\r\n | [variant] =>\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n [sameCase, MatchCase(\r\n at = at\r\n patterns = [wildcardPattern, wildcardPattern]\r\n guards = []\r\n body = self.makeOrderingFields(modulePrefix, declaration, fields)\r\n )]\r\n | variants =>\r\n let variantsWithFields = variants.filter {variant =>\r\n !declaration.commonFields.isEmpty() || !variant.fields.isEmpty()\r\n } // We can skip no-arg constructors assuming there are never more than one instance of them\r\n let sameVariantCases = variantsWithFields.map { variant =>\r\n let variantName = modulePrefix + \".\" + variant.name\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n MatchCase(\r\n at = at,\r\n patterns = [PVariantAs(at, variantName, at, Some(\"x\")), PVariantAs(at, variantName, at, Some(\"y\"))]\r\n guards = []\r\n body = self.makeOrderingFields(modulePrefix, declaration, fields)\r\n )\r\n }\r\n let intType = TConstructor(at, \"ff:core/Int.Int\", [])\r\n let numberSignature =\r\n Signature(at, \"number\", False, [], [], [Parameter(at, False, \"z\", selfType, None)], intType, noEffect)\r\n let numberCases = declaration.variants.pairs().map {| Pair(index, variant) =>\r\n let variantName = modulePrefix + \".\" + variant.name\r\n MatchCase(\r\n at = at\r\n patterns = [PVariantAs(at, variantName, at, None)]\r\n guards = []\r\n body = EInt(at, \"\" + index)\r\n )\r\n }\r\n let differentVariant = MatchCase(\r\n at = at\r\n patterns = [wildcardPattern, wildcardPattern]\r\n guards = []\r\n body =\r\n EFunctions(at\r\n [DFunction(at, numberSignature, Lambda(at, noEffect, numberCases))]\r\n self.makeSimpleCall(at, \"ff:core/Ordering.compare\", [\r\n self.makeSimpleCall(at, \"number\", [EVariable(at, \"x\")])\r\n self.makeSimpleCall(at, \"number\", [EVariable(at, \"y\")])\r\n ])\r\n )\r\n )\r\n [sameCase, ...sameVariantCases, differentVariant]\r\n }\r\n }\r\n\r\n makeOrderingFields(modulePrefix: String, declaration: DType, fields: List[Parameter]): Term {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let orderingType = TConstructor(at, \"ff:core/Ordering.Ordering\", [])\r\n let orderingSame = EVariant(at, \"ff:core/Ordering.OrderingSame\", [], None)\r\n function go(fields: List[Parameter]): Term {\r\n | [] =>\r\n orderingSame\r\n | [head, ...tail] =>\r\n let variableName = head.name + \"Ordering\"\r\n let compareTerm = self.makeSimpleCall(at, \"ff:core/Ordering.compare\", [\r\n EField(at, False, EVariable(at, \"x\"), head.name)\r\n EField(at, False, EVariable(at, \"y\"), head.name)\r\n ])\r\n let notEqualTerm = self.makeSimpleCall(at, \"!==\", [\r\n EVariable(at, variableName)\r\n orderingSame\r\n ])\r\n let ifTerm = self.makeIf(at, notEqualTerm, EVariable(at, variableName), go(tail))\r\n ELet(at, False, variableName, orderingType, compareTerm, ifTerm)\r\n }\r\n go(fields)\r\n }\r\n\r\n // Equal\r\n makeEqualInstances(modulePrefix: String, module: Module): List[DInstance] {\r\n let coreWhitelist = [\r\n \"ff:core/Option.Option\"\r\n \"ff:core/List.List\"\r\n \"ff:core/Pair.Pair\"\r\n \"ff:core/Unit.Unit\"\r\n ].toSet()\r\n let missingInstance =\r\n self.findTypesThatNeedInstances(\"ff:core/Equal.Equal\", modulePrefix, coreWhitelist, True, module)\r\n missingInstance.map {self.makeEqualInstance(modulePrefix, _)}\r\n }\r\n\r\n makeEqualInstance(modulePrefix: String, declaration: DType): DInstance {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let constraints = declaration.generics.map {t =>\r\n Constraint(at, \"ff:core/Equal.Equal\", [TConstructor(at, t, [])])\r\n }\r\n let typeArguments = declaration.generics.map {t =>\r\n TConstructor(at, t, [])\r\n }\r\n let selfType = TConstructor(at, modulePrefix + \".\" + declaration.name, typeArguments)\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let signature = Signature(\r\n at = at\r\n name = \"equals\"\r\n member = False\r\n generics = []\r\n constraints = []\r\n parameters = [\r\n Parameter(at, False, \"x\", selfType, None)\r\n Parameter(at, False, \"y\", selfType, None)\r\n ]\r\n returnType = TConstructor(at, \"ff:core/Bool.Bool\", [])\r\n effect = noEffect\r\n )\r\n let body =\r\n Lambda(at, noEffect, self.makeEqualsCases(modulePrefix, declaration, selfType))\r\n let equalsMethod = DFunction(at, signature, body)\r\n DInstance(\r\n at = at\r\n generics = declaration.generics\r\n constraints = constraints\r\n traitName = \"ff:core/Equal.Equal\"\r\n typeArguments = [selfType]\r\n generatorArguments = []\r\n methods = [equalsMethod]\r\n derived = True\r\n )\r\n }\r\n\r\n makeEqualsCases(modulePrefix: String, declaration: DType, selfType: Type): List[MatchCase] {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let wildcardPattern = PVariable(at, None)\r\n let sameCase = MatchCase(\r\n at = at\r\n patterns = [wildcardPattern, wildcardPattern]\r\n guards = [MatchGuard(\r\n at\r\n self.makeSimpleCall(at, \"===\", [EVariable(at, \"x\"), EVariable(at, \"y\")])\r\n PVariant(at, \"ff:core/Bool.True\", [])\r\n )]\r\n body = EVariant(at, \"ff:core/Bool.True\", [], None)\r\n )\r\n declaration.variants.{\r\n | [variant] =>\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n [sameCase, MatchCase(\r\n at = at\r\n patterns = [wildcardPattern, wildcardPattern]\r\n guards = []\r\n body = self.makeEqualFields(modulePrefix, declaration, fields)\r\n )]\r\n | variants =>\r\n let variantsWithFields = variants.filter {variant =>\r\n !declaration.commonFields.isEmpty() || !variant.fields.isEmpty()\r\n } // We can skip no-arg constructors assuming there are never more than one instance of them\r\n let sameVariantCases = variantsWithFields.map { variant =>\r\n let variantName = modulePrefix + \".\" + variant.name\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n MatchCase(\r\n at = at\r\n patterns = [PVariantAs(at, variantName, at, Some(\"x\")), PVariantAs(at, variantName, at, Some(\"y\"))]\r\n guards = []\r\n body = self.makeEqualFields(modulePrefix, declaration, fields)\r\n )\r\n }\r\n let differentVariant = MatchCase(\r\n at = at\r\n patterns = [wildcardPattern, wildcardPattern]\r\n guards = []\r\n body = EVariant(at, \"ff:core/Bool.False\", [], None)\r\n )\r\n [sameCase, ...sameVariantCases, differentVariant]\r\n }\r\n }\r\n\r\n makeEqualFields(modulePrefix: String, declaration: DType, fields: List[Parameter]): Term {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n function go(fields: List[Parameter]): Term {\r\n | [] =>\r\n EVariant(at, \"ff:core/Bool.True\", [], None)\r\n | [head] =>\r\n self.makeSimpleCall(at, \"ff:core/Equal.equals\", [\r\n EField(at, False, EVariable(at, \"x\"), head.name)\r\n EField(at, False, EVariable(at, \"y\"), head.name)\r\n ])\r\n | [head, ...tail] =>\r\n let equalsTerm = self.makeSimpleCall(at, \"ff:core/Equal.equals\", [\r\n EField(at, False, EVariable(at, \"x\"), head.name)\r\n EField(at, False, EVariable(at, \"y\"), head.name)\r\n ])\r\n self.makeSimpleCall(at, \"&&\", [\r\n equalsTerm\r\n go(tail)\r\n ])\r\n }\r\n go(fields)\r\n }\r\n\r\n // Serializable\r\n makeSerializableInstances(modulePrefix: String, module: Module): List[DInstance] {\r\n let coreWhitelist = [\r\n \"ff:core/Option.Option\"\r\n \"ff:core/Pair.Pair\"\r\n ].toSet()\r\n let missingInstance =\r\n self.findTypesThatNeedInstances(\"ff:core/Serializable.Serializable\", modulePrefix, coreWhitelist, True, module)\r\n missingInstance.map {self.makeSerializableInstance(modulePrefix, _)}\r\n }\r\n\r\n makeSerializableInstance(modulePrefix: String, declaration: DType): DInstance {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let constraints = declaration.generics.map { t =>\r\n Constraint(at, \"ff:core/Serializable.Serializable\", [TConstructor(at, t, [])])\r\n }\r\n let typeArguments = declaration.generics.map { t =>\r\n TConstructor(at, t, [])\r\n }\r\n let selfType = TConstructor(at, modulePrefix + \".\" + declaration.name, typeArguments)\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let serializationType = TConstructor(at, \"ff:core/Serializable.Serialization\", [])\r\n let serializeSignature = Signature(\r\n at = at\r\n name = \"serializeUsing\"\r\n member = False\r\n generics = []\r\n constraints = []\r\n parameters = [\r\n Parameter(at, False, \"serialization\", serializationType, None)\r\n Parameter(at, False, \"value\", selfType, None)\r\n ]\r\n returnType = TConstructor(at, \"ff:core/Unit.Unit\", [])\r\n effect = noEffect\r\n )\r\n let deserializeSignature = Signature(\r\n at = at\r\n name = \"deserializeUsing\"\r\n member = False\r\n generics = []\r\n constraints = []\r\n parameters = [\r\n Parameter(at, False, \"serialization\", serializationType, None)\r\n ]\r\n returnType = selfType\r\n effect = noEffect\r\n )\r\n let wildcardPattern = PVariable(at, None)\r\n let serializeBody = \r\n Lambda(at, noEffect, self.makeSerializeBody(modulePrefix, declaration, selfType))\r\n let deserializeBody = Lambda(at, noEffect, [MatchCase(\r\n at = at\r\n patterns = [wildcardPattern]\r\n guards = []\r\n body = self.makeDeserializeBody(modulePrefix, declaration, selfType)\r\n )])\r\n DInstance(\r\n at = at\r\n generics = declaration.generics\r\n constraints = constraints\r\n traitName = \"ff:core/Serializable.Serializable\"\r\n typeArguments = [selfType]\r\n generatorArguments = []\r\n methods = [\r\n DFunction(at, serializeSignature, serializeBody)\r\n DFunction(at, deserializeSignature, deserializeBody)\r\n ]\r\n derived = True\r\n )\r\n }\r\n\r\n makeSerializeBody(modulePrefix: String, declaration: DType, selfType: Type): List[MatchCase] {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let wildcardPattern = PVariable(at, None)\r\n declaration.variants.pairs().map {| Pair(index, variant) =>\r\n let variantName = modulePrefix + \".\" + variant.name\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n let updateChecksum = self.makeUpdateChecksum(at, variantName, declaration, variant)\r\n let autoResize = self.makeMethodCall(\r\n at = at\r\n target = EVariable(at, \"serialization\")\r\n methodName = \"autoResize\"\r\n arguments = [EInt(at, \"1\")]\r\n )\r\n let setVariantIndex = self.makeMethodCall(\r\n at = at\r\n target = EField(at, False, EVariable(at, \"serialization\"), \"buffer\")\r\n methodName = \"setUint8\"\r\n arguments = [EField(at, False, EVariable(at, \"serialization\"), \"offset\"), EInt(at, \"\" + index)]\r\n )\r\n let fieldSerializations = fields.map {field =>\r\n self.makeSimpleCall(at, \"ff:core/Serializable.serializeUsing\", [\r\n EVariable(at, \"serialization\")\r\n EField(at, False, EVariable(at, \"v\"), field.name)\r\n ])\r\n }\r\n MatchCase(\r\n at = at,\r\n patterns = [wildcardPattern, PVariantAs(at, variantName, at, Some(\"v\"))]\r\n guards = []\r\n body = [\r\n autoResize\r\n setVariantIndex\r\n EAssignField(at, \"+\", EVariable(at, \"serialization\"), \"offset\", EInt(at, \"1\"))\r\n ...fieldSerializations\r\n ].foldLeft(updateChecksum) {ESequential(at, _, _)}\r\n )\r\n }\r\n }\r\n\r\n makeDeserializeBody(modulePrefix: String, declaration: DType, selfType: Type): Term {\r\n let at = declaration.at.Location(file = declaration.at.file + \"/<derived>\")\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let wildcardPattern = PVariable(at, None)\r\n let grabVariantIndex = self.makeMethodCall(\r\n at = at\r\n target = EField(at, False, EVariable(at, \"serialization\"), \"buffer\")\r\n methodName = \"grabUint8\"\r\n arguments = [EField(at, False, EVariable(at, \"serialization\"), \"offset\")]\r\n )\r\n let intType = TConstructor(at, \"ff:core/Int.Int\", [])\r\n let incrementOffset = EAssignField(at, \"+\", EVariable(at, \"serialization\"), \"offset\", EInt(at, \"1\"))\r\n let cases = declaration.variants.pairs().map {| Pair(index, variant) =>\r\n let variantName = modulePrefix + \".\" + variant.name\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n let fieldValues = fields.map {field =>\r\n Argument(\r\n at\r\n None\r\n self.makeSimpleCall(at, \"ff:core/Serializable.deserializeUsing\", [EVariable(at, \"serialization\")])\r\n )\r\n }\r\n let updateChecksum = self.makeUpdateChecksum(at, variantName, declaration, variant)\r\n let makeVariant = EVariant(at, variantName, [], Some(fieldValues))\r\n MatchCase(\r\n at = at,\r\n patterns = [PInt(at, \"\" + index)]\r\n guards = []\r\n body = ESequential(at, updateChecksum, makeVariant)\r\n )\r\n }\r\n let otherwiseCase = MatchCase(\r\n at = at,\r\n patterns = [wildcardPattern]\r\n guards = []\r\n body = self.makeSimpleCall(at, \"ff:core/Core.throw\", [\r\n EVariant(at, \"ff:core/Serializable.DeserializationChecksumException\", [], None)\r\n ])\r\n )\r\n let matchLambda = ELambda(at, Lambda(at, noEffect, [...cases, otherwiseCase]))\r\n let match = EPipe(at, EVariable(at, \"variantIndex\"), noEffect, matchLambda)\r\n ELet(at, False, \"variantIndex\", intType, grabVariantIndex, ESequential(at, incrementOffset, match))\r\n }\r\n\r\n makeUpdateChecksum(at: Location, variantName: String, declaration: DType, variant: Variant): Term {\r\n let fields = [...declaration.commonFields, ...variant.fields]\r\n let variantChecksum = variantName.size() // TODO: Hash variantName + fields with type terms + type parameters (+ type arguments?)\r\n EAssignField(at, \"\", EVariable(at, \"serialization\"), \"checksum\"\r\n self.makeMethodCall(\r\n at = at\r\n target = self.makeSimpleCall(at, \"+\", [\r\n self.makeSimpleCall(at, \"*\", [\r\n EInt(at, \"31\")\r\n EField(at, False, EVariable(at, \"serialization\"), \"checksum\")\r\n ])\r\n EInt(at, \"\" + variantChecksum)\r\n ])\r\n methodName = \"bitOr\"\r\n arguments = [EInt(at, \"0\")]\r\n )\r\n )\r\n }\r\n\r\n // Common\r\n\r\n findTypesThatNeedInstances(\r\n traitName: String\r\n modulePrefix: String\r\n coreWhitelist: Set[String]\r\n allowGenerics: Bool\r\n module: Module\r\n ): List[DType] {\r\n let typesWithInstance = module.instances.collect {\r\n | instance {instance.typeArguments.first() | Some(TConstructor(_, name, _))} =>\r\n if(instance.traitName == traitName) {name}\r\n | _ => None\r\n }.toSet()\r\n\r\n module.types.filter {t =>\r\n (!module.moduleKey.packagePair.isCore() || coreWhitelist.contains(modulePrefix + \".\" + t.name)) &&\r\n !t.generics.first().any {_ == \"Q$\"} &&\r\n (allowGenerics || t.generics.isEmpty()) &&\r\n t.data && !t.newtype &&\r\n !typesWithInstance.contains(modulePrefix + \".\" + t.name)\r\n }\r\n }\r\n\r\n makeSimpleCall(at: Location, name: String, arguments: List[Term], typeArguments: List[Type] = []): Term {\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let callTarget = DynamicCall(EVariable(at, name), tailCall = False)\r\n ECall(at, callTarget, noEffect, typeArguments, arguments.map { e =>\r\n Argument(at, None, e)\r\n }, [])\r\n }\r\n\r\n makeMethodCall(at: Location, target: Term, methodName: String, arguments: List[Term]): Term {\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let method = EField(at, False, target, methodName)\r\n ECall(at, DynamicCall(method, False), noEffect, [], arguments.map {Argument(at, None, _)}, [])\r\n }\r\n\r\n makeIf(at: Location, condition: Term, then: Term, else: Term): Term {\r\n let noEffect = TConstructor(at, \"ff:core/Nothing.Nothing\", [])\r\n let target = DynamicCall(EVariable(at, \"ff:core/Core.if\"), tailCall = False)\r\n let option = ECall(at, target, noEffect, [], [\r\n Argument(at, None, condition)\r\n Argument(at, None, ELambda(at, Lambda(at, noEffect, [MatchCase(at, [], [], then)])))\r\n ], [])\r\n ECall(at, DynamicCall(EField(at, False, option, \"else\"), tailCall = False), noEffect, [], [\r\n Argument(at, None, ELambda(at, Lambda(at, noEffect, [MatchCase(at, [], [], else)])))\r\n ], [])\r\n }\r\n\r\n}\r\n"