freelang-v4 4.3.0

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 (261) hide show
  1. package/README.md +548 -0
  2. package/dist/ast.d.ts +367 -0
  3. package/dist/ast.js +4 -0
  4. package/dist/ast.js.map +1 -0
  5. package/dist/async-basic.test.d.ts +1 -0
  6. package/dist/async-basic.test.js +88 -0
  7. package/dist/async-basic.test.js.map +1 -0
  8. package/dist/async-jest.test.d.ts +1 -0
  9. package/dist/async-jest.test.js +99 -0
  10. package/dist/async-jest.test.js.map +1 -0
  11. package/dist/channel-jest.test.d.ts +1 -0
  12. package/dist/channel-jest.test.js +148 -0
  13. package/dist/channel-jest.test.js.map +1 -0
  14. package/dist/checker-jest.test.d.ts +1 -0
  15. package/dist/checker-jest.test.js +160 -0
  16. package/dist/checker-jest.test.js.map +1 -0
  17. package/dist/checker.d.ts +149 -0
  18. package/dist/checker.js +1565 -0
  19. package/dist/checker.js.map +1 -0
  20. package/dist/checker.test.d.ts +1 -0
  21. package/dist/checker.test.js +217 -0
  22. package/dist/checker.test.js.map +1 -0
  23. package/dist/compiler-jest.test.d.ts +1 -0
  24. package/dist/compiler-jest.test.js +233 -0
  25. package/dist/compiler-jest.test.js.map +1 -0
  26. package/dist/compiler.d.ts +127 -0
  27. package/dist/compiler.js +1588 -0
  28. package/dist/compiler.js.map +1 -0
  29. package/dist/compiler.test.d.ts +1 -0
  30. package/dist/compiler.test.js +313 -0
  31. package/dist/compiler.test.js.map +1 -0
  32. package/dist/db-100m-full.d.ts +5 -0
  33. package/dist/db-100m-full.js +78 -0
  34. package/dist/db-100m-full.js.map +1 -0
  35. package/dist/db-100m-no-index.d.ts +12 -0
  36. package/dist/db-100m-no-index.js +119 -0
  37. package/dist/db-100m-no-index.js.map +1 -0
  38. package/dist/db-100m-real.d.ts +5 -0
  39. package/dist/db-100m-real.js +131 -0
  40. package/dist/db-100m-real.js.map +1 -0
  41. package/dist/db-100m-streaming.d.ts +15 -0
  42. package/dist/db-100m-streaming.js +164 -0
  43. package/dist/db-100m-streaming.js.map +1 -0
  44. package/dist/db-100m-test.d.ts +5 -0
  45. package/dist/db-100m-test.js +111 -0
  46. package/dist/db-100m-test.js.map +1 -0
  47. package/dist/db-jest.test.d.ts +1 -0
  48. package/dist/db-jest.test.js +182 -0
  49. package/dist/db-jest.test.js.map +1 -0
  50. package/dist/db-runtime.d.ts +24 -0
  51. package/dist/db-runtime.js +204 -0
  52. package/dist/db-runtime.js.map +1 -0
  53. package/dist/db.d.ts +249 -0
  54. package/dist/db.js +593 -0
  55. package/dist/db.js.map +1 -0
  56. package/dist/file-io-jest.test.d.ts +1 -0
  57. package/dist/file-io-jest.test.js +225 -0
  58. package/dist/file-io-jest.test.js.map +1 -0
  59. package/dist/for-of-jest.test.d.ts +1 -0
  60. package/dist/for-of-jest.test.js +230 -0
  61. package/dist/for-of-jest.test.js.map +1 -0
  62. package/dist/for-of.test.d.ts +1 -0
  63. package/dist/for-of.test.js +305 -0
  64. package/dist/for-of.test.js.map +1 -0
  65. package/dist/function-literal-jest.test.d.ts +1 -0
  66. package/dist/function-literal-jest.test.js +180 -0
  67. package/dist/function-literal-jest.test.js.map +1 -0
  68. package/dist/function-literal.test.d.ts +1 -0
  69. package/dist/function-literal.test.js +245 -0
  70. package/dist/function-literal.test.js.map +1 -0
  71. package/dist/generics-jest.test.d.ts +1 -0
  72. package/dist/generics-jest.test.js +93 -0
  73. package/dist/generics-jest.test.js.map +1 -0
  74. package/dist/ir-gen.d.ts +15 -0
  75. package/dist/ir-gen.js +400 -0
  76. package/dist/ir-gen.js.map +1 -0
  77. package/dist/ir.d.ts +114 -0
  78. package/dist/ir.js +5 -0
  79. package/dist/ir.js.map +1 -0
  80. package/dist/lexer.d.ts +110 -0
  81. package/dist/lexer.js +467 -0
  82. package/dist/lexer.js.map +1 -0
  83. package/dist/lexer.test.d.ts +1 -0
  84. package/dist/lexer.test.js +426 -0
  85. package/dist/lexer.test.js.map +1 -0
  86. package/dist/main.d.ts +2 -0
  87. package/dist/main.js +241 -0
  88. package/dist/main.js.map +1 -0
  89. package/dist/module-jest.test.d.ts +1 -0
  90. package/dist/module-jest.test.js +123 -0
  91. package/dist/module-jest.test.js.map +1 -0
  92. package/dist/parser.d.ts +56 -0
  93. package/dist/parser.js +1060 -0
  94. package/dist/parser.js.map +1 -0
  95. package/dist/parser.test.d.ts +1 -0
  96. package/dist/parser.test.js +461 -0
  97. package/dist/parser.test.js.map +1 -0
  98. package/dist/pattern-matching-jest.test.d.ts +1 -0
  99. package/dist/pattern-matching-jest.test.js +158 -0
  100. package/dist/pattern-matching-jest.test.js.map +1 -0
  101. package/dist/pkg/init.d.ts +1 -0
  102. package/dist/pkg/init.js +118 -0
  103. package/dist/pkg/init.js.map +1 -0
  104. package/dist/pkg/install.d.ts +1 -0
  105. package/dist/pkg/install.js +77 -0
  106. package/dist/pkg/install.js.map +1 -0
  107. package/dist/pkg/registry.d.ts +23 -0
  108. package/dist/pkg/registry.js +106 -0
  109. package/dist/pkg/registry.js.map +1 -0
  110. package/dist/pkg/run.d.ts +1 -0
  111. package/dist/pkg/run.js +76 -0
  112. package/dist/pkg/run.js.map +1 -0
  113. package/dist/pkg/toml.d.ts +5 -0
  114. package/dist/pkg/toml.js +117 -0
  115. package/dist/pkg/toml.js.map +1 -0
  116. package/dist/repl.d.ts +15 -0
  117. package/dist/repl.js +197 -0
  118. package/dist/repl.js.map +1 -0
  119. package/dist/runtime/bytecode.d.ts +92 -0
  120. package/dist/runtime/bytecode.js +253 -0
  121. package/dist/runtime/bytecode.js.map +1 -0
  122. package/dist/runtime/value.d.ts +102 -0
  123. package/dist/runtime/value.js +302 -0
  124. package/dist/runtime/value.js.map +1 -0
  125. package/dist/runtime/vm.d.ts +65 -0
  126. package/dist/runtime/vm.js +293 -0
  127. package/dist/runtime/vm.js.map +1 -0
  128. package/dist/struct-instance-jest.test.d.ts +1 -0
  129. package/dist/struct-instance-jest.test.js +209 -0
  130. package/dist/struct-instance-jest.test.js.map +1 -0
  131. package/dist/struct-instance.test.d.ts +1 -0
  132. package/dist/struct-instance.test.js +291 -0
  133. package/dist/struct-instance.test.js.map +1 -0
  134. package/dist/struct-jest.test.d.ts +1 -0
  135. package/dist/struct-jest.test.js +176 -0
  136. package/dist/struct-jest.test.js.map +1 -0
  137. package/dist/struct.test.d.ts +1 -0
  138. package/dist/struct.test.js +231 -0
  139. package/dist/struct.test.js.map +1 -0
  140. package/dist/trait-jest.test.d.ts +1 -0
  141. package/dist/trait-jest.test.js +120 -0
  142. package/dist/trait-jest.test.js.map +1 -0
  143. package/dist/vm-jest.test.d.ts +1 -0
  144. package/dist/vm-jest.test.js +569 -0
  145. package/dist/vm-jest.test.js.map +1 -0
  146. package/dist/vm.d.ts +81 -0
  147. package/dist/vm.js +1956 -0
  148. package/dist/vm.js.map +1 -0
  149. package/dist/vm.test.d.ts +1 -0
  150. package/dist/vm.test.js +337 -0
  151. package/dist/vm.test.js.map +1 -0
  152. package/dist/web-repl/sandbox.d.ts +11 -0
  153. package/dist/web-repl/sandbox.js +76 -0
  154. package/dist/web-repl/sandbox.js.map +1 -0
  155. package/dist/web-repl/server.d.ts +1 -0
  156. package/dist/web-repl/server.js +111 -0
  157. package/dist/web-repl/server.js.map +1 -0
  158. package/dist/while-loop-jest.test.d.ts +1 -0
  159. package/dist/while-loop-jest.test.js +201 -0
  160. package/dist/while-loop-jest.test.js.map +1 -0
  161. package/dist/while-loop.test.d.ts +1 -0
  162. package/dist/while-loop.test.js +262 -0
  163. package/dist/while-loop.test.js.map +1 -0
  164. package/docs/EXPERIENCE.md +787 -0
  165. package/docs/README.md +175 -0
  166. package/docs/V1_V2_V3_ANALYSIS.md +107 -0
  167. package/docs/_config.yml +36 -0
  168. package/docs/api-reference.md +459 -0
  169. package/docs/architecture.md +470 -0
  170. package/docs/benchmarks.md +295 -0
  171. package/docs/comparison.md +454 -0
  172. package/docs/index.md +335 -0
  173. package/docs/language-completeness.md +228 -0
  174. package/docs/learning-guide.md +651 -0
  175. package/package.json +65 -0
  176. package/src/api/deploy_key.fl +294 -0
  177. package/src/api/issue.fl +302 -0
  178. package/src/api/org.fl +356 -0
  179. package/src/api/repo.fl +394 -0
  180. package/src/api/team.fl +299 -0
  181. package/src/api/user.fl +385 -0
  182. package/src/api/webhook.fl +273 -0
  183. package/src/ast.ts +158 -0
  184. package/src/async-basic.test.ts +94 -0
  185. package/src/async-jest.test.ts +107 -0
  186. package/src/channel-jest.test.ts +158 -0
  187. package/src/checker-jest.test.ts +189 -0
  188. package/src/checker.test.ts +279 -0
  189. package/src/checker.ts +1861 -0
  190. package/src/commands/analyze.fl +227 -0
  191. package/src/commands/auth.fl +315 -0
  192. package/src/commands/batch.fl +349 -0
  193. package/src/commands/config.fl +199 -0
  194. package/src/commands/deploy_key.fl +352 -0
  195. package/src/commands/issue.fl +275 -0
  196. package/src/commands/main.fl +492 -0
  197. package/src/commands/org.fl +425 -0
  198. package/src/commands/repo.fl +581 -0
  199. package/src/commands/team.fl +244 -0
  200. package/src/commands/user.fl +423 -0
  201. package/src/commands/webhook.fl +400 -0
  202. package/src/compiler-jest.test.ts +275 -0
  203. package/src/compiler.test.ts +375 -0
  204. package/src/compiler.ts +1770 -0
  205. package/src/config.fl +175 -0
  206. package/src/core/batch.fl +355 -0
  207. package/src/core/cache.fl +284 -0
  208. package/src/core/ensure.fl +324 -0
  209. package/src/db-100m-full.ts +96 -0
  210. package/src/db-100m-no-index.ts +133 -0
  211. package/src/db-100m-real.ts +152 -0
  212. package/src/db-100m-streaming.ts +154 -0
  213. package/src/db-100m-test.ts +136 -0
  214. package/src/db-jest.test.ts +161 -0
  215. package/src/db-runtime.ts +242 -0
  216. package/src/db.ts +676 -0
  217. package/src/errors.fl +134 -0
  218. package/src/for-of-jest.test.ts +246 -0
  219. package/src/for-of.test.ts +308 -0
  220. package/src/function-literal-jest.test.ts +193 -0
  221. package/src/function-literal.test.ts +248 -0
  222. package/src/generics-jest.test.ts +104 -0
  223. package/src/http/client.fl +327 -0
  224. package/src/ir-gen.ts +459 -0
  225. package/src/ir.ts +80 -0
  226. package/src/lexer.test.ts +499 -0
  227. package/src/lexer.ts +522 -0
  228. package/src/main.ts +223 -0
  229. package/src/models.fl +162 -0
  230. package/src/module-jest.test.ts +145 -0
  231. package/src/parser.test.ts +542 -0
  232. package/src/parser.ts +1211 -0
  233. package/src/pattern-matching-jest.test.ts +170 -0
  234. package/src/pkg/init.ts +91 -0
  235. package/src/pkg/install.ts +56 -0
  236. package/src/pkg/registry.ts +103 -0
  237. package/src/pkg/run.ts +49 -0
  238. package/src/pkg/toml.ts +129 -0
  239. package/src/repl.ts +190 -0
  240. package/src/runtime/bytecode.ts +291 -0
  241. package/src/runtime/value.ts +322 -0
  242. package/src/runtime/vm.ts +354 -0
  243. package/src/self-host/bootstrap.fl +68 -0
  244. package/src/self-host/interpreter.fl +361 -0
  245. package/src/self-host/lexer-simple.fl +22 -0
  246. package/src/self-host/lexer.fl +305 -0
  247. package/src/self-host/parser.fl +580 -0
  248. package/src/struct-instance-jest.test.ts +221 -0
  249. package/src/struct-instance.test.ts +293 -0
  250. package/src/struct-jest.test.ts +187 -0
  251. package/src/struct.test.ts +234 -0
  252. package/src/trait-jest.test.ts +136 -0
  253. package/src/vm-jest.test.ts +754 -0
  254. package/src/vm.ts +1976 -0
  255. package/src/web-repl/public/index.html +50 -0
  256. package/src/web-repl/public/main.js +105 -0
  257. package/src/web-repl/public/style.css +225 -0
  258. package/src/web-repl/sandbox.ts +88 -0
  259. package/src/web-repl/server.ts +97 -0
  260. package/src/while-loop-jest.test.ts +218 -0
  261. package/src/while-loop.test.ts +267 -0
