firefly-compiler 0.5.35 → 0.5.37

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 (225) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +157 -154
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +275 -277
  6. package/compiler/Compiler.ff +234 -233
  7. package/compiler/Dependencies.ff +186 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/Deriver.ff +23 -31
  10. package/compiler/Dictionaries.ff +1 -1
  11. package/compiler/Inference.ff +43 -20
  12. package/compiler/JsEmitter.ff +1437 -1282
  13. package/compiler/LspHook.ff +202 -202
  14. package/compiler/Main.ff +25 -24
  15. package/compiler/ModuleCache.ff +178 -178
  16. package/compiler/Parser.ff +36 -109
  17. package/compiler/Resolver.ff +5 -8
  18. package/compiler/Substitution.ff +1 -1
  19. package/compiler/Syntax.ff +1 -16
  20. package/compiler/Token.ff +9 -0
  21. package/compiler/Tokenizer.ff +4 -0
  22. package/compiler/Workspace.ff +88 -88
  23. package/core/.firefly/include/package.json +5 -5
  24. package/core/.firefly/package.ff +2 -2
  25. package/core/Any.ff +26 -30
  26. package/core/Array.ff +298 -265
  27. package/core/Atomic.ff +63 -64
  28. package/core/Box.ff +7 -7
  29. package/core/BrowserSystem.ff +40 -40
  30. package/core/Buffer.ff +185 -152
  31. package/core/BuildSystem.ff +156 -148
  32. package/core/Channel.ff +95 -92
  33. package/core/Char.ff +3 -2
  34. package/core/Core.ff +16 -23
  35. package/core/Crypto.ff +94 -96
  36. package/core/Equal.ff +41 -36
  37. package/core/Error.ff +15 -10
  38. package/core/FileHandle.ff +45 -37
  39. package/core/Float.ff +176 -200
  40. package/core/HttpClient.ff +142 -148
  41. package/core/Instant.ff +6 -8
  42. package/core/Int.ff +40 -24
  43. package/core/IntMap.ff +61 -39
  44. package/core/Js.ff +305 -0
  45. package/core/JsSystem.ff +135 -114
  46. package/core/JsValue.ff +303 -159
  47. package/core/Json.ff +423 -443
  48. package/core/List.ff +482 -486
  49. package/core/Lock.ff +108 -144
  50. package/core/Log.ff +25 -14
  51. package/core/NodeSystem.ff +198 -191
  52. package/core/Ordering.ff +160 -161
  53. package/core/Path.ff +377 -409
  54. package/core/Queue.ff +90 -0
  55. package/core/Random.ff +140 -134
  56. package/core/RbMap.ff +216 -216
  57. package/core/Serializable.ff +16 -13
  58. package/core/Show.ff +44 -43
  59. package/core/SourceLocation.ff +68 -68
  60. package/core/Stream.ff +1 -1
  61. package/core/String.ff +224 -202
  62. package/core/StringMap.ff +58 -36
  63. package/core/Task.ff +165 -149
  64. package/experimental/benchmarks/ListGrab.ff +23 -23
  65. package/experimental/benchmarks/ListGrab.java +55 -55
  66. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  67. package/experimental/benchmarks/Pyrotek45.java +64 -64
  68. package/experimental/bidirectional/Bidi.ff +88 -88
  69. package/experimental/lines/Main.ff +40 -0
  70. package/experimental/random/Index.ff +53 -53
  71. package/experimental/random/Process.ff +120 -120
  72. package/experimental/random/RunLength.ff +65 -65
  73. package/experimental/random/Scrape.ff +51 -51
  74. package/experimental/random/Symbols.ff +73 -73
  75. package/experimental/random/Tensor.ff +52 -52
  76. package/experimental/random/Units.ff +36 -36
  77. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
  78. package/experimental/s3/S3TestPut.ff +16 -16
  79. package/experimental/tests/TestJson.ff +26 -26
  80. package/firefly.sh +0 -0
  81. package/fireflysite/.firefly/package.ff +4 -4
  82. package/fireflysite/CommunityOverview.ff +20 -20
  83. package/fireflysite/CountingButtonDemo.ff +58 -58
  84. package/fireflysite/DocumentParser.ff +325 -331
  85. package/fireflysite/ExamplesOverview.ff +40 -40
  86. package/fireflysite/FrontPage.ff +344 -344
  87. package/fireflysite/GettingStarted.ff +45 -45
  88. package/fireflysite/Guide.ff +456 -456
  89. package/fireflysite/Main.ff +163 -152
  90. package/fireflysite/MatchingPasswordsDemo.ff +82 -82
  91. package/fireflysite/PackagesOverview.ff +49 -49
  92. package/fireflysite/PostgresqlDemo.ff +34 -34
  93. package/fireflysite/ReferenceAll.ff +18 -18
  94. package/fireflysite/ReferenceIntroduction.ff +11 -11
  95. package/fireflysite/Styles.ff +567 -567
  96. package/fireflysite/Test.ff +121 -62
  97. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
  98. package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
  99. package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
  100. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
  101. package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
  102. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
  103. package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
  104. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
  105. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
  106. package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
  107. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
  108. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
  109. package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
  110. package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
  111. package/lsp/.firefly/package.ff +1 -1
  112. package/lsp/CompletionHandler.ff +827 -827
  113. package/lsp/Handler.ff +714 -714
  114. package/lsp/HoverHandler.ff +79 -79
  115. package/lsp/LanguageServer.ff +272 -272
  116. package/lsp/SignatureHelpHandler.ff +55 -55
  117. package/lsp/SymbolHandler.ff +181 -181
  118. package/lsp/TestReferences.ff +17 -17
  119. package/lsp/TestReferencesCase.ff +7 -7
  120. package/lsp/stderr.txt +1 -1
  121. package/lsp/stdout.txt +34 -34
  122. package/lux/.firefly/package.ff +1 -1
  123. package/lux/Css.ff +648 -648
  124. package/lux/CssTest.ff +48 -48
  125. package/lux/Lux.ff +608 -617
  126. package/lux/LuxEvent.ff +79 -116
  127. package/lux/Main.ff +123 -123
  128. package/lux/Main2.ff +143 -143
  129. package/lux/TestDry.ff +28 -28
  130. package/output/js/ff/compiler/Builder.mjs +72 -71
  131. package/output/js/ff/compiler/Compiler.mjs +19 -13
  132. package/output/js/ff/compiler/Dependencies.mjs +8 -7
  133. package/output/js/ff/compiler/DependencyLock.mjs +6 -4
  134. package/output/js/ff/compiler/Deriver.mjs +26 -24
  135. package/output/js/ff/compiler/Dictionaries.mjs +14 -18
  136. package/output/js/ff/compiler/Environment.mjs +6 -4
  137. package/output/js/ff/compiler/Inference.mjs +238 -164
  138. package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
  139. package/output/js/ff/compiler/JsImporter.mjs +20 -18
  140. package/output/js/ff/compiler/LspHook.mjs +12 -10
  141. package/output/js/ff/compiler/Main.mjs +61 -41
  142. package/output/js/ff/compiler/ModuleCache.mjs +10 -8
  143. package/output/js/ff/compiler/Parser.mjs +153 -669
  144. package/output/js/ff/compiler/Patterns.mjs +12 -10
  145. package/output/js/ff/compiler/Resolver.mjs +52 -78
  146. package/output/js/ff/compiler/Substitution.mjs +12 -16
  147. package/output/js/ff/compiler/Syntax.mjs +50 -341
  148. package/output/js/ff/compiler/Token.mjs +126 -4
  149. package/output/js/ff/compiler/Tokenizer.mjs +62 -52
  150. package/output/js/ff/compiler/Unification.mjs +74 -90
  151. package/output/js/ff/compiler/Wildcards.mjs +4 -2
  152. package/output/js/ff/compiler/Workspace.mjs +26 -20
  153. package/output/js/ff/core/Any.mjs +20 -20
  154. package/output/js/ff/core/Array.mjs +268 -175
  155. package/output/js/ff/core/AssetSystem.mjs +8 -6
  156. package/output/js/ff/core/Atomic.mjs +84 -52
  157. package/output/js/ff/core/Bool.mjs +6 -4
  158. package/output/js/ff/core/BrowserSystem.mjs +38 -29
  159. package/output/js/ff/core/Buffer.mjs +285 -133
  160. package/output/js/ff/core/BuildSystem.mjs +36 -56
  161. package/output/js/ff/core/Channel.mjs +250 -97
  162. package/output/js/ff/core/Char.mjs +5 -3
  163. package/output/js/ff/core/Core.mjs +28 -34
  164. package/output/js/ff/core/Crypto.mjs +30 -52
  165. package/output/js/ff/core/Duration.mjs +4 -2
  166. package/output/js/ff/core/Equal.mjs +14 -12
  167. package/output/js/ff/core/Error.mjs +17 -11
  168. package/output/js/ff/core/FileHandle.mjs +76 -38
  169. package/output/js/ff/core/Float.mjs +92 -160
  170. package/output/js/ff/core/HttpClient.mjs +208 -76
  171. package/output/js/ff/core/Instant.mjs +8 -10
  172. package/output/js/ff/core/Int.mjs +36 -26
  173. package/output/js/ff/core/IntMap.mjs +79 -33
  174. package/output/js/ff/core/Js.mjs +751 -0
  175. package/output/js/ff/core/JsSystem.mjs +54 -60
  176. package/output/js/ff/core/JsValue.mjs +294 -143
  177. package/output/js/ff/core/Json.mjs +443 -253
  178. package/output/js/ff/core/List.mjs +262 -214
  179. package/output/js/ff/core/Lock.mjs +156 -125
  180. package/output/js/ff/core/Log.mjs +20 -10
  181. package/output/js/ff/core/Map.mjs +10 -8
  182. package/output/js/ff/core/NodeSystem.mjs +189 -123
  183. package/output/js/ff/core/Nothing.mjs +4 -2
  184. package/output/js/ff/core/Option.mjs +40 -38
  185. package/output/js/ff/core/Ordering.mjs +26 -20
  186. package/output/js/ff/core/Pair.mjs +4 -2
  187. package/output/js/ff/core/Path.mjs +517 -315
  188. package/output/js/ff/core/Queue.mjs +306 -0
  189. package/output/js/ff/core/Random.mjs +141 -77
  190. package/output/js/ff/core/RbMap.mjs +36 -34
  191. package/output/js/ff/core/Serializable.mjs +44 -28
  192. package/output/js/ff/core/Set.mjs +6 -4
  193. package/output/js/ff/core/Show.mjs +8 -6
  194. package/output/js/ff/core/SourceLocation.mjs +4 -2
  195. package/output/js/ff/core/Stream.mjs +30 -50
  196. package/output/js/ff/core/String.mjs +263 -172
  197. package/output/js/ff/core/StringMap.mjs +77 -31
  198. package/output/js/ff/core/Task.mjs +91 -76
  199. package/output/js/ff/core/Try.mjs +20 -18
  200. package/output/js/ff/core/Unit.mjs +4 -2
  201. package/package.json +1 -1
  202. package/postgresql/Pg.ff +53 -59
  203. package/rpc/.firefly/package.ff +1 -1
  204. package/rpc/Rpc.ff +70 -70
  205. package/s3/.firefly/package.ff +1 -1
  206. package/s3/S3.ff +92 -94
  207. package/vscode/LICENSE.txt +21 -21
  208. package/vscode/Prepublish.ff +15 -15
  209. package/vscode/README.md +16 -16
  210. package/vscode/client/package-lock.json +544 -544
  211. package/vscode/client/package.json +22 -22
  212. package/vscode/client/src/extension.ts +104 -104
  213. package/vscode/icons/firefly-icon.svg +10 -10
  214. package/vscode/language-configuration.json +61 -61
  215. package/vscode/package-lock.json +3623 -3623
  216. package/vscode/package.json +1 -1
  217. package/vscode/snippets.json +241 -241
  218. package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
  219. package/webserver/.firefly/include/package.json +5 -5
  220. package/webserver/.firefly/package.ff +2 -2
  221. package/webserver/WebServer.ff +647 -685
  222. package/websocket/.firefly/package.ff +1 -1
  223. package/websocket/WebSocket.ff +100 -131
  224. package/core/UnsafeJs.ff +0 -42
  225. package/output/js/ff/core/UnsafeJs.mjs +0 -191
