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 @@
1
+ {"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ // FreeLang v4 — TypeChecker 테스트
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const lexer_1 = require("./lexer");
5
+ const parser_1 = require("./parser");
6
+ const checker_1 = require("./checker");
7
+ function check(source) {
8
+ const { tokens, errors: lexErrors } = new lexer_1.Lexer(source).tokenize();
9
+ if (lexErrors.length > 0)
10
+ throw new Error(`Lex: ${lexErrors[0].message}`);
11
+ const { program, errors: parseErrors } = new parser_1.Parser(tokens).parse();
12
+ if (parseErrors.length > 0)
13
+ throw new Error(`Parse: ${parseErrors[0].message}`);
14
+ return new checker_1.TypeChecker().check(program);
15
+ }
16
+ function expectNoErrors(source, label) {
17
+ const errors = check(source);
18
+ if (errors.length > 0) {
19
+ console.error(` ❌ ${label}: ${errors.map((e) => e.message).join(", ")}`);
20
+ failed++;
21
+ }
22
+ else {
23
+ console.log(` ✅ ${label}`);
24
+ passed++;
25
+ }
26
+ }
27
+ function expectError(source, pattern, label) {
28
+ const errors = check(source);
29
+ const found = errors.some((e) => e.message.includes(pattern));
30
+ if (found) {
31
+ console.log(` ✅ ${label}`);
32
+ passed++;
33
+ }
34
+ else {
35
+ console.error(` ❌ ${label}: expected error "${pattern}", got [${errors.map((e) => e.message).join(", ")}]`);
36
+ failed++;
37
+ }
38
+ }
39
+ let passed = 0;
40
+ let failed = 0;
41
+ // ============================================================
42
+ // 1. 기본 타입 추론 (SPEC_06 Q3)
43
+ // ============================================================
44
+ console.log("=== 타입 추론 ===");
45
+ expectNoErrors("var x = 42", "var x = 42 (i32 추론)");
46
+ expectNoErrors("var x = 3.14", "var x = 3.14 (f64 추론)");
47
+ expectNoErrors('var x = "hello"', 'var x = "hello" (string 추론)');
48
+ expectNoErrors("var x = true", "var x = true (bool 추론)");
49
+ // 명시 타입 일치
50
+ expectNoErrors("var x: i32 = 42", "var x: i32 = 42");
51
+ expectNoErrors("var x: f64 = 3.14", "var x: f64 = 3.14");
52
+ // 명시 타입 불일치
53
+ expectError('var x: i32 = "hello"', "type mismatch", "i32 = string 불일치");
54
+ expectError("var x: bool = 42", "type mismatch", "bool = i32 불일치");
55
+ // ============================================================
56
+ // 2. void 변수 금지 (SPEC_06 Q9)
57
+ // ============================================================
58
+ console.log("=== void 제약 ===");
59
+ expectError("var x: void = println()", "void", "void 변수 금지");
60
+ // ============================================================
61
+ // 3. 산술 연산 타입 검사
62
+ // ============================================================
63
+ console.log("=== 산술 연산 ===");
64
+ expectNoErrors("fn f(): i32 { return 1 + 2 }", "i32 + i32");
65
+ expectNoErrors("fn f(): f64 { return 1.0 + 2.0 }", "f64 + f64");
66
+ expectError("fn f(): i32 { return 1 + 1.0 }", "type mismatch", "i32 + f64 불일치");
67
+ // 문자열 + 문자열 (SPEC_06)
68
+ expectNoErrors('fn f(): string { return "a" + "b" }', "string + string");
69
+ // ============================================================
70
+ // 4. 비교 연산 → bool
71
+ // ============================================================
72
+ console.log("=== 비교 연산 ===");
73
+ expectNoErrors("fn f(): bool { return 1 == 2 }", "== → bool");
74
+ expectNoErrors("fn f(): bool { return 1 < 2 }", "< → bool");
75
+ // ============================================================
76
+ // 5. 논리 연산 — bool 필요
77
+ // ============================================================
78
+ console.log("=== 논리 연산 ===");
79
+ expectNoErrors("fn f(): bool { return true && false }", "&& bool");
80
+ expectError("fn f(): bool { return 1 && 2 }", "requires bool", "&& 에 i32 사용");
81
+ // ============================================================
82
+ // 6. 단항 연산
83
+ // ============================================================
84
+ console.log("=== 단항 연산 ===");
85
+ expectNoErrors("fn f(): i32 { return -42 }", "unary -");
86
+ expectNoErrors("fn f(): bool { return !true }", "unary !");
87
+ expectError("fn f(): bool { return !42 }", "requires bool", "! 에 i32 사용");
88
+ // ============================================================
89
+ // 7. 함수 검사
90
+ // ============================================================
91
+ console.log("=== 함수 검사 ===");
92
+ // 반환 타입 불일치
93
+ expectError('fn f(): i32 { return "hello" }', "return type mismatch", "반환 타입 불일치");
94
+ // 인자 수 불일치
95
+ expectError(`fn add(a: i32, b: i32): i32 { return a + b }
96
+ add(1)`, "expects 2 arguments", "인자 수 부족");
97
+ // 인자 타입 불일치
98
+ expectError(`fn add(a: i32, b: i32): i32 { return a + b }
99
+ add(1, "two")`, "argument 2 type mismatch", "인자 타입 불일치");
100
+ // 전방참조 (SPEC_08 Q5)
101
+ expectNoErrors(`
102
+ fn main(): void { println(str(add(1, 2))) }
103
+ fn add(a: i32, b: i32): i32 { return a + b }
104
+ `, "함수 전방참조");
105
+ // 중복 함수 선언
106
+ expectError(`fn f(): void { }
107
+ fn f(): void { }`, "already declared", "함수 중복 선언");
108
+ // ============================================================
109
+ // 8. 변수 immutability (SPEC_07)
110
+ // ============================================================
111
+ console.log("=== 불변성 ===");
112
+ expectNoErrors("var x = 1\nx = 2", "var 재할당 허용");
113
+ expectError("let x = 1\nx = 2", "immutable", "let 재할당 금지");
114
+ // ============================================================
115
+ // 9. Move semantics (SPEC_07)
116
+ // ============================================================
117
+ console.log("=== Move ===");
118
+ // Move 타입 사용 후 재사용 — 함수 인자 전달
119
+ expectError(`
120
+ fn consume(arr: [i32]): void { }
121
+ var items: [i32] = [1, 2, 3]
122
+ consume(items)
123
+ println(length(items))
124
+ `, "moved value", "Move 후 사용 금지");
125
+ // 재할당으로 Move 복구 (SPEC_07 Q7)
126
+ expectNoErrors(`
127
+ fn consume(arr: [i32]): void { }
128
+ var items: [i32] = [1, 2, 3]
129
+ consume(items)
130
+ items = [4, 5, 6]
131
+ println(length(items))
132
+ `, "Move 후 재할당 복구");
133
+ // Copy 타입은 Move 안 됨
134
+ expectNoErrors(`
135
+ fn use_num(n: i32): void { }
136
+ var x = 42
137
+ use_num(x)
138
+ println(str(x))
139
+ `, "Copy 타입 이동 없음");
140
+ // ============================================================
141
+ // 10. 스코프 (SPEC_08)
142
+ // ============================================================
143
+ console.log("=== 스코프 ===");
144
+ // 미정의 변수
145
+ expectError("println(str(x))", "undefined variable", "미정의 변수");
146
+ // 섀도잉 (SPEC_08 Q4)
147
+ expectNoErrors(`var x = 42
148
+ var x = "hello"`, "섀도잉 허용");
149
+ // ============================================================
150
+ // 11. if 조건 — bool 필수
151
+ // ============================================================
152
+ console.log("=== if 조건 ===");
153
+ expectError("if 42 { }", "must be bool", "if 조건 non-bool");
154
+ expectNoErrors('if true { println("yes") }', "if true");
155
+ // ============================================================
156
+ // 12. for...in — array 필수
157
+ // ============================================================
158
+ console.log("=== for...in ===");
159
+ expectNoErrors("for x in [1, 2, 3] { println(str(x)) }", "for in array");
160
+ expectError("for x in 42 { }", "requires array", "for in non-array");
161
+ // ============================================================
162
+ // 13. 배열 원소 타입 일관성
163
+ // ============================================================
164
+ console.log("=== 배열 ===");
165
+ expectNoErrors("var arr = [1, 2, 3]", "동종 배열");
166
+ expectError('var arr = [1, "two", 3]', "array element type mismatch", "이종 배열");
167
+ // ============================================================
168
+ // 14. 구조체 (구조적 타입)
169
+ // ============================================================
170
+ console.log("=== 구조체 ===");
171
+ expectNoErrors('var p = { x: 1, y: 2 }', "구조체 리터럴");
172
+ // ============================================================
173
+ // 15. 내장 함수
174
+ // ============================================================
175
+ console.log("=== 내장 함수 ===");
176
+ expectNoErrors('println("hello")', "println");
177
+ expectNoErrors("var r = range(0, 10)", "range → [i32]");
178
+ expectNoErrors("var n = length([1, 2, 3])", "length → i32");
179
+ // ============================================================
180
+ // 16. return 밖에서 사용
181
+ // ============================================================
182
+ console.log("=== return 제약 ===");
183
+ expectError("return 42", "return outside function", "함수 밖 return");
184
+ // void 함수에서 return value
185
+ expectError("fn f(): void { return 42 }", "return type mismatch", "void 함수에서 값 반환");
186
+ // ============================================================
187
+ // 17. 통합 — 실제 프로그램
188
+ // ============================================================
189
+ console.log("=== 통합 테스트 ===");
190
+ expectNoErrors(`
191
+ fn factorial(n: i32): i32 {
192
+ if n <= 1 {
193
+ return 1
194
+ }
195
+ return n * factorial(n + -1)
196
+ }
197
+ var result = factorial(5)
198
+ println(str(result))
199
+ `, "factorial 프로그램");
200
+ expectNoErrors(`
201
+ fn sum(arr: [i32]): i32 {
202
+ var total: i32 = 0
203
+ for x in arr {
204
+ total = total + x
205
+ }
206
+ return total
207
+ }
208
+ var nums = [1, 2, 3, 4, 5]
209
+ println(str(sum(nums)))
210
+ `, "sum 프로그램");
211
+ // ============================================================
212
+ // 결과
213
+ // ============================================================
214
+ console.log(`\n=== 결과: ${passed} passed, ${failed} failed ===`);
215
+ if (failed > 0)
216
+ process.exit(1);
217
+ //# sourceMappingURL=checker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.test.js","sourceRoot":"","sources":["../src/checker.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ // FreeLang v4 — Compiler 테스트 - 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
+ function compile(source) {
8
+ const { tokens, errors: lexErrors } = new lexer_1.Lexer(source).tokenize();
9
+ if (lexErrors.length > 0)
10
+ throw new Error(`Lex: ${lexErrors[0].message}`);
11
+ const { program, errors: parseErrors } = new parser_1.Parser(tokens).parse();
12
+ if (parseErrors.length > 0)
13
+ throw new Error(`Parse: ${parseErrors[0].message}`);
14
+ return new compiler_1.Compiler().compile(program);
15
+ }
16
+ function findOp(chunk, op) {
17
+ return chunk.code.includes(op);
18
+ }
19
+ function countOp(chunk, op) {
20
+ return chunk.code.filter((b) => b === op).length;
21
+ }
22
+ // ============================================================
23
+ // Jest Tests
24
+ // ============================================================
25
+ describe("Compiler Tests", () => {
26
+ describe("상수 로드", () => {
27
+ it("정수 리터럴", () => {
28
+ const c = compile("42");
29
+ expect(findOp(c, compiler_1.Op.PUSH_I32)).toBe(true);
30
+ expect(findOp(c, compiler_1.Op.HALT)).toBe(true);
31
+ });
32
+ it("부동소수점 리터럴", () => {
33
+ const c = compile("3.14");
34
+ expect(findOp(c, compiler_1.Op.PUSH_F64)).toBe(true);
35
+ });
36
+ it("문자열 리터럴", () => {
37
+ const c = compile('"hello"');
38
+ expect(findOp(c, compiler_1.Op.PUSH_STR)).toBe(true);
39
+ expect(c.constants.includes("hello")).toBe(true);
40
+ });
41
+ it("true 리터럴", () => {
42
+ const c = compile("true");
43
+ expect(findOp(c, compiler_1.Op.PUSH_TRUE)).toBe(true);
44
+ });
45
+ it("false 리터럴", () => {
46
+ const c = compile("false");
47
+ expect(findOp(c, compiler_1.Op.PUSH_FALSE)).toBe(true);
48
+ });
49
+ });
50
+ describe("산술 연산", () => {
51
+ it("1 + 2", () => {
52
+ const c = compile("1 + 2");
53
+ expect(findOp(c, compiler_1.Op.ADD_I32)).toBe(true);
54
+ });
55
+ it("3 - 1", () => {
56
+ const c = compile("3 - 1");
57
+ expect(findOp(c, compiler_1.Op.SUB_I32)).toBe(true);
58
+ });
59
+ it("2 * 3", () => {
60
+ const c = compile("2 * 3");
61
+ expect(findOp(c, compiler_1.Op.MUL_I32)).toBe(true);
62
+ });
63
+ it("6 / 2", () => {
64
+ const c = compile("6 / 2");
65
+ expect(findOp(c, compiler_1.Op.DIV_I32)).toBe(true);
66
+ });
67
+ it("7 % 3", () => {
68
+ const c = compile("7 % 3");
69
+ expect(findOp(c, compiler_1.Op.MOD_I32)).toBe(true);
70
+ });
71
+ });
72
+ describe("비교 + 논리", () => {
73
+ it("==", () => {
74
+ const c = compile("1 == 2");
75
+ expect(findOp(c, compiler_1.Op.EQ)).toBe(true);
76
+ });
77
+ it("!=", () => {
78
+ const c = compile("1 != 2");
79
+ expect(findOp(c, compiler_1.Op.NEQ)).toBe(true);
80
+ });
81
+ it("<", () => {
82
+ const c = compile("1 < 2");
83
+ expect(findOp(c, compiler_1.Op.LT)).toBe(true);
84
+ });
85
+ it("&&", () => {
86
+ const c = compile("true && false");
87
+ expect(findOp(c, compiler_1.Op.AND)).toBe(true);
88
+ });
89
+ it("||", () => {
90
+ const c = compile("true || false");
91
+ expect(findOp(c, compiler_1.Op.OR)).toBe(true);
92
+ });
93
+ });
94
+ describe("단항 연산", () => {
95
+ it("-42", () => {
96
+ const c = compile("-42");
97
+ expect(findOp(c, compiler_1.Op.NEG_I32)).toBe(true);
98
+ });
99
+ it("!true", () => {
100
+ const c = compile("!true");
101
+ expect(findOp(c, compiler_1.Op.NOT)).toBe(true);
102
+ });
103
+ });
104
+ describe("변수", () => {
105
+ it("var x = 42", () => {
106
+ const c = compile("var x = 42");
107
+ expect(findOp(c, compiler_1.Op.STORE_LOCAL)).toBe(true);
108
+ });
109
+ it("var x = 42; x + 1", () => {
110
+ const c = compile("var x = 42\nx + 1");
111
+ expect(findOp(c, compiler_1.Op.STORE_LOCAL)).toBe(true);
112
+ expect(findOp(c, compiler_1.Op.LOAD_LOCAL)).toBe(true);
113
+ expect(findOp(c, compiler_1.Op.ADD_I32)).toBe(true);
114
+ });
115
+ });
116
+ describe("함수 호출", () => {
117
+ it("println은 builtin 함수", () => {
118
+ const c = compile('println("hello")');
119
+ const hasCall = findOp(c, compiler_1.Op.CALL_BUILTIN) || findOp(c, compiler_1.Op.CALL);
120
+ expect(hasCall).toBe(true);
121
+ });
122
+ });
123
+ describe("제어흐름", () => {
124
+ it("if 문", () => {
125
+ const c = compile("if true { var x = 1 }");
126
+ expect(findOp(c, compiler_1.Op.JUMP_IF_FALSE)).toBe(true);
127
+ });
128
+ it("while 문", () => {
129
+ const c = compile("while true { var x = 1 }");
130
+ expect(findOp(c, compiler_1.Op.JUMP)).toBe(true);
131
+ });
132
+ });
133
+ describe("배열", () => {
134
+ it("배열 리터럴", () => {
135
+ const c = compile("[1, 2, 3]");
136
+ expect(findOp(c, compiler_1.Op.ARRAY_NEW)).toBe(true);
137
+ });
138
+ it("배열 인덱싱", () => {
139
+ const c = compile("var arr = [1, 2, 3]\narr[0]");
140
+ expect(findOp(c, compiler_1.Op.ARRAY_GET)).toBe(true);
141
+ });
142
+ it("배열 요소 수정", () => {
143
+ const c = compile("var arr = [1, 2, 3]\narr[0] = 99");
144
+ expect(findOp(c, compiler_1.Op.ARRAY_SET)).toBe(true);
145
+ });
146
+ });
147
+ describe("리터럴 타입", () => {
148
+ it("f64 리터럴", () => {
149
+ const c = compile("3.14");
150
+ expect(findOp(c, compiler_1.Op.PUSH_F64)).toBe(true);
151
+ });
152
+ });
153
+ describe("구조체", () => {
154
+ it("구조체 생성", () => {
155
+ const c = compile("struct Point { x: i32 }\nvar p = Point { x: 10 }");
156
+ expect(findOp(c, compiler_1.Op.STRUCT_NEW)).toBe(true);
157
+ });
158
+ it("구조체 필드 접근", () => {
159
+ const c = compile("struct Point { x: i32 }\nvar p = Point { x: 10 }\np.x");
160
+ expect(findOp(c, compiler_1.Op.STRUCT_GET)).toBe(true);
161
+ });
162
+ });
163
+ describe("함수 정의 & 호출", () => {
164
+ it("함수 정의", () => {
165
+ const c = compile("fn add(a: i32, b: i32) -> i32 { a + b }");
166
+ expect(findOp(c, compiler_1.Op.CALL) || findOp(c, compiler_1.Op.CALL_BUILTIN) || findOp(c, compiler_1.Op.PUSH_I32)).toBe(true);
167
+ });
168
+ it("함수 호출", () => {
169
+ const c = compile("fn add(a: i32, b: i32) -> i32 { a + b }\nadd(1, 2)");
170
+ expect(findOp(c, compiler_1.Op.CALL)).toBe(true);
171
+ });
172
+ it("반환값", () => {
173
+ const c = compile("fn getNum() -> i32 { return 42 }");
174
+ expect(findOp(c, compiler_1.Op.RETURN)).toBe(true);
175
+ });
176
+ });
177
+ describe("변수 스코핑", () => {
178
+ it("로컬 변수 스토어", () => {
179
+ const c = compile("var x = 100");
180
+ expect(findOp(c, compiler_1.Op.STORE_LOCAL)).toBe(true);
181
+ });
182
+ });
183
+ describe("제어흐름 확장", () => {
184
+ it("if-else", () => {
185
+ const c = compile("if true { 1 } else { 2 }");
186
+ expect(findOp(c, compiler_1.Op.JUMP_IF_FALSE)).toBe(true);
187
+ expect(findOp(c, compiler_1.Op.JUMP)).toBe(true);
188
+ });
189
+ it("break 문", () => {
190
+ const c = compile("while true { break }");
191
+ expect(findOp(c, compiler_1.Op.JUMP)).toBe(true);
192
+ });
193
+ it("continue 문", () => {
194
+ const c = compile("while true { continue }");
195
+ expect(findOp(c, compiler_1.Op.JUMP)).toBe(true);
196
+ });
197
+ it("for...in 루프", () => {
198
+ const c = compile("for x in [1, 2] { var y = x }");
199
+ expect(findOp(c, compiler_1.Op.ARRAY_GET) || findOp(c, compiler_1.Op.JUMP)).toBe(true);
200
+ });
201
+ });
202
+ describe("비교 연산자 확장", () => {
203
+ it(">", () => {
204
+ const c = compile("1 > 2");
205
+ expect(findOp(c, compiler_1.Op.GT)).toBe(true);
206
+ });
207
+ it("<=", () => {
208
+ const c = compile("1 <= 2");
209
+ expect(findOp(c, compiler_1.Op.LTEQ)).toBe(true);
210
+ });
211
+ it(">=", () => {
212
+ const c = compile("1 >= 2");
213
+ expect(findOp(c, compiler_1.Op.GTEQ)).toBe(true);
214
+ });
215
+ });
216
+ describe("복잡한 표현식", () => {
217
+ it("연산자 우선순위", () => {
218
+ const c = compile("2 + 3 * 4");
219
+ expect(findOp(c, compiler_1.Op.MUL_I32)).toBe(true);
220
+ expect(findOp(c, compiler_1.Op.ADD_I32)).toBe(true);
221
+ expect(countOp(c, compiler_1.Op.PUSH_I32)).toBeGreaterThanOrEqual(3);
222
+ });
223
+ it("중첩 함수 호출", () => {
224
+ const c = compile('println(str(42))');
225
+ expect(findOp(c, compiler_1.Op.CALL_BUILTIN) || findOp(c, compiler_1.Op.CALL)).toBe(true);
226
+ });
227
+ it("배열 요소 함수 호출", () => {
228
+ const c = compile('var arr = [1, 2, 3]\nlength(arr)');
229
+ expect(findOp(c, compiler_1.Op.ARRAY_GET) || findOp(c, compiler_1.Op.CALL_BUILTIN)).toBe(true);
230
+ });
231
+ });
232
+ });
233
+ //# sourceMappingURL=compiler-jest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-jest.test.js","sourceRoot":"","sources":["../src/compiler-jest.test.ts"],"names":[],"mappings":";AAAA,2CAA2C;;AAE3C,mCAAgC;AAChC,qCAAkC;AAClC,yCAAiD;AAEjD,SAAS,OAAO,CAAC,MAAc;IAC7B,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,OAAO,IAAI,mBAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,MAAM,CAAC,KAAY,EAAE,EAAM;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,KAAY,EAAE,EAAM;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;AAE/D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjB,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACb,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpB,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACd,MAAM,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjB,MAAM,CAAC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChB,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChB,MAAM,CAAC,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChB,MAAM,CAAC,GAAG,OAAO,CAAC,kDAAkD,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnB,MAAM,CAAC,GAAG,OAAO,CAAC,uDAAuD,CAAC,CAAC;YAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,yCAAyC,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,oDAAoD,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACb,MAAM,CAAC,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnB,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjB,MAAM,CAAC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjB,MAAM,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpB,MAAM,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,CAAC,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,CAAC,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,aAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}