firefly-compiler 0.4.4

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 (221) hide show
  1. package/.firefly-workspace +1 -0
  2. package/.vscode/settings.json +5 -0
  3. package/LICENSE.txt +21 -0
  4. package/README.md +96 -0
  5. package/bin/firefly.mjs +2 -0
  6. package/compiler/.firefly/package.ff +1 -0
  7. package/compiler/Builder.ff +218 -0
  8. package/compiler/Compiler.ff +241 -0
  9. package/compiler/Dependencies.ff +179 -0
  10. package/compiler/Deriver.ff +647 -0
  11. package/compiler/Dictionaries.ff +205 -0
  12. package/compiler/Environment.ff +166 -0
  13. package/compiler/Inference.ff +1117 -0
  14. package/compiler/JsEmitter.ff +861 -0
  15. package/compiler/JsImporter.ff +56 -0
  16. package/compiler/LspHook.ff +188 -0
  17. package/compiler/Main.ff +237 -0
  18. package/compiler/Parser.ff +1383 -0
  19. package/compiler/Patterns.ff +111 -0
  20. package/compiler/Resolver.ff +620 -0
  21. package/compiler/Substitution.ff +178 -0
  22. package/compiler/Syntax.ff +299 -0
  23. package/compiler/Token.ff +180 -0
  24. package/compiler/Tokenizer.ff +278 -0
  25. package/compiler/Unification.ff +220 -0
  26. package/compiler/Wildcards.ff +50 -0
  27. package/compiler/Workspace.ff +88 -0
  28. package/core/.firefly/package.ff +2 -0
  29. package/core/Any.ff +30 -0
  30. package/core/Array.ff +249 -0
  31. package/core/AssetSystem.ff +61 -0
  32. package/core/Atomic.ff +64 -0
  33. package/core/Bool.ff +13 -0
  34. package/core/BrowserSystem.ff +14 -0
  35. package/core/Buffer.ff +211 -0
  36. package/core/BuildSystem.ff +144 -0
  37. package/core/Channel.ff +131 -0
  38. package/core/Char.ff +18 -0
  39. package/core/Core.ff +58 -0
  40. package/core/Duration.ff +15 -0
  41. package/core/Equal.ff +52 -0
  42. package/core/Error.ff +20 -0
  43. package/core/FileHandle.ff +41 -0
  44. package/core/Float.ff +41 -0
  45. package/core/HttpClient.ff +84 -0
  46. package/core/Instant.ff +9 -0
  47. package/core/Int.ff +61 -0
  48. package/core/IntMap.ff +85 -0
  49. package/core/JsSystem.ff +66 -0
  50. package/core/JsValue.ff +240 -0
  51. package/core/List.ff +440 -0
  52. package/core/Lock.ff +144 -0
  53. package/core/Log.ff +24 -0
  54. package/core/Map.ff +126 -0
  55. package/core/NodeSystem.ff +88 -0
  56. package/core/Nothing.ff +1 -0
  57. package/core/Option.ff +133 -0
  58. package/core/Ordering.ff +157 -0
  59. package/core/Pair.ff +55 -0
  60. package/core/Path.ff +393 -0
  61. package/core/RbMap.ff +216 -0
  62. package/core/Serializable.ff +173 -0
  63. package/core/Set.ff +38 -0
  64. package/core/Show.ff +43 -0
  65. package/core/Stack.ff +263 -0
  66. package/core/Stream.ff +406 -0
  67. package/core/String.ff +175 -0
  68. package/core/StringMap.ff +85 -0
  69. package/core/Task.ff +138 -0
  70. package/core/Try.ff +81 -0
  71. package/core/Unit.ff +3 -0
  72. package/experimental/random/AltGeneric.ff +44 -0
  73. package/experimental/random/Async.ff +68 -0
  74. package/experimental/random/Buffer2.ff +77 -0
  75. package/experimental/random/Cat.ff +12 -0
  76. package/experimental/random/Dictionary.ff +52 -0
  77. package/experimental/random/Example.ff +46 -0
  78. package/experimental/random/Generic.ff +102 -0
  79. package/experimental/random/HappyEyeballs.ff +40 -0
  80. package/experimental/random/HashMap.ff +72 -0
  81. package/experimental/random/IfElseUnit.ff +9 -0
  82. package/experimental/random/InputOutput.ff +23 -0
  83. package/experimental/random/ListVsArray.ff +45 -0
  84. package/experimental/random/Main.ff +44 -0
  85. package/experimental/random/MapTest.ff +67 -0
  86. package/experimental/random/OldTaskSystem.ff +210 -0
  87. package/experimental/random/PatternTest.ff +39 -0
  88. package/experimental/random/Patterns.ff +226 -0
  89. package/experimental/random/ReadBytesTest.ff +10 -0
  90. package/experimental/random/RunLength.ff +65 -0
  91. package/experimental/random/Scrape.ff +51 -0
  92. package/experimental/random/Serialization.ff +217 -0
  93. package/experimental/random/SerializationTest.ff +46 -0
  94. package/experimental/random/Serializer.ff +36 -0
  95. package/experimental/random/StdInOutErr.ff +4 -0
  96. package/experimental/random/Symbols.ff +74 -0
  97. package/experimental/random/Tag.ff +49 -0
  98. package/experimental/random/Tensor.ff +52 -0
  99. package/experimental/random/Try.ff +56 -0
  100. package/experimental/random/Tsv.ff +9 -0
  101. package/experimental/random/TypesAreModules.ff +87 -0
  102. package/experimental/random/blueprints/Blueprint.ff +52 -0
  103. package/experimental/random/blueprints/Main.ff +11 -0
  104. package/experimental/random/blueprints/Pretty.ff +58 -0
  105. package/experimental/random/blueprints/User.ff +64 -0
  106. package/experimental/random/blueprintsystem/BlueprintSystem.ff +48 -0
  107. package/experimental/random/blueprintsystem/Deserialize.ff +53 -0
  108. package/experimental/random/blueprintsystem/ReadJs.ff +13 -0
  109. package/experimental/random/blueprintsystem/User.ff +2 -0
  110. package/experimental/random/kahrs/Kahrs.ff +112 -0
  111. package/experimental/random/kahrs/TestKahrs.ff +22 -0
  112. package/experimental/random/kahrs/TestMap.ff +18 -0
  113. package/experimental/random/streaming/Gzip.ff +3 -0
  114. package/experimental/random/streaming/Main.ff +34 -0
  115. package/experimental/random/streaming/S3Bucket.ff +11 -0
  116. package/experimental/random/streaming/Tar.ff +5 -0
  117. package/experimental/rhymeapp/Main.ff +81 -0
  118. package/experimental/rhymeapp/index.html +14 -0
  119. package/firefly.sh +5 -0
  120. package/fireflysite/Main.ff +13 -0
  121. package/httpserver/.firefly/package.ff +1 -0
  122. package/httpserver/HttpServer.ff +184 -0
  123. package/lsp/.firefly/package.ff +1 -0
  124. package/lsp/CompletionHandler.ff +814 -0
  125. package/lsp/Handler.ff +551 -0
  126. package/lsp/HoverHandler.ff +82 -0
  127. package/lsp/LanguageServer.ff +229 -0
  128. package/lsp/SignatureHelpHandler.ff +55 -0
  129. package/lsp/SymbolHandler.ff +167 -0
  130. package/output/js/ff/compiler/Builder.mjs +483 -0
  131. package/output/js/ff/compiler/Compiler.mjs +410 -0
  132. package/output/js/ff/compiler/Dependencies.mjs +388 -0
  133. package/output/js/ff/compiler/Deriver.mjs +1166 -0
  134. package/output/js/ff/compiler/Dictionaries.mjs +1305 -0
  135. package/output/js/ff/compiler/Environment.mjs +1005 -0
  136. package/output/js/ff/compiler/Inference.mjs +4264 -0
  137. package/output/js/ff/compiler/JsEmitter.mjs +5353 -0
  138. package/output/js/ff/compiler/JsImporter.mjs +262 -0
  139. package/output/js/ff/compiler/LspHook.mjs +789 -0
  140. package/output/js/ff/compiler/Main.mjs +1695 -0
  141. package/output/js/ff/compiler/Parser.mjs +4004 -0
  142. package/output/js/ff/compiler/Patterns.mjs +923 -0
  143. package/output/js/ff/compiler/Resolver.mjs +2303 -0
  144. package/output/js/ff/compiler/Substitution.mjs +1146 -0
  145. package/output/js/ff/compiler/Syntax.mjs +12430 -0
  146. package/output/js/ff/compiler/Token.mjs +3092 -0
  147. package/output/js/ff/compiler/Tokenizer.mjs +589 -0
  148. package/output/js/ff/compiler/Unification.mjs +1748 -0
  149. package/output/js/ff/compiler/Wildcards.mjs +604 -0
  150. package/output/js/ff/compiler/Workspace.mjs +683 -0
  151. package/output/js/ff/core/Any.mjs +139 -0
  152. package/output/js/ff/core/Array.mjs +594 -0
  153. package/output/js/ff/core/AssetSystem.mjs +270 -0
  154. package/output/js/ff/core/Atomic.mjs +186 -0
  155. package/output/js/ff/core/Bool.mjs +141 -0
  156. package/output/js/ff/core/BrowserSystem.mjs +122 -0
  157. package/output/js/ff/core/Buffer.mjs +467 -0
  158. package/output/js/ff/core/BuildSystem.mjs +320 -0
  159. package/output/js/ff/core/Channel.mjs +268 -0
  160. package/output/js/ff/core/Char.mjs +145 -0
  161. package/output/js/ff/core/Core.mjs +300 -0
  162. package/output/js/ff/core/Duration.mjs +112 -0
  163. package/output/js/ff/core/Equal.mjs +175 -0
  164. package/output/js/ff/core/Error.mjs +138 -0
  165. package/output/js/ff/core/FileHandle.mjs +164 -0
  166. package/output/js/ff/core/Float.mjs +214 -0
  167. package/output/js/ff/core/HttpClient.mjs +210 -0
  168. package/output/js/ff/core/Instant.mjs +105 -0
  169. package/output/js/ff/core/Int.mjs +254 -0
  170. package/output/js/ff/core/IntMap.mjs +282 -0
  171. package/output/js/ff/core/JsSystem.mjs +234 -0
  172. package/output/js/ff/core/JsValue.mjs +678 -0
  173. package/output/js/ff/core/List.mjs +2335 -0
  174. package/output/js/ff/core/Lock.mjs +322 -0
  175. package/output/js/ff/core/Log.mjs +159 -0
  176. package/output/js/ff/core/Map.mjs +358 -0
  177. package/output/js/ff/core/NodeSystem.mjs +288 -0
  178. package/output/js/ff/core/Nothing.mjs +100 -0
  179. package/output/js/ff/core/Option.mjs +1002 -0
  180. package/output/js/ff/core/Ordering.mjs +734 -0
  181. package/output/js/ff/core/Pair.mjs +318 -0
  182. package/output/js/ff/core/Path.mjs +768 -0
  183. package/output/js/ff/core/RbMap.mjs +1936 -0
  184. package/output/js/ff/core/Serializable.mjs +434 -0
  185. package/output/js/ff/core/Set.mjs +250 -0
  186. package/output/js/ff/core/Show.mjs +201 -0
  187. package/output/js/ff/core/Stack.mjs +595 -0
  188. package/output/js/ff/core/Stream.mjs +1300 -0
  189. package/output/js/ff/core/String.mjs +433 -0
  190. package/output/js/ff/core/StringMap.mjs +282 -0
  191. package/output/js/ff/core/Task.mjs +345 -0
  192. package/output/js/ff/core/Try.mjs +503 -0
  193. package/output/js/ff/core/Unit.mjs +103 -0
  194. package/package.json +29 -0
  195. package/postgresql/.firefly/include/package-lock.json +250 -0
  196. package/postgresql/.firefly/include/package.json +5 -0
  197. package/postgresql/.firefly/include/prepare.sh +2 -0
  198. package/postgresql/.firefly/package.ff +3 -0
  199. package/postgresql/Pg.ff +530 -0
  200. package/unsafejs/.firefly/package.ff +1 -0
  201. package/unsafejs/UnsafeJs.ff +19 -0
  202. package/vscode/.vscode/launch.json +18 -0
  203. package/vscode/.vscode/tasks.json +33 -0
  204. package/vscode/LICENSE.txt +21 -0
  205. package/vscode/Prepublish.ff +15 -0
  206. package/vscode/README.md +17 -0
  207. package/vscode/client/package-lock.json +544 -0
  208. package/vscode/client/package.json +22 -0
  209. package/vscode/client/src/extension.ts +64 -0
  210. package/vscode/client/tsconfig.json +12 -0
  211. package/vscode/icons/firefly-icon.png +0 -0
  212. package/vscode/icons/firefly-icon.svg +10 -0
  213. package/vscode/icons/firefly-logo-notext.png +0 -0
  214. package/vscode/icons/firefly-logo.png +0 -0
  215. package/vscode/language-configuration.json +39 -0
  216. package/vscode/package-lock.json +3623 -0
  217. package/vscode/package.json +144 -0
  218. package/vscode/snippets-none.json +1 -0
  219. package/vscode/snippets.json +241 -0
  220. package/vscode/syntaxes/firefly.tmLanguage.json +294 -0
  221. package/vscode/tsconfig.json +20 -0