@@ -1,203 +1,203 @@
1
- import Syntax
2
- import Unification
3
- import Environment
4
-
5
- class LspHook(
6
- at: Location
7
- definedAt: Location
8
- insertIdentifier: Bool
9
- trackSymbols: Bool
10
- arrayOfResults: Array[ResultHook]
11
- )
12
-
13
- disabled(): LspHook {
14
- new(None, None, False, False)
15
- }
16
-
17
- new(at: Option[Location], definedAt: Option[Location], insertIdentifier: Bool, trackSymbols: Bool): LspHook {
18
- LspHook( // Default dummy values instead of Option[Location] to speed up location hit check
19
- at = at.else {Location("^lsp", -7, -7)}
20
- definedAt = definedAt.else {Location("^lsp", -7, -7)}
21
- insertIdentifier = insertIdentifier
22
- trackSymbols = trackSymbols
23
- arrayOfResults = [].toArray()
24
- )
25
- }
26
-
27
- extend self: LspHook {
28
- isEnabled(): Bool {
29
- self.at.line != -7 ||
30
- self.definedAt.line != -7 ||
31
- self.trackSymbols
32
- }
33
- isAt(at: Location): Bool {
34
- self.at.line == at.line &&
35
- self.at.column == at.column &&
36
- self.at.file == at.file
37
- }
38
- isDefinedAt(at: Location): Bool {
39
- self.definedAt.line == at.line &&
40
- self.definedAt.column == at.column &&
41
- self.definedAt.file == at.file
42
- }
43
- emit(result: ResultHook) {
44
- self.arrayOfResults.push(result)
45
- }
46
- results(): List[ResultHook] {
47
- self.arrayOfResults.toList()
48
- }
49
- }
50
-
51
- strictlyBetween(afterAt: Location, beforeAt: Location, at: Location, extraColumns: Int): Bool {
52
- at.file == afterAt.file && (
53
- (at.line == afterAt.line && at.column > afterAt.column) ||
54
- at.line > afterAt.line
55
- ) && (
56
- (at.line == beforeAt.line && at.column < beforeAt.column + extraColumns) ||
57
- at.line < beforeAt.line
58
- )
59
- }
60
-
61
- data SymbolHook(
62
- qualifiedName: String
63
- usageAt: Location
64
- definedAt: Location
65
- )
66
-
67
- class Box[T](mutable value: T)
68
-
69
- data DocumentSymbolKind {
70
- SLet(mutable: Bool)
71
- SFunction(member: Bool)
72
- SExtend
73
- STraitFunction
74
- STrait
75
- SInstance
76
- SVariant
77
- SType
78
- SParameter
79
- }
80
-
81
- class ResultHook {
82
- ParseSymbolBegin
83
- ParseSymbolEnd(
84
- name: String
85
- kind: DocumentSymbolKind
86
- selectionStart: Location
87
- selectionEnd: Location
88
- start: Location
89
- end: Location
90
- )
91
- ParseArgumentHook(
92
- callAt: Location
93
- argumentIndex: Int
94
- parameterName: Option[String]
95
- )
96
- ResolveSymbolHook(
97
- symbol: SymbolHook
98
- annotation: Option[Type]
99
- topLevel: Bool
100
- )
101
- ResolveTypeHook(
102
- types: Map[String, String]
103
- typeGenerics: Map[String, List[String]]
104
- symbol: SymbolHook
105
- explicitType: Type
106
- )
107
- ResolveConstraintHook(
108
- symbol: SymbolHook
109
- constrant: Constraint
110
- )
111
- ResolveSignatureHook(
112
- signature: Signature
113
- isInstanceMethod: Bool
114
- topLevel: Bool
115
- )
116
- ResolveVariantFieldHook(
117
- symbol: SymbolHook
118
- type: Type
119
- commonField: Bool
120
- )
121
- InferTermHook(
122
- unification: Unification
123
- environment: Environment
124
- expected: Type
125
- term: Term
126
- recordType: Box[Option[Type]]
127
- missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
128
- )
129
- InferLambdaStartHook(
130
- unification: Unification
131
- environment: Environment
132
- lambdaType: Type
133
- )
134
- InferSequentialStartHook(
135
- unification: Unification
136
- term: Term
137
- missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
138
- )
139
- InferFunctionDefinitionHook(
140
- unification: Unification
141
- environment: Environment
142
- definition: DFunction
143
- missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
144
- )
145
- InferPatternHook(
146
- unification: Unification
147
- environment: Environment
148
- expected: Type
149
- pattern: MatchPattern
150
- )
151
- InferParameterHook(
152
- unification: Unification
153
- environment: Environment
154
- parameter: Parameter
155
- missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
156
- )
157
- InferArgumentHook(
158
- unification: Unification
159
- environment: Environment
160
- isCopy: Bool
161
- callAt: Location
162
- callName: String
163
- parameters: List[Parameter]
164
- arguments: List[Argument]
165
- argumentIndex: Int
166
- )
167
- InferLookupHook(
168
- unification: Unification
169
- environment: Environment
170
- expected: Type
171
- selfVariable: Option[String]
172
- symbol: Box[SymbolHook]
173
- instantiated: Box[Option[Instantiated]]
174
- )
175
- InferRecordFieldHook(
176
- usageAt: Location
177
- unification: Unification
178
- environment: Environment
179
- expected: Type
180
- recordType: Type
181
- fieldName: String
182
- )
183
- }
184
-
185
- showHook(hook: ResultHook): String {
186
- | InferArgumentHook(unification, environment, isCopy, callAt, callName, parameters, arguments, argumentIndex) => "InferArgumentHook(...)"
187
- | InferFunctionDefinitionHook(unification, environment, definition, missing) => "InferFunctionDefinitionHook(...)"
188
- | InferLambdaStartHook(unification, environment, lambdaType) => "InferLambdaStartHook(...)"
189
- | InferLookupHook(unification, environment, expected, selfVariable, symbol, instantiated) => "InferLookupHook(...)"
190
- | InferParameterHook(unification, environment, parameter, missing) => "InferParameterHook(...)"
191
- | InferPatternHook(unification, environment, expected, pattern) => "InferPatternHook(...)"
192
- | InferRecordFieldHook(usageAt, unification, environment, expected, recordType, fieldName) => "InferRecordFieldHook(...)"
193
- | InferSequentialStartHook(unification, term, missing) => "InferSequentialStartHook(...)"
194
- | InferTermHook(unification, environment, expected, term, recordType, missing) => "InferTermHook(...)"
195
- | ParseArgumentHook(callAt, argumentIndex, parameterName) => "ParseArgumentHook(...)"
196
- | ParseSymbolBegin => "ParseSymbolBegin(...)"
197
- | ParseSymbolEnd(name, kind, selectionStart, selectionEnd, start, end) => "ParseSymbolEnd(...)"
198
- | ResolveConstraintHook(symbol, constrant) => "ResolveConstraintHook(...)"
199
- | ResolveSignatureHook(signature, _, _) => "ResolveSignatureHook(...)"
200
- | ResolveSymbolHook(symbol, annotation, _) => "ResolveSymbolHook(...)"
201
- | ResolveTypeHook(types, typeGenerics, symbol, explicitType) => "ResolveTypeHook(...)"
202
- | ResolveVariantFieldHook(symbol, type, commonField) => "ResolveVariantFieldHook(...)"
1
+ import Syntax
2
+ import Unification
3
+ import Environment
4
+
5
+ class LspHook(
6
+ at: Location
7
+ definedAt: Location
8
+ insertIdentifier: Bool
9
+ trackSymbols: Bool
10
+ arrayOfResults: Array[ResultHook]
11
+ )
12
+
13
+ disabled(): LspHook {
14
+ new(None, None, False, False)
15
+ }
16
+
17
+ new(at: Option[Location], definedAt: Option[Location], insertIdentifier: Bool, trackSymbols: Bool): LspHook {
18
+ LspHook( // Default dummy values instead of Option[Location] to speed up location hit check
19
+ at = at.else {Location("^lsp", -7, -7)}
20
+ definedAt = definedAt.else {Location("^lsp", -7, -7)}
21
+ insertIdentifier = insertIdentifier
22
+ trackSymbols = trackSymbols
23
+ arrayOfResults = [].toArray()
24
+ )
25
+ }
26
+
27
+ extend self: LspHook {
28
+ isEnabled(): Bool {
29
+ self.at.line != -7 ||
30
+ self.definedAt.line != -7 ||
31
+ self.trackSymbols
32
+ }
33
+ isAt(at: Location): Bool {
34
+ self.at.line == at.line &&
35
+ self.at.column == at.column &&
36
+ self.at.file == at.file
37
+ }
38
+ isDefinedAt(at: Location): Bool {
39
+ self.definedAt.line == at.line &&
40
+ self.definedAt.column == at.column &&
41
+ self.definedAt.file == at.file
42
+ }
43
+ emit(result: ResultHook) {
44
+ self.arrayOfResults.push(result)
45
+ }
46
+ results(): List[ResultHook] {
47
+ self.arrayOfResults.toList()
48
+ }
49
+ }
50
+
51
+ strictlyBetween(afterAt: Location, beforeAt: Location, at: Location, extraColumns: Int): Bool {
52
+ at.file == afterAt.file && (
53
+ (at.line == afterAt.line && at.column > afterAt.column) ||
54
+ at.line > afterAt.line
55
+ ) && (
56
+ (at.line == beforeAt.line && at.column < beforeAt.column + extraColumns) ||
57
+ at.line < beforeAt.line
58
+ )
59
+ }
60
+
61
+ data SymbolHook(
62
+ qualifiedName: String
63
+ usageAt: Location
64
+ definedAt: Location
65
+ )
66
+
67
+ class Box[T](mutable value: T)
68
+
69
+ data DocumentSymbolKind {
70
+ SLet(mutable: Bool)
71
+ SFunction(member: Bool)
72
+ SExtend
73
+ STraitFunction
74
+ STrait
75
+ SInstance
76
+ SVariant
77
+ SType
78
+ SParameter
79
+ }
80
+
81
+ class ResultHook {
82
+ ParseSymbolBegin
83
+ ParseSymbolEnd(
84
+ name: String
85
+ kind: DocumentSymbolKind
86
+ selectionStart: Location
87
+ selectionEnd: Location
88
+ start: Location
89
+ end: Location
90
+ )
91
+ ParseArgumentHook(
92
+ callAt: Location
93
+ argumentIndex: Int
94
+ parameterName: Option[String]
95
+ )
96
+ ResolveSymbolHook(
97
+ symbol: SymbolHook
98
+ annotation: Option[Type]
99
+ topLevel: Bool
100
+ )
101
+ ResolveTypeHook(
102
+ types: Map[String, String]
103
+ typeGenerics: Map[String, List[String]]
104
+ symbol: SymbolHook
105
+ explicitType: Type
106
+ )
107
+ ResolveConstraintHook(
108
+ symbol: SymbolHook
109
+ constrant: Constraint
110
+ )
111
+ ResolveSignatureHook(
112
+ signature: Signature
113
+ isInstanceMethod: Bool
114
+ topLevel: Bool
115
+ )
116
+ ResolveVariantFieldHook(
117
+ symbol: SymbolHook
118
+ type: Type
119
+ commonField: Bool
120
+ )
121
+ InferTermHook(
122
+ unification: Unification
123
+ environment: Environment
124
+ expected: Type
125
+ term: Term
126
+ recordType: Box[Option[Type]]
127
+ missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
128
+ )
129
+ InferLambdaStartHook(
130
+ unification: Unification
131
+ environment: Environment
132
+ lambdaType: Type
133
+ )
134
+ InferSequentialStartHook(
135
+ unification: Unification
136
+ term: Term
137
+ missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
138
+ )
139
+ InferFunctionDefinitionHook(
140
+ unification: Unification
141
+ environment: Environment
142
+ definition: DFunction
143
+ missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
144
+ )
145
+ InferPatternHook(
146
+ unification: Unification
147
+ environment: Environment
148
+ expected: Type
149
+ pattern: MatchPattern
150
+ )
151
+ InferParameterHook(
152
+ unification: Unification
153
+ environment: Environment
154
+ parameter: Parameter
155
+ missing: StringMap[Pair[Instantiated, Option[List[Argument]]]]
156
+ )
157
+ InferArgumentHook(
158
+ unification: Unification
159
+ environment: Environment
160
+ isCopy: Bool
161
+ callAt: Location
162
+ callName: String
163
+ parameters: List[Parameter]
164
+ arguments: List[Argument]
165
+ argumentIndex: Int
166
+ )
167
+ InferLookupHook(
168
+ unification: Unification
169
+ environment: Environment
170
+ expected: Type
171
+ selfVariable: Option[String]
172
+ symbol: Box[SymbolHook]
173
+ instantiated: Box[Option[Instantiated]]
174
+ )
175
+ InferRecordFieldHook(
176
+ usageAt: Location
177
+ unification: Unification
178
+ environment: Environment
179
+ expected: Type
180
+ recordType: Type
181
+ fieldName: String
182
+ )
183
+ }
184
+
185
+ showHook(hook: ResultHook): String {
186
+ | InferArgumentHook(unification, environment, isCopy, callAt, callName, parameters, arguments, argumentIndex) => "InferArgumentHook(...)"
187
+ | InferFunctionDefinitionHook(unification, environment, definition, missing) => "InferFunctionDefinitionHook(...)"
188
+ | InferLambdaStartHook(unification, environment, lambdaType) => "InferLambdaStartHook(...)"
189
+ | InferLookupHook(unification, environment, expected, selfVariable, symbol, instantiated) => "InferLookupHook(...)"
190
+ | InferParameterHook(unification, environment, parameter, missing) => "InferParameterHook(...)"
191
+ | InferPatternHook(unification, environment, expected, pattern) => "InferPatternHook(...)"
192
+ | InferRecordFieldHook(usageAt, unification, environment, expected, recordType, fieldName) => "InferRecordFieldHook(...)"
193
+ | InferSequentialStartHook(unification, term, missing) => "InferSequentialStartHook(...)"
194
+ | InferTermHook(unification, environment, expected, term, recordType, missing) => "InferTermHook(...)"
195
+ | ParseArgumentHook(callAt, argumentIndex, parameterName) => "ParseArgumentHook(...)"
196
+ | ParseSymbolBegin => "ParseSymbolBegin(...)"
197
+ | ParseSymbolEnd(name, kind, selectionStart, selectionEnd, start, end) => "ParseSymbolEnd(...)"
198
+ | ResolveConstraintHook(symbol, constrant) => "ResolveConstraintHook(...)"
199
+ | ResolveSignatureHook(signature, _, _) => "ResolveSignatureHook(...)"
200
+ | ResolveSymbolHook(symbol, annotation, _) => "ResolveSymbolHook(...)"
201
+ | ResolveTypeHook(types, typeGenerics, symbol, explicitType) => "ResolveTypeHook(...)"
202
+ | ResolveVariantFieldHook(symbol, type, commonField) => "ResolveVariantFieldHook(...)"
203
203
  }
package/compiler/Main.ff CHANGED
@@ -249,20 +249,21 @@ importAndRun(
249
249
  packagePair: PackagePair
250
250
  mainFile: String
251
251
  arguments: List[String]
252
- ): Bool
253
- target node async """
254
- const process = await import('process');
255
- const cwd = process.cwd();
256
- const workingDirectory = cwd.indexOf(':') == 1 ? 'file:///' + cwd : cwd;
257
- const packagePath = packagePair_.group_ + "/" + packagePair_.name_
258
- const main = await import(workingDirectory + "/.firefly/output/" + target_ + "/" + packagePath + "/" + mainFile_ + ".mjs");
259
- if(typeof main.$run$ !== 'undefined') {
260
- await main.$run$(fireflyPath_, arguments_);
261
- return true;
262
- } else {
263
- return false;
264
- }
265
- """
252
+ ): Bool {
253
+ let process = Js.await(Js.dynamicImport("process"))
254
+ let cwd = process->cwd()
255
+ let workingDirectory = if(cwd->indexOf(":") === 1) {"file:///" + cwd?} else {cwd?}
256
+ let packagePath = packagePair.group + "/" + packagePair.name
257
+ let main = Js.await(Js.dynamicImport(
258
+ workingDirectory + "/.firefly/output/" + target + "/" + packagePath + "/" + mainFile + ".mjs"
259
+ ))
260
+ if(main->"$run$".typeof() != "undefined") {
261
+ main->"$run$"(fireflyPath.absolutePath, arguments)
262
+ True
263
+ } else {
264
+ False
265
+ }
266
+ }
266
267
 