@@ -0,0 +1,569 @@
1
+ "use strict";
2
+ // FreeLang v4 — VM 테스트 (E2E: Source → Lexer → Parser → Compiler → VM) - Jest Format
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const lexer_1 = require("./lexer");
5
+ const parser_1 = require("./parser");
6
+ const compiler_1 = require("./compiler");
7
+ const vm_1 = require("./vm");
8
+ async function exec(source) {
9
+ const { tokens, errors: lexErrors } = new lexer_1.Lexer(source).tokenize();
10
+ if (lexErrors.length > 0)
11
+ throw new Error(`Lex: ${lexErrors[0].message}`);
12
+ const { program, errors: parseErrors } = new parser_1.Parser(tokens).parse();
13
+ if (parseErrors.length > 0)
14
+ throw new Error(`Parse: ${parseErrors[0].message}`);
15
+ const chunk = new compiler_1.Compiler().compile(program);
16
+ return await new vm_1.VM().run(chunk);
17
+ }
18
+ // ============================================================
19
+ // Jest Tests
20
+ // ============================================================
21
+ describe("VM E2E Tests", () => {
22
+ describe("println 기본", () => {
23
+ it('println("hello")', async () => {
24
+ const { output } = await exec('println("hello")');
25
+ expect(output).toEqual(["hello"]);
26
+ });
27
+ it('println("hello world")', async () => {
28
+ const { output } = await exec('println("hello world")');
29
+ expect(output).toEqual(["hello world"]);
30
+ });
31
+ });
32
+ describe("정수 산술", () => {
33
+ it("1 + 2 = 3", async () => {
34
+ const { output } = await exec('println(str(1 + 2))');
35
+ expect(output).toEqual(["3"]);
36
+ });
37
+ it("10 - 3 = 7", async () => {
38
+ const { output } = await exec('println(str(10 - 3))');
39
+ expect(output).toEqual(["7"]);
40
+ });
41
+ it("4 * 5 = 20", async () => {
42
+ const { output } = await exec('println(str(4 * 5))');
43
+ expect(output).toEqual(["20"]);
44
+ });
45
+ it("10 / 3 = 3 (i32 truncate)", async () => {
46
+ const { output } = await exec('println(str(10 / 3))');
47
+ expect(output).toEqual(["3"]);
48
+ });
49
+ it("7 % 3 = 1", async () => {
50
+ const { output } = await exec('println(str(7 % 3))');
51
+ expect(output).toEqual(["1"]);
52
+ });
53
+ it("-42 (negate)", async () => {
54
+ const { output } = await exec('println(str(-42))');
55
+ expect(output).toEqual(["-42"]);
56
+ });
57
+ it("2 + 3 * 4 = 14 (precedence)", async () => {
58
+ const { output } = await exec('println(str(2 + 3 * 4))');
59
+ expect(output).toEqual(["14"]);
60
+ });
61
+ });
62
+ describe("문자열 연결", () => {
63
+ it('string concat', async () => {
64
+ const { output } = await exec('println("hello" + " " + "world")');
65
+ expect(output).toEqual(["hello world"]);
66
+ });
67
+ });
68
+ describe("비교 + 논리", () => {
69
+ it("1 == 1", async () => {
70
+ const { output } = await exec('println(str(1 == 1))');
71
+ expect(output).toEqual(["true"]);
72
+ });
73
+ it("1 == 2", async () => {
74
+ const { output } = await exec('println(str(1 == 2))');
75
+ expect(output).toEqual(["false"]);
76
+ });
77
+ it("1 != 2", async () => {
78
+ const { output } = await exec('println(str(1 != 2))');
79
+ expect(output).toEqual(["true"]);
80
+ });
81
+ it("1 < 2", async () => {
82
+ const { output } = await exec('println(str(1 < 2))');
83
+ expect(output).toEqual(["true"]);
84
+ });
85
+ it("2 > 1", async () => {
86
+ const { output } = await exec('println(str(2 > 1))');
87
+ expect(output).toEqual(["true"]);
88
+ });
89
+ it("true && false", async () => {
90
+ const { output } = await exec('println(str(true && false))');
91
+ expect(output).toEqual(["false"]);
92
+ });
93
+ it("false || true", async () => {
94
+ const { output } = await exec('println(str(false || true))');
95
+ expect(output).toEqual(["true"]);
96
+ });
97
+ });
98
+ describe("변수", () => {
99
+ it("var x = 42", async () => {
100
+ const { output } = await exec("var x = 42\nprintln(str(x))");
101
+ expect(output).toEqual(["42"]);
102
+ });
103
+ it("var name = string", async () => {
104
+ const { output } = await exec('var name = "FreeLang"\nprintln(name)');
105
+ expect(output).toEqual(["FreeLang"]);
106
+ });
107
+ it("var reassign", async () => {
108
+ const { output } = await exec("var x = 1\nx = 2\nprintln(str(x))");
109
+ expect(output).toEqual(["2"]);
110
+ });
111
+ it("a + b = 30", async () => {
112
+ const { output } = await exec("var a = 10\nvar b = 20\nprintln(str(a + b))");
113
+ expect(output).toEqual(["30"]);
114
+ });
115
+ });
116
+ describe("함수", () => {
117
+ it("fn add(3,4) = 7", async () => {
118
+ const { output } = await exec(`fn add(a: i32, b: i32) -> i32 { return a + b }
119
+ println(str(add(3, 4)))`);
120
+ expect(output).toEqual(["7"]);
121
+ });
122
+ it("fn double(21) = 42", async () => {
123
+ const { output } = await exec(`fn double(n: i32) -> i32 { return n * 2 }
124
+ println(str(double(21)))`);
125
+ expect(output).toEqual(["42"]);
126
+ });
127
+ it("fn greet void", async () => {
128
+ const { output } = await exec(`fn greet(name: string) -> void { println("Hello " + name) }
129
+ greet("FreeLang")`);
130
+ expect(output).toEqual(["Hello FreeLang"]);
131
+ });
132
+ it("factorial(5) = 120", async () => {
133
+ const { output } = await exec(`fn factorial(n: i32) -> i32 {
134
+ if n <= 1 { return 1 }
135
+ return n * factorial(n + -1)
136
+ }
137
+ println(str(factorial(5)))`);
138
+ expect(output).toEqual(["120"]);
139
+ });
140
+ });
141
+ describe("if 문", () => {
142
+ it("if true", async () => {
143
+ const { output } = await exec('if true { println("yes") }');
144
+ expect(output).toEqual(["yes"]);
145
+ });
146
+ it("if false (skip)", async () => {
147
+ const { output } = await exec('if false { println("yes") }');
148
+ expect(output).toEqual([]);
149
+ });
150
+ it("if-else true", async () => {
151
+ const { output } = await exec('if true { println("yes") } else { println("no") }');
152
+ expect(output).toEqual(["yes"]);
153
+ });
154
+ it("if-else false", async () => {
155
+ const { output } = await exec('if false { println("yes") } else { println("no") }');
156
+ expect(output).toEqual(["no"]);
157
+ });
158
+ it("nested if", async () => {
159
+ const { output } = await exec(`var x = 10
160
+ if x > 5 {
161
+ if x > 20 {
162
+ println("big")
163
+ } else {
164
+ println("medium")
165
+ }
166
+ } else {
167
+ println("small")
168
+ }`);
169
+ expect(output).toEqual(["medium"]);
170
+ });
171
+ });
172
+ describe("for 문", () => {
173
+ it("for...in [1,2,3]", async () => {
174
+ const { output } = await exec(`for x in [1, 2, 3] {
175
+ println(str(x))
176
+ }`);
177
+ expect(output).toEqual(["1", "2", "3"]);
178
+ });
179
+ it("for sum = 60", async () => {
180
+ const { output } = await exec(`var total: i32 = 0
181
+ for x in [10, 20, 30] {
182
+ total = total + x
183
+ }
184
+ println(str(total))`);
185
+ expect(output).toEqual(["60"]);
186
+ });
187
+ it("for...in range(0,5)", async () => {
188
+ const { output } = await exec(`for i in range(0, 5) {
189
+ println(str(i))
190
+ }`);
191
+ expect(output).toEqual(["0", "1", "2", "3", "4"]);
192
+ });
193
+ });
194
+ describe("while 문", () => {
195
+ it("while 기본", async () => {
196
+ const { output } = await exec(`var i: i32 = 0
197
+ while i < 3 {
198
+ println(str(i))
199
+ i = i + 1
200
+ }`);
201
+ expect(output).toEqual(["0", "1", "2"]);
202
+ });
203
+ it("while break", async () => {
204
+ const { output } = await exec(`var i: i32 = 0
205
+ while true {
206
+ if i >= 2 { break }
207
+ println(str(i))
208
+ i = i + 1
209
+ }`);
210
+ expect(output).toEqual(["0", "1"]);
211
+ });
212
+ });
213
+ describe("배열", () => {
214
+ it("배열 생성", async () => {
215
+ const { output } = await exec(`var arr = [1, 2, 3]
216
+ println(str(length(arr)))`);
217
+ expect(output).toEqual(["3"]);
218
+ });
219
+ it("배열 인덱싱", async () => {
220
+ const { output } = await exec(`var arr = ["a", "b", "c"]
221
+ println(arr[1])`);
222
+ expect(output).toEqual(["b"]);
223
+ });
224
+ });
225
+ describe("메모리 관리 - 스택 & 로컬 변수", () => {
226
+ it("여러 지역 변수 동시 관리", async () => {
227
+ const { output } = await exec(`var a = 1
228
+ var b = 2
229
+ var c = 3
230
+ var d = 4
231
+ var e = 5
232
+ println(str(a + b + c + d + e))`);
233
+ expect(output).toEqual(["15"]);
234
+ });
235
+ it("변수 재사용 (가비지 X)", async () => {
236
+ const { output } = await exec(`var x = 10
237
+ x = 20
238
+ x = 30
239
+ x = 40
240
+ println(str(x))`);
241
+ expect(output).toEqual(["40"]);
242
+ });
243
+ it("깊은 스택 (100+ 푸시)", async () => {
244
+ let code = "var sum: i32 = 0\n";
245
+ for (let i = 0; i < 50; i++) {
246
+ code += `sum = sum + ${i}\n`;
247
+ }
248
+ code += "println(str(sum))";
249
+ const { output } = await exec(code);
250
+ const expected = (49 * 50) / 2; // 0+1+...+49
251
+ expect(output).toEqual([String(expected)]);
252
+ });
253
+ it("중첩 블록 스코핑", async () => {
254
+ const { output } = await exec(`var x = 10
255
+ if true {
256
+ var x = 20
257
+ println(str(x))
258
+ }
259
+ println(str(x))`);
260
+ expect(output).toEqual(["20", "10"]);
261
+ });
262
+ });
263
+ describe("함수 호출 & 콜 스택", () => {
264
+ it("함수 체인 호출", async () => {
265
+ const { output } = await exec(`fn f1(x: i32) -> i32 { return x + 1 }
266
+ fn f2(x: i32) -> i32 { return f1(x) + 1 }
267
+ fn f3(x: i32) -> i32 { return f2(x) + 1 }
268
+ println(str(f3(10)))`);
269
+ expect(output).toEqual(["13"]);
270
+ });
271
+ it("함수 깊은 재귀", async () => {
272
+ const { output } = await exec(`fn fib(n: i32) -> i32 {
273
+ if n <= 1 { return n }
274
+ return fib(n - 1) + fib(n - 2)
275
+ }
276
+ println(str(fib(6)))`);
277
+ expect(output).toEqual(["8"]); // fib(6) = 8
278
+ });
279
+ it("함수 다중 반환값 타입", async () => {
280
+ const { output } = await exec(`fn getInt() -> i32 { return 42 }
281
+ fn getStr() -> string { return "hello" }
282
+ fn getBool() -> bool { return true }
283
+ println(str(getInt()))
284
+ println(getStr())
285
+ println(str(getBool()))`);
286
+ expect(output).toEqual(["42", "hello", "true"]);
287
+ });
288
+ it("상호 재귀 (서로 호출)", async () => {
289
+ const { output } = await exec(`fn isEven(n: i32) -> bool {
290
+ if n == 0 { return true }
291
+ return isOdd(n - 1)
292
+ }
293
+ fn isOdd(n: i32) -> bool {
294
+ if n == 0 { return false }
295
+ return isEven(n - 1)
296
+ }
297
+ println(str(isEven(4)))
298
+ println(str(isOdd(3)))`);
299
+ expect(output).toEqual(["true", "true"]);
300
+ });
301
+ it("함수 로컬 변수 격리", async () => {
302
+ const { output } = await exec(`fn modify(x: i32) -> i32 {
303
+ var x = x * 2
304
+ x = x + 10
305
+ return x
306
+ }
307
+ var a = 5
308
+ println(str(modify(a)))
309
+ println(str(a))`);
310
+ expect(output).toEqual(["20", "5"]);
311
+ });
312
+ });
313
+ describe("복합 데이터 구조", () => {
314
+ it("struct 필드 수정", async () => {
315
+ const { output } = await exec(`struct Point { x: f64, y: f64 }
316
+ var p = Point { x: 1.0, y: 2.0 }
317
+ println(str(p.x))
318
+ println(str(p.y))`);
319
+ expect(output).toEqual(["1", "2"]);
320
+ });
321
+ it("배열 요소 수정", async () => {
322
+ const { output } = await exec(`var arr = [1, 2, 3]
323
+ arr[1] = 99
324
+ println(str(arr[0]))
325
+ println(str(arr[1]))
326
+ println(str(arr[2]))`);
327
+ expect(output).toEqual(["1", "99", "3"]);
328
+ });
329
+ it("다중 배열 (배열의 배열)", async () => {
330
+ const { output } = await exec(`var matrix = [[1, 2], [3, 4]]
331
+ println(str(length(matrix)))
332
+ println(str(length(matrix[0])))`);
333
+ expect(output).toEqual(["2", "2"]);
334
+ });
335
+ });
336
+ describe("제어흐름 복잡도", () => {
337
+ it("삼중 if-else", async () => {
338
+ const { output } = await exec(`var x = 10
339
+ if x < 5 {
340
+ println("small")
341
+ } else if x < 15 {
342
+ println("medium")
343
+ } else {
344
+ println("large")
345
+ }`);
346
+ expect(output).toEqual(["medium"]);
347
+ });
348
+ it("반복문 조기 종료 (break)", async () => {
349
+ const { output } = await exec(`for i in [1, 2, 3, 4, 5] {
350
+ if i == 3 { break }
351
+ println(str(i))
352
+ }`);
353
+ expect(output).toEqual(["1", "2"]);
354
+ });
355
+ it("반복문 건너뛰기 (continue)", async () => {
356
+ const { output } = await exec(`for i in [1, 2, 3, 4, 5] {
357
+ if i == 3 { continue }
358
+ println(str(i))
359
+ }`);
360
+ expect(output).toEqual(["1", "2", "4", "5"]);
361
+ });
362
+ it("while 루프 상태 변경", async () => {
363
+ const { output } = await exec(`var i: i32 = 0
364
+ var sum: i32 = 0
365
+ while i < 5 {
366
+ sum = sum + i
367
+ i = i + 1
368
+ }
369
+ println(str(sum))`);
370
+ expect(output).toEqual(["10"]); // 0+1+2+3+4
371
+ });
372
+ });
373
+ describe("예외 & 에러 처리", () => {
374
+ it("런타임 에러 캐치 - 0으로 나누기", async () => {
375
+ const { output, error } = await exec("println(str(10 / 0))");
376
+ expect(error).toBeDefined();
377
+ // 에러 메시지는 구현에 따라 다를 수 있음
378
+ });
379
+ it("수행 제한 초과 (무한 루프 감지)", async () => {
380
+ const { output, error } = await exec("while true { var x = 1 }");
381
+ expect(error).toBeDefined();
382
+ expect(error).toContain("limit");
383
+ });
384
+ it("배열 범위 초과 접근", async () => {
385
+ const { output, error } = await exec(`var arr = [1, 2, 3]
386
+ println(str(arr[10]))`);
387
+ // 범위 초과 시 에러 또는 undefined 반환 (구현 의존)
388
+ expect(error !== null || output.length > 0).toBe(true);
389
+ });
390
+ });
391
+ describe("타입 변환 & 문자열화", () => {
392
+ it("모든 타입 str() 변환", async () => {
393
+ const { output } = await exec(`println(str(42))
394
+ println(str(3.14))
395
+ println(str(true))
396
+ println(str(false))`);
397
+ expect(output).toEqual(["42", "3.14", "true", "false"]);
398
+ });
399
+ it("복합 표현식 str() 변환", async () => {
400
+ const { output } = await exec(`println(str(1 + 2 * 3))
401
+ println(str(10 > 5))
402
+ println(str(true && false))`);
403
+ expect(output).toEqual(["7", "true", "false"]);
404
+ });
405
+ });
406
+ describe("성능 & 확장성", () => {
407
+ it("1000개 요소 배열", async () => {
408
+ let code = "var arr = [";
409
+ for (let i = 0; i < 1000; i++) {
410
+ code += (i > 0 ? ", " : "") + i;
411
+ }
412
+ code += "]\nprintln(str(length(arr)))";
413
+ const { output } = await exec(code);
414
+ expect(output).toEqual(["1000"]);
415
+ });
416
+ it("깊은 재귀 (50단계)", async () => {
417
+ const { output } = await exec(`fn countdown(n: i32) -> void {
418
+ if n <= 0 {
419
+ println("done")
420
+ } else {
421
+ countdown(n - 1)
422
+ }
423
+ }
424
+ countdown(50)`);
425
+ expect(output).toEqual(["done"]);
426
+ });
427
+ });
428
+ describe("빌틴 함수 - 배열 조작", () => {
429
+ it("push: 배열에 요소 추가", async () => {
430
+ const { output } = await exec(`var arr = [1, 2]
431
+ push(arr, 3)
432
+ println(str(length(arr)))`);
433
+ expect(output).toEqual(["3"]);
434
+ });
435
+ it("pop: 배열에서 요소 제거", async () => {
436
+ const { output } = await exec(`var arr = [10, 20, 30]
437
+ var x = pop(arr)
438
+ println(str(x))
439
+ println(str(length(arr)))`);
440
+ expect(output).toEqual(["30", "2"]);
441
+ });
442
+ it("pop: 빈 배열에서 pop", async () => {
443
+ const { output } = await exec(`var arr: [i32] = []
444
+ var x = pop(arr)
445
+ println(str(x))`);
446
+ expect(output.length).toBe(1);
447
+ });
448
+ });
449
+ describe("빌틴 함수 - 수학", () => {
450
+ it("abs: 절댓값", async () => {
451
+ const { output } = await exec(`println(str(abs(-42)))
452
+ println(str(abs(3.14)))`);
453
+ expect(output).toEqual(["42", "3.14"]);
454
+ });
455
+ it("min: 최솟값", async () => {
456
+ const { output } = await exec(`println(str(min(10, 5)))
457
+ println(str(min(-3, -8)))`);
458
+ expect(output).toEqual(["5", "-8"]);
459
+ });
460
+ it("max: 최댓값", async () => {
461
+ const { output } = await exec(`println(str(max(10, 5)))
462
+ println(str(max(-3, -8)))`);
463
+ expect(output).toEqual(["10", "-3"]);
464
+ });
465
+ it("pow: 거듭제곱", async () => {
466
+ const { output } = await exec(`println(str(pow(2, 3)))
467
+ println(str(pow(10, 2)))`);
468
+ expect(output).toEqual(["8", "100"]);
469
+ });
470
+ it("sqrt: 제곱근", async () => {
471
+ const { output } = await exec(`println(str(sqrt(16)))
472
+ println(str(sqrt(2)))`);
473
+ const [r1, r2] = output;
474
+ expect(r1).toBe("4");
475
+ expect(parseFloat(r2)).toBeCloseTo(1.414, 2);
476
+ });
477
+ });
478
+ describe("빌틴 함수 - 타입 & 검증", () => {
479
+ it("typeof: 타입 검사", async () => {
480
+ const { output } = await exec(`println(typeof(42))
481
+ println(typeof(3.14))
482
+ println(typeof("hello"))
483
+ println(typeof(true))
484
+ println(typeof([1, 2, 3]))`);
485
+ expect(output).toEqual(["i32", "f64", "str", "bool", "arr"]);
486
+ });
487
+ it("assert: 조건 검증 (성공)", async () => {
488
+ const { output } = await exec(`assert(true)
489
+ assert(1 > 0)
490
+ println("passed")`);
491
+ expect(output).toEqual(["passed"]);
492
+ });
493
+ it("assert: 조건 검증 (실패)", async () => {
494
+ const { output, error } = await exec(`assert(false, "test failed")`);
495
+ expect(error).toBeDefined();
496
+ expect(error).toContain("test failed");
497
+ });
498
+ });
499
+ describe("빌틴 함수 - 문자열 조작", () => {
500
+ it("contains: 부분 문자열 확인", async () => {
501
+ const { output } = await exec(`println(str(contains("hello world", "world")))
502
+ println(str(contains("hello world", "xyz")))`);
503
+ expect(output).toEqual(["true", "false"]);
504
+ });
505
+ it("split: 문자열 분할", async () => {
506
+ const { output } = await exec(`var arr = split("a,b,c", ",")
507
+ println(str(length(arr)))
508
+ println(arr[0])
509
+ println(arr[1])
510
+ println(arr[2])`);
511
+ expect(output).toEqual(["3", "a", "b", "c"]);
512
+ });
513
+ it("trim: 공백 제거", async () => {
514
+ const { output } = await exec(`println(trim(" hello "))
515
+ println(trim("world"))`);
516
+ expect(output).toEqual(["hello", "world"]);
517
+ });
518
+ it("to_upper: 대문자 변환", async () => {
519
+ const { output } = await exec(`println(to_upper("hello"))
520
+ println(to_upper("HeLLo"))`);
521
+ expect(output).toEqual(["HELLO", "HELLO"]);
522
+ });
523
+ it("to_lower: 소문자 변환", async () => {
524
+ const { output } = await exec(`println(to_lower("HELLO"))
525
+ println(to_lower("HeLLo"))`);
526
+ expect(output).toEqual(["hello", "hello"]);
527
+ });
528
+ it("char_at: 문자 접근", async () => {
529
+ const { output } = await exec(`println(char_at("hello", 0))
530
+ println(char_at("hello", 4))
531
+ println(char_at("hello", 10))`);
532
+ expect(output).toEqual(["h", "o", ""]);
533
+ });
534
+ it("slice: 부분 문자열", async () => {
535
+ const { output } = await exec(`println(slice("hello world", 0, 5))
536
+ println(slice("hello world", 6, 11))`);
537
+ expect(output).toEqual(["hello", "world"]);
538
+ });
539
+ });
540
+ describe("빌틴 함수 - 배열 슬라이싱", () => {
541
+ it("slice: 부분 배열", async () => {
542
+ const { output } = await exec(`var arr = [10, 20, 30, 40, 50]
543
+ var sliced = slice(arr, 1, 4)
544
+ println(str(length(sliced)))
545
+ println(str(sliced[0]))
546
+ println(str(sliced[1]))
547
+ println(str(sliced[2]))`);
548
+ expect(output).toEqual(["3", "20", "30", "40"]);
549
+ });
550
+ });
551
+ describe("빌틴 함수 - 클론", () => {
552
+ it("clone: 배열 복제", async () => {
553
+ const { output } = await exec(`var arr1 = [1, 2, 3]
554
+ var arr2 = clone(arr1)
555
+ arr1[0] = 99
556
+ println(str(arr1[0]))
557
+ println(str(arr2[0]))`);
558
+ expect(output).toEqual(["99", "1"]);
559
+ });
560
+ it("clone: 중첩 배열 복제", async () => {
561
+ const { output } = await exec(`var matrix1 = [[1, 2], [3, 4]]
562
+ var matrix2 = clone(matrix1)
563
+ println(str(length(matrix2)))
564
+ println(str(length(matrix2[0])))`);
565
+ expect(output).toEqual(["2", "2"]);
566
+ });
567
+ });
568
+ });
569
+ //# sourceMappingURL=vm-jest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm-jest.test.js","sourceRoot":"","sources":["../src/vm-jest.test.ts"],"names":[],"mappings":";AAAA,oFAAoF;;AAEpF,mCAAgC;AAChC,qCAAkC;AAClC,yCAAsC;AACtC,6BAA0B;AAE1B,KAAK,UAAU,IAAI,CAAC,MAAc;IAChC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,aAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACpE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,IAAI,mBAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,MAAM,IAAI,OAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;AAE/D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;wBACgB,CACjB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;yBACiB,CAClB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;kBACU,CACX,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;2BAImB,CACpB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YACvB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B,mDAAmD,CACpD,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B,oDAAoD,CACrD,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;;;;;EASN,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;EAEN,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;oBAIY,CACb,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;EAEN,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;EAIN,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;EAKN,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;0BACkB,CACnB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;gBACQ,CACT,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;gCAKwB,CACzB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;gBAIQ,CACT,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,IAAI,IAAI,GAAG,oBAAoB,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC;YAC/B,CAAC;YACD,IAAI,IAAI,mBAAmB,CAAC;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;gBAKQ,CACT,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;qBAGa,CACd,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;qBAIa,CACd,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;wBAKgB,CACjB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;;;;;uBASe,CAChB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;;;gBAOQ,CACT,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;kBAGU,CACX,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;qBAIa,CACd,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;gCAEwB,CACzB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;;;EAON,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;EAGN,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;EAGN,CACK,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;;kBAMU,CACX,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5B,yBAAyB;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAC3B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAClC;sBACc,CACf,CAAC;YACF,qCAAqC;YACrC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;oBAGY,CACb,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;4BAEoB,CACrB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAC3B,IAAI,IAAI,GAAG,aAAa,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,IAAI,8BAA8B,CAAC;YACvC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;;;cAOM,CACP,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;0BAEkB,CACnB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;0BAGkB,CACnB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;gBAEQ,CACT,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;wBACgB,CACjB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;0BACkB,CACnB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;0BACkB,CACnB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;yBACiB,CAClB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;sBACc,CACf,CAAC;YACF,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC;YACxB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;2BAImB,CACpB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;kBAEU,CACX,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;6CACqC,CACtC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;gBAIQ,CACT,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;uBACe,CAChB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;2BACmB,CACpB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;2BACmB,CACpB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;8BAEsB,CACvB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;qCAC6B,CAC9B,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;;wBAKgB,CACjB,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;;sBAIc,CACf,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B;;;iCAGyB,CAC1B,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/vm.d.ts ADDED
@@ -0,0 +1,81 @@
1
+ import { Chunk } from "./compiler";
2
+ export type Value = {
3
+ tag: "i32";
4
+ val: number;
5
+ } | {
6
+ tag: "f64";
7
+ val: number;
8
+ } | {
9
+ tag: "str";
10
+ val: string;
11
+ } | {
12
+ tag: "bool";
13
+ val: boolean;
14
+ } | {
15
+ tag: "arr";
16
+ val: Value[];
17
+ } | {
18
+ tag: "struct";
19
+ fields: Map<string, Value>;
20
+ } | {
21
+ tag: "ok";
22
+ val: Value;
23
+ } | {
24
+ tag: "err";
25
+ val: Value;
26
+ } | {
27
+ tag: "some";
28
+ val: Value;
29
+ } | {
30
+ tag: "none";
31
+ } | {
32
+ tag: "chan";
33
+ id: number;
34
+ } | {
35
+ tag: "db";
36
+ id: number;
37
+ } | {
38
+ tag: "void";
39
+ };
40
+ export declare class VM {
41
+ private chunk;
42
+ private actors;
43
+ private channels;
44
+ private nextChannelId;
45
+ private databases;
46
+ private nextDbId;
47
+ private httpServers;
48
+ private nextServerId;
49
+ private nextReqId;
50
+ private globals;
51
+ private output;
52
+ private instructionCount;
53
+ private maxInstructions;
54
+ private runningCount;
55
+ run(chunk: Chunk): Promise<{
56
+ output: string[];
57
+ error: string | null;
58
+ }>;
59
+ private schedule;
60
+ private runSlice;
61
+ private callBuiltin;
62
+ private readI32;
63
+ private readF64;
64
+ private valueToString;
65
+ private valuesEqual;
66
+ private deepClone;
67
+ private jsonToValue;
68
+ private valueToJSON;
69
+ private parseYAML;
70
+ private parseYAMLValue;
71
+ private valueToYAML;
72
+ private parseCsvRow;
73
+ private httpGetAsync;
74
+ private httpPostAsync;
75
+ private httpPostJsonAsync;
76
+ private fetchAsync;
77
+ private httpServerCreateAsync;
78
+ private httpServerAcceptAsync;
79
+ private httpServerRespondAsync;
80
+ private execCommandAsync;
81
+ }