package/core/IntMap.ff ADDED
@@ -0,0 +1,85 @@
1
+ class IntMap[V] {}
2
+
3
+ make[V](): IntMap[V]
4
+ target js sync "return new Map()"
5
+
6
+ extend self[V]: IntMap[V] {
7
+
8
+ get(key: Int): Option[V]
9
+ target js sync "return self_.has(key_) ? ff_core_Option.Some(self_.get(key_)) : ff_core_Option.None()"
10
+
11
+ grab(key: Int): V
12
+ target js sync """
13
+ const result = self_.get(key_)
14
+ if(key_ === void 0 && !self_.has(key_)) {
15
+ ff_core_Try.internalThrowGrabException_()
16
+ }
17
+ return result
18
+ """
19
+
20
+ set(key: Int, value: V): Unit
21
+ target js sync "self_.set(key_, value_)"
22
+
23
+ has(key: Int): Bool
24
+ target js sync "return self_.has(key_)"
25
+
26
+ remove(key: Int): Bool
27
+ target js sync "return self_.delete(key_)"
28
+
29
+ clear(): Unit
30
+ target js sync "self_.clear()"
31
+
32
+ size(): Int
33
+ target js sync "return self_.size"
34
+
35
+ each(body: (Int, V) => Unit): Bool
36
+ target js sync "return self_.forEach((v, k) => body_(k, v))"
37
+ target js async "for(const [k, v] of self_) await body_(k, v)"
38
+
39
+ eachWhile(body: (Int, V) => Bool): Bool
40
+ target js sync "for(const [k, v] of self_) if(!body_(k, v)) break"
41
+ target js async "for(const [k, v] of self_) if(!await body_(k, v)) break"
42
+
43
+ toStack(): Stack[Pair[Int, V]] {
44
+ let stack = Stack.make()
45
+ self.each {k, v => stack.push(Pair(k, v))}
46
+ stack
47
+ }
48
+
49
+ toArray(): Array[Pair[Int, V]] {
50
+ self.toStack().drain()
51
+ }
52
+
53
+ toList(): List[Pair[Int, V]] {
54
+ self.toArray().toList()
55
+ }
56
+
57
+ toStream(): Stream[Pair[Int, V]] {
58
+ self.toArray().toStream()
59
+ }
60
+
61
+ toMap(): Map[Int, V] {
62
+ self.toArray().toMap()
63
+ }
64
+
65
+ keys(): List[Int] {
66
+ let stack = Stack.make()
67
+ self.each {k, v => stack.push(k)}
68
+ stack.toList()
69
+ }
70
+
71
+ values(): List[V] {
72
+ let stack = Stack.make()
73
+ self.each {k, v => stack.push(v)}
74
+ stack.toList()
75
+ }
76
+
77
+ copy(): IntMap[V]
78
+ target js sync "return new Map(self_)"
79
+
80
+ getOrSet(key: Int, body: () => V): V {
81
+ if(!self.has(key)) {self.set(key, body())}
82
+ self.grab(key)
83
+ }
84
+
85
+ }
@@ -0,0 +1,66 @@
1
+ class JsSystem {} // TODO: It has to be async if the async ffi is to be called - solve in the compiler?
2
+
3
+ extend self: JsSystem {
4
+
5
+ global(): JsValue
6
+ target js sync "return self_"
7
+
8
+ parseJson(json: String): JsValue
9
+ target js sync "return JSON.parse(json_)"
10
+
11
+ null(): JsValue
12
+ target js sync "return null"
13
+
14
+ undefined(): JsValue
15
+ target js sync "return void 0"
16
+
17
+ value[T: IsJsValue](jsValue: T): JsValue
18
+ target js sync "return jsValue_"
19
+
20
+ object(): JsValue
21
+ target js sync "return {}"
22
+
23
+ array(values: List[JsValue]): JsValue
24
+ target js sync "return ff_core_List.List_toArray(values_)"
25
+
26
+ function0[R](body: () => R): JsValue
27
+ target js sync "return body_"
28
+ target js async "return () => body_($task)"
29
+
30
+ function1[R](body: JsValue => R): JsValue
31
+ target js sync "return body_"
32
+ target js async "return a1 => body_(a1, $task)"
33
+
34
+ function2[R](body: (JsValue, JsValue) => R): JsValue
35
+ target js sync "return body_"
36
+ target js async "return (a1, a2) => body_(a1, a2, $task)"
37
+
38
+ function3[R](body: (JsValue, JsValue, JsValue) => R): JsValue
39
+ target js sync "return body_"
40
+ target js async "return (a1, a2, a3) => body_(a1, a2, a3, $task)"
41
+
42
+ function4[R](body: (JsValue, JsValue, JsValue, JsValue) => R): JsValue
43
+ target js sync "return body_"
44
+ target js async "return (a1, a2, a3, a4) => body_(a1, a2, a3, a4, $task)"
45
+
46
+ function5[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
47
+ target js sync "return body_"
48
+ target js async "return (a1, a2, a3, a4, a5) => body_(a1, a2, a3, a4, a5, $task)"
49
+
50
+ function6[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
51
+ target js sync "return body_"
52
+ target js async "return (a1, a2, a3, a4, a5, a6) => body_(a1, a2, a3, a4, a5, a6, $task)"
53
+
54
+ function7[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
55
+ target js sync "return body_"
56
+ target js async "return (a1, a2, a3, a4, a5, a6, a7) => body_(a1, a2, a3, a4, a5, a6, a7, $task)"
57
+
58
+ function8[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
59
+ target js sync "return body_"
60
+ target js async "return (a1, a2, a3, a4, a5, a6, a7, a8) => body_(a1, a2, a3, a4, a5, a6, a7, a8, $task)"
61
+
62
+ function9[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
63
+ target js sync "return body_"
64
+ target js async "return (a1, a2, a3, a4, a5, a6, a7, a8, a9) => body_(a1, a2, a3, a4, a5, a6, a7, a8, a9, $task)"
65
+
66
+ }
@@ -0,0 +1,240 @@
1
+ class JsValue {}
2
+
3
+ extend self: JsValue {
4
+
5
+ grabString(): String
6
+ target js sync "return self_"
7
+
8
+ grabChar(): Char
9
+ target js sync "return self_"
10
+
11
+ grabInt(): Int
12
+ target js sync "return self_"
13
+
14
+ grabFloat(): Float
15
+ target js sync "return self_"
16
+
17
+ grabBool(): Bool
18
+ target js sync "return self_"
19
+
20
+ grabArray(): Array[JsValue]
21
+ target js sync "return self_"
22
+
23
+ grabBuffer(): Buffer
24
+ target js sync """
25
+ if(!(self_ instanceof DataView)) throw new Error('Expected buffer, got '+ typeof self_);
26
+ return self_
27
+ """
28
+
29
+ isString(): Bool
30
+ target js sync "return typeof self_ === 'string'"
31
+
32
+ isChar(): Bool
33
+ target js sync """
34
+ return Number.isInteger(self_) && Math.abs(self_) <= Number.MAX_SAFE_INTEGER
35
+ && self_ >= 0 && self_ < 1114112
36
+ """
37
+
38
+ isInt(): Bool
39
+ target js sync "return Number.isInteger(self_) && Math.abs(self_) <= Number.MAX_SAFE_INTEGER"
40
+
41
+ isFloat(): Bool
42
+ target js sync "return typeof self_ === 'number'"
43
+
44
+ isBool(): Bool
45
+ target js sync "return typeof self_ === 'boolean'"
46
+
47
+ isArray(): Bool
48
+ target js sync "return Array.isArray(self_)"
49
+
50
+ isObject(): Bool
51
+ target js sync "return self_ != null && typeof self_ === 'object'"
52
+
53
+ isFunction(): Bool
54
+ target js sync "return typeof self_ === 'function'"
55
+
56
+ isNull(): Bool
57
+ target js sync "return self_ === null"
58
+
59
+ isUndefined(): Bool
60
+ target js sync "return typeof self_ === 'undefined'"
61
+
62
+ isNullOrUndefined(): Bool
63
+ target js sync "return self_ == null"
64
+
65
+ isNan(): Bool
66
+ target js sync "return typeof self_ === 'number' && self_ !== self_"
67
+
68
+ isFinite(): Bool
69
+ target js sync "return typeof self_ === 'number' && isFinite(self_)"
70
+
71
+
72
+ get[K: IsJsValue](key: K): JsValue
73
+ target js sync "return self_[key_]"
74
+
75
+ // TODO rename
76
+ getOwn(key: String): Option[JsValue] {
77
+ if(self.hasOwn(key)) {Some(self.get(key))} else {None}
78
+ }
79
+
80
+ set[K: IsJsValue, V: IsJsValue](key: K, value: V): Unit
81
+ target js sync "self_[key_] = value_"
82
+
83
+ with[K: IsJsValue, V: IsJsValue](key: K, value: V): JsValue
84
+ target js sync "return {...self_, [key_]: value_}"
85
+
86
+ hasOwn(name: String): Bool
87
+ target js sync "return Object.prototype.hasOwnProperty.call(self_, name_)"
88
+
89
+
90
+ assign(source: JsValue, source2: JsValue = source): JsValue
91
+ target js sync "return Object.assign(self_, source_, source2_ !== source_ ? source2_ : null)"
92
+
93
+
94
+ each(body: JsValue => Unit): Unit
95
+ target js sync "for(const value of self_) body_(value)"
96
+ target js async "for(const value of self_) await body_(value, $task)"
97
+
98
+ eachWhile(body: JsValue => Bool): Unit
99
+ target js sync "for(const value of self_) if(!body_(value)) break"
100
+ target js async "for(const value of self_) if(!await body_(value, $task)) break"
101
+
102
+
103
+ call(name: String, arguments: List[JsValue]): JsValue
104
+ target js sync "return self_[name_].apply(this_, ff_core_List.List_toArray(arguments_))"
105
+
106
+ call0(name: String): JsValue
107
+ target js sync "return self_[name_].call(self_)"
108
+
109
+ call1[A1: IsJsValue](name: String, a1: A1): JsValue
110
+ target js sync "return self_[name_].call(self_, a1_)"
111
+
112
+ call2[A1: IsJsValue, A2: IsJsValue](name: String, a1: A1, a2: A2): JsValue
113
+ target js sync "return self_[name_].call(self_, a1_, a2_)"
114
+
115
+ call3[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue](name: String, a1: A1, a2: A2, a3: A3): JsValue
116
+ target js sync "return self_[name_].call(self_, a1_, a2_, a3_)"
117
+
118
+ call4[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue](name: String, a1: A1, a2: A2, a3: A3, a4: A4): JsValue
119
+ target js sync "return self_[name_].call(self_, a1_, a2_, a3_, a4_)"
120
+
121
+ call5[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue](name: String, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): JsValue
122
+ target js sync "return self_[name_].call(self_, a1_, a2_, a3_, a4_, a5_)"
123
+
124
+ call6[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue](name: String, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): JsValue
125
+ target js sync "return self_[name_].call(self_, a1_, a2_, a3_, a4_, a5_, a6_)"
126
+
127
+ call7[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue](name: String, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): JsValue
128
+ target js sync "return self_[name_].call(self_, a1_, a2_, a3_, a4_, a5_, a6_, a7_)"
129
+
130
+ call8[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue, A8: IsJsValue](name: String, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): JsValue
131
+ target js sync "return self_[name_].call(self_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_)"
132
+
133
+ call9[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue, A8: IsJsValue, A9: IsJsValue](name: String, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8, a9: A9): JsValue
134
+ target js sync "return self_[name_].call(self_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_)"
135
+
136
+
137
+ callValue(this: JsValue, arguments: List[JsValue]): JsValue
138
+ target js sync "return self_.apply(this_, ff_core_List.List_toArray(arguments_))"
139
+
140
+ callValue0(): JsValue
141
+ target js sync "return self_.call(self_)"
142
+
143
+ callValue1[A1: IsJsValue](a1: A1): JsValue
144
+ target js sync "return self_.call(self_, a1_)"
145
+
146
+ callValue2[A1: IsJsValue, A2: IsJsValue](a1: A1, a2: A2): JsValue
147
+ target js sync "return self_.call(self_, a1_, a2_)"
148
+
149
+ callValue3[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue](a1: A1, a2: A2, a3: A3): JsValue
150
+ target js sync "return self_.call(self_, a1_, a2_, a3_)"
151
+
152
+ callValue4[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4): JsValue
153
+ target js sync "return self_.call(self_, a1_, a2_, a3_, a4_)"
154
+
155
+ callValue5[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): JsValue
156
+ target js sync "return self_.call(self_, a1_, a2_, a3_, a4_, a5_)"
157
+
158
+ callValue6[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): JsValue
159
+ target js sync "return self_.call(self_, a1_, a2_, a3_, a4_, a5_, a6_)"
160
+
161
+ callValue7[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): JsValue
162
+ target js sync "return self_.call(self_, a1_, a2_, a3_, a4_, a5_, a6_, a7_)"
163
+
164
+ callValue8[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue, A8: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): JsValue
165
+ target js sync "return self_.call(self_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_)"
166
+
167
+ callValue9[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue, A8: IsJsValue, A9: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8, a9: A9): JsValue
168
+ target js sync "return self_.call(self_, a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_)"
169
+
170
+
171
+ new(this: JsValue, arguments: List[JsValue]): JsValue
172
+ target js sync "return new (Function.prototype.bind.apply(self_, ff_core_List.List_toArray(arguments_)))"
173
+
174
+ new0(): JsValue
175
+ target js sync "return new self_()"
176
+
177
+ new1[A1: IsJsValue](a1: A1): JsValue
178
+ target js sync "return new self_(a1_)"
179
+
180
+ new2[A1: IsJsValue, A2: IsJsValue](a1: A1, a2: A2): JsValue
181
+ target js sync "return new self_(a1_, a2_)"
182
+
183
+ new3[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue](a1: A1, a2: A2, a3: A3): JsValue
184
+ target js sync "return new self_(a1_, a2_, a3_)"
185
+
186
+ new4[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4): JsValue
187
+ target js sync "return new self_(a1_, a2_, a3_, a4_)"
188
+
189
+ new5[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): JsValue
190
+ target js sync "return new self_(a1_, a2_, a3_, a4_, a5_)"
191
+
192
+ new6[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): JsValue
193
+ target js sync "return new self_(a1_, a2_, a3_, a4_, a5_, a6_)"
194
+
195
+ new7[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): JsValue
196
+ target js sync "return new self_(a1_, a2_, a3_, a4_, a5_, a6_, a7_)"
197
+
198
+ new8[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue, A8: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): JsValue
199
+ target js sync "return new self_(a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_)"
200
+
201
+ new9[A1: IsJsValue, A2: IsJsValue, A3: IsJsValue, A4: IsJsValue, A5: IsJsValue, A6: IsJsValue, A7: IsJsValue, A8: IsJsValue, A9: IsJsValue](a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8, a9: A9): JsValue
202
+ target js sync "return new self_(a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_)"
203
+
204
+
205
+ toJson(space: Option[String] = None): String
206
+ target js sync "return JSON.stringify(self_, null, space_.value_)"
207
+
208
+ grabPairs(): List[Pair[String, JsValue]]
209
+ target js sync """
210
+ if(!(self_ instanceof Object)) throw new Error('Expected object, got '+ typeof self_);;
211
+ let result = ff_core_List.Empty();
212
+ Object.getOwnPropertyNames(self_).forEach((name, i) => {
213
+ let pair = ff_core_Pair.Pair(name, self_[name]);
214
+ result = ff_core_List.Link(pair, result);
215
+ })
216
+ return result;
217
+ """
218
+
219
+ grabMap(): Map[String, JsValue] {
220
+ self.grabPairs().toMap()
221
+ }
222
+ //toArray(): Array[JsValue] // TODO
223
+ //toList(): List[JsValue] // TODO
224
+ // TODO: JS operators
225
+
226
+ }
227
+
228
+ trait T: IsJsValue {}
229
+ instance JsValue: IsJsValue {}
230
+ instance String: IsJsValue {}
231
+ instance Char: IsJsValue {}
232
+ instance Int: IsJsValue {}
233
+ instance Float: IsJsValue {}
234
+ instance Bool: IsJsValue {}
235
+ instance Array[T: IsJsValue]: IsJsValue {}
236
+ instance Error: IsJsValue {}
237
+ instance Instant: IsJsValue {}
238
+ instance Duration: IsJsValue {}
239
+ instance Buffer: IsJsValue {}
240
+ instance Nothing: IsJsValue {}