267
268
  prepareFireflyDirectory(path: Path) {
268
269
  if(!path.slash(".firefly").slash("output").exists()) {
@@ -273,13 +274,13 @@ prepareFireflyDirectory(path: Path) {
273
274
  }
274
275
  }
275
276
 
276
- detectFireflyPath(system: NodeSystem): Path
277
- target node async """
278
- import * as url from 'url'
279
- const suffix = '/output/js/ff/compiler/Main.mjs'
280
- const moduleUrl = import.meta.url
281
- if(!import.meta.url.endsWith(suffix)) {
282
- throw 'Expected module path to end with: ' + suffix + ", but got: " + moduleUrl;
283
- }
284
- return url.fileURLToPath(new URL(moduleUrl.slice(0, -suffix.length)))
285
- """
277
+ detectFireflyPath(system: NodeSystem): Path {
278
+ let url = Js.import("url")
279
+ let suffix = "/output/js/ff/compiler/Main.mjs"
280
+ let moduleUrl = Js->import->meta->url
281
+ if(!Js->import->meta->url->endsWith(suffix)?) {
282
+ Js.throw(Js->Error->("Expected module path to end with: " + suffix + ", but got: " + moduleUrl?))
283
+ } else {
284
+ Path(url->fileURLToPath(Js->URL->(moduleUrl->slice(0, -suffix.size())))?)
285
+ }
286
+ }