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
package/dist/main.js ADDED
@@ -0,0 +1,241 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // FreeLang v4 — CLI Entry Point
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const fs = __importStar(require("fs"));
39
+ const lexer_1 = require("./lexer");
40
+ const parser_1 = require("./parser");
41
+ const checker_1 = require("./checker");
42
+ const compiler_1 = require("./compiler");
43
+ const vm_1 = require("./vm");
44
+ const ir_gen_1 = require("./ir-gen");
45
+ const repl_1 = require("./repl");
46
+ const db_1 = require("./db");
47
+ async function main() {
48
+ const args = process.argv.slice(2);
49
+ // 버전 확인
50
+ if (args[0] === "--version" || args[0] === "-v") {
51
+ console.log("FreeLang 4.1.0");
52
+ process.exit(0);
53
+ }
54
+ // REPL 모드
55
+ if (args[0] === "--repl" || args[0] === "-i") {
56
+ const repl = new repl_1.REPL();
57
+ await repl.start();
58
+ return;
59
+ }
60
+ // 마이그레이션 CLI
61
+ if (args[0] === "migrate") {
62
+ const cmd = args[1];
63
+ const dbPath = args[2] || "./app.db";
64
+ const migrationsDir = args[3] || "./migrations";
65
+ const db = new db_1.SQLiteDB(dbPath);
66
+ const manager = new db_1.MigrationManager(db, migrationsDir);
67
+ try {
68
+ if (cmd === "up") {
69
+ await db.init();
70
+ await manager.up();
71
+ await db.close();
72
+ }
73
+ else if (cmd === "down") {
74
+ await db.init();
75
+ await manager.down();
76
+ await db.close();
77
+ }
78
+ else if (cmd === "status") {
79
+ await db.init();
80
+ const rows = await manager.status();
81
+ if (rows.length === 0) {
82
+ console.log("적용된 마이그레이션이 없습니다.");
83
+ }
84
+ else {
85
+ console.log("적용된 마이그레이션:");
86
+ for (const row of rows) {
87
+ console.log(` - ${row.name} (${row.applied_at})`);
88
+ }
89
+ }
90
+ await db.close();
91
+ }
92
+ else {
93
+ console.error(`unknown migrate command: ${cmd}`);
94
+ console.log("Usage:");
95
+ console.log(" freelang migrate up [db_path] [migrations_dir]");
96
+ console.log(" freelang migrate down [db_path] [migrations_dir]");
97
+ console.log(" freelang migrate status [db_path] [migrations_dir]");
98
+ process.exit(1);
99
+ }
100
+ }
101
+ catch (e) {
102
+ console.error(`migrate error: ${e.message}`);
103
+ process.exit(1);
104
+ }
105
+ return;
106
+ }
107
+ // 패키지 매니저 CLI
108
+ if (args[0] === "init") {
109
+ const { initProject } = await Promise.resolve().then(() => __importStar(require("./pkg/init")));
110
+ await initProject(args[1] || "my-app");
111
+ return;
112
+ }
113
+ if (args[0] === "install") {
114
+ const { installPackage } = await Promise.resolve().then(() => __importStar(require("./pkg/install")));
115
+ await installPackage(args[1], process.cwd());
116
+ return;
117
+ }
118
+ if (args[0] === "run") {
119
+ const { runScript } = await Promise.resolve().then(() => __importStar(require("./pkg/run")));
120
+ await runScript(args[1], process.cwd());
121
+ return;
122
+ }
123
+ if (args[0] === "list-packages") {
124
+ const { listPackages } = await Promise.resolve().then(() => __importStar(require("./pkg/registry")));
125
+ listPackages();
126
+ return;
127
+ }
128
+ if (args[0] === "search-packages") {
129
+ const { searchPackages } = await Promise.resolve().then(() => __importStar(require("./pkg/registry")));
130
+ searchPackages(args[1] || "");
131
+ return;
132
+ }
133
+ // 웹 REPL
134
+ if (args[0] === "--web-repl") {
135
+ const portIdx = args.indexOf("--port");
136
+ const port = portIdx >= 0 ? parseInt(args[portIdx + 1]) : 3000;
137
+ const { startWebRepl } = await Promise.resolve().then(() => __importStar(require("./web-repl/server")));
138
+ await startWebRepl(port);
139
+ return;
140
+ }
141
+ // 도움말
142
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
143
+ console.log("🦁 FreeLang v4.3 — AI-First Programming Language");
144
+ console.log("");
145
+ console.log("Usage:");
146
+ console.log(" freelang <file.fl> [options] 파일 실행");
147
+ console.log(" freelang --repl 대화형 쉘 시작");
148
+ console.log(" freelang --web-repl [--port PORT] 웹 REPL 시작");
149
+ console.log("");
150
+ console.log("Project Management:");
151
+ console.log(" freelang init [name] 새 프로젝트 생성");
152
+ console.log(" freelang install <pkg> 패키지 설치");
153
+ console.log(" freelang run <script> freelang.toml 스크립트 실행");
154
+ console.log(" freelang list-packages 전체 패키지 목록");
155
+ console.log(" freelang search-packages <query> 패키지 검색");
156
+ console.log("");
157
+ console.log("Database:");
158
+ console.log(" freelang migrate <cmd> [args] 마이그레이션 관리");
159
+ console.log("");
160
+ console.log("Options:");
161
+ console.log(" --no-check 타입 체크 건너뛰기");
162
+ console.log(" --dump-bc 바이트코드 덤프");
163
+ console.log(" --dump-ir IR(중간 표현) 덤프");
164
+ console.log(" --use-ir IR 경로로 컴파일");
165
+ console.log(" --help, -h 도움말 표시");
166
+ console.log(" --version 버전 표시");
167
+ process.exit(0);
168
+ }
169
+ const file = args[0];
170
+ const noCheck = args.includes("--no-check");
171
+ const dumpBc = args.includes("--dump-bc");
172
+ const dumpIr = args.includes("--dump-ir");
173
+ const useIr = args.includes("--use-ir") || dumpIr;
174
+ // 파일 읽기
175
+ let source;
176
+ try {
177
+ source = fs.readFileSync(file, "utf-8");
178
+ }
179
+ catch {
180
+ console.error(`error: cannot read file '${file}'`);
181
+ process.exit(1);
182
+ }
183
+ // 1. Lexer
184
+ const { tokens, errors: lexErrors } = new lexer_1.Lexer(source).tokenize();
185
+ if (lexErrors.length > 0) {
186
+ for (const e of lexErrors) {
187
+ console.error(`${file}:${e.line}: lex error: ${e.message}`);
188
+ }
189
+ process.exit(1);
190
+ }
191
+ // 2. Parser
192
+ const { program, errors: parseErrors } = new parser_1.Parser(tokens).parse();
193
+ if (parseErrors.length > 0) {
194
+ for (const e of parseErrors) {
195
+ console.error(`${file}:${e.line}: parse error: ${e.message}`);
196
+ }
197
+ process.exit(1);
198
+ }
199
+ // 3. TypeChecker (optional)
200
+ if (!noCheck) {
201
+ const checkErrors = new checker_1.TypeChecker().check(program);
202
+ if (checkErrors.length > 0) {
203
+ for (const e of checkErrors) {
204
+ console.error(`${file}:${e.line}: type error: ${e.message}`);
205
+ }
206
+ process.exit(1);
207
+ }
208
+ }
209
+ // 4. Compiler (IR 경로 vs 기존 경로)
210
+ let chunk;
211
+ if (useIr) {
212
+ const irProg = new ir_gen_1.IRGen().generate(program); // AST → IR
213
+ if (dumpIr) {
214
+ console.log(JSON.stringify(irProg, null, 2));
215
+ process.exit(0);
216
+ }
217
+ chunk = new compiler_1.Compiler().compileIR(irProg); // IR → Chunk
218
+ }
219
+ else {
220
+ chunk = new compiler_1.Compiler().compile(program); // 기존 경로 유지
221
+ }
222
+ if (dumpBc) {
223
+ console.log(`--- bytecode (${chunk.code.length} bytes, ${chunk.functions.length} functions) ---`);
224
+ console.log(`constants: ${JSON.stringify(chunk.constants)}`);
225
+ for (const fn of chunk.functions) {
226
+ console.log(`fn ${fn.name}(arity=${fn.arity}) @ offset ${fn.offset}`);
227
+ }
228
+ process.exit(0);
229
+ }
230
+ // 5. VM 실행
231
+ const { output, error } = await new vm_1.VM().run(chunk);
232
+ for (const line of output) {
233
+ console.log(line);
234
+ }
235
+ if (error) {
236
+ console.error(error);
237
+ process.exit(1);
238
+ }
239
+ }
240
+ main().catch(console.error);
241
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ // FreeLang v4 Module System Tests
3
+ // 기본 import/export 파싱 및 검증 테스트
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const lexer_1 = require("./lexer");
6
+ const parser_1 = require("./parser");
7
+ const checker_1 = require("./checker");
8
+ describe("Module System", () => {
9
+ // 헬퍼: 코드를 AST로 파싱
10
+ function parseCode(code) {
11
+ const lexer = new lexer_1.Lexer(code);
12
+ const { tokens, errors: lexErrors } = lexer.tokenize();
13
+ if (lexErrors.length > 0) {
14
+ throw new Error(`Lex errors: ${lexErrors.map(e => e.message).join(", ")}`);
15
+ }
16
+ const parser = new parser_1.Parser(tokens);
17
+ const { program, errors: parseErrors } = parser.parse();
18
+ if (parseErrors.length > 0) {
19
+ throw new Error(`Parse errors: ${parseErrors.map(e => e.message).join(", ")}`);
20
+ }
21
+ return program;
22
+ }
23
+ // Test 1: 기본 import 파싱
24
+ it("should parse basic import statement", () => {
25
+ const code = `import { add } from "./math";`;
26
+ const program = parseCode(code);
27
+ expect(program.stmts.length).toBe(1);
28
+ const stmt = program.stmts[0];
29
+ expect(stmt.kind).toBe("import_decl");
30
+ expect(stmt.source).toBe("./math");
31
+ expect(stmt.items.length).toBe(1);
32
+ expect(stmt.items[0].name).toBe("add");
33
+ expect(stmt.items[0].alias).toBeUndefined();
34
+ });
35
+ // Test 2: 다중 항목 import
36
+ it("should parse multiple import items", () => {
37
+ const code = `import { add, subtract, multiply } from "./math";`;
38
+ const program = parseCode(code);
39
+ const stmt = program.stmts[0];
40
+ expect(stmt.items.length).toBe(3);
41
+ expect(stmt.items[0].name).toBe("add");
42
+ expect(stmt.items[1].name).toBe("subtract");
43
+ expect(stmt.items[2].name).toBe("multiply");
44
+ });
45
+ // Test 3: Import alias
46
+ it("should parse import with alias", () => {
47
+ const code = `import { add as sum } from "./math";`;
48
+ const program = parseCode(code);
49
+ const stmt = program.stmts[0];
50
+ expect(stmt.items[0].name).toBe("add");
51
+ expect(stmt.items[0].alias).toBe("sum");
52
+ });
53
+ // Test 4: Default import
54
+ it("should parse default import", () => {
55
+ const code = `import math from "./math";`;
56
+ const program = parseCode(code);
57
+ const stmt = program.stmts[0];
58
+ expect(stmt.default).toBe(true);
59
+ expect(stmt.items[0].name).toBe("math");
60
+ });
61
+ // Test 5: Export with function
62
+ it("should parse export function", () => {
63
+ const code = `export fn add(a: i32, b: i32) -> i32 { a + b }`;
64
+ const program = parseCode(code);
65
+ const stmt = program.stmts[0];
66
+ expect(stmt.kind).toBe("export_decl");
67
+ expect(typeof stmt.target).not.toBe("string");
68
+ });
69
+ // Test 6: Export with struct
70
+ it("should parse export struct", () => {
71
+ const code = `export struct Point { x: i32, y: i32 }`;
72
+ const program = parseCode(code);
73
+ const stmt = program.stmts[0];
74
+ expect(stmt.kind).toBe("export_decl");
75
+ });
76
+ // Test 7: Export list
77
+ it("should parse export list", () => {
78
+ const code = `export { add, multiply, PI };`;
79
+ const program = parseCode(code);
80
+ const stmt = program.stmts[0];
81
+ expect(typeof stmt.target).toBe("object");
82
+ const names = stmt.target;
83
+ expect(names.length).toBe(3);
84
+ expect(names[0]).toBe("add");
85
+ expect(names[1]).toBe("multiply");
86
+ expect(names[2]).toBe("PI");
87
+ });
88
+ // Test 8: Type checking with imports
89
+ it("should check imported names in scope", () => {
90
+ const code = `
91
+ import { add } from "./math";
92
+ var result: i32 = add(2, 3);
93
+ `;
94
+ const program = parseCode(code);
95
+ const checker = new checker_1.TypeChecker();
96
+ const errors = checker.check(program);
97
+ // import 문이 성공적으로 처리되어야 함
98
+ expect(errors.length).toBeLessThan(3); // 약간의 에러는 있을 수 있음 (모듈 미로드)
99
+ });
100
+ // Test 9: Multiple imports
101
+ it("should parse multiple import statements", () => {
102
+ const code = `
103
+ import { add } from "./math";
104
+ import { map, filter } from "./array";
105
+ fn main() -> void { }
106
+ `;
107
+ const program = parseCode(code);
108
+ expect(program.stmts[0].kind).toBe("import_decl");
109
+ expect(program.stmts[1].kind).toBe("import_decl");
110
+ expect(program.stmts[2].kind).toBe("fn_decl");
111
+ });
112
+ // Test 10: Import and Export together
113
+ it("should parse import and export together", () => {
114
+ const code = `
115
+ import { double } from "./utils";
116
+ export fn quad(x: i32) -> i32 { double(double(x)) }
117
+ `;
118
+ const program = parseCode(code);
119
+ expect(program.stmts[0].kind).toBe("import_decl");
120
+ expect(program.stmts[1].kind).toBe("export_decl");
121
+ });
122
+ });
123
+ //# sourceMappingURL=module-jest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-jest.test.js","sourceRoot":"","sources":["../src/module-jest.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { Token } from "./lexer";
2
+ import { Program } from "./ast";
3
+ export type ParseError = {
4
+ message: string;
5
+ line: number;
6
+ col: number;
7
+ };
8
+ export declare class Parser {
9
+ private tokens;
10
+ private pos;
11
+ private errors;
12
+ constructor(tokens: Token[]);
13
+ parse(): {
14
+ program: Program;
15
+ errors: ParseError[];
16
+ };
17
+ private parseStmt;
18
+ private parseVarDecl;
19
+ private parseFnDecl;
20
+ private parseStructDecl;
21
+ private parseTraitDecl;
22
+ private parseImplDecl;
23
+ private parseIfStmt;
24
+ private parseMatchStmt;
25
+ private parseForStmt;
26
+ private parseWhileStmt;
27
+ private parseBreakStmt;
28
+ private parseContinueStmt;
29
+ private parseSpawnStmt;
30
+ private parseImportStmt;
31
+ private parseExportStmt;
32
+ private parseReturnStmt;
33
+ private parseExprStmt;
34
+ private parseBlock;
35
+ private parseExpr;
36
+ private nud;
37
+ private led;
38
+ private parseArrayLit;
39
+ private parseIfExpr;
40
+ private parseMatchExpr;
41
+ private parseBlockExprs;
42
+ private parseMatchArms;
43
+ private parseFnLit;
44
+ private parsePattern;
45
+ private parseType;
46
+ private peek;
47
+ private advance;
48
+ private check;
49
+ private match;
50
+ private expect;
51
+ private expectIdent;
52
+ private isAtEnd;
53
+ private isStmtStart;
54
+ private error;
55
+ private synchronize;
56
+ }