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,293 @@
1
+ "use strict";
2
+ /**
3
+ * FreeLang Virtual Machine
4
+ * 스택 기반의 간단한 인터프리터
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.VirtualMachine = exports.RuntimeError = void 0;
8
+ const value_1 = require("./value");
9
+ const bytecode_1 = require("./bytecode");
10
+ /**
11
+ * 런타임 에러
12
+ */
13
+ class RuntimeError extends Error {
14
+ constructor(message, line = 0, column = 0) {
15
+ super(message);
16
+ this.line = line;
17
+ this.column = column;
18
+ this.name = 'RuntimeError';
19
+ }
20
+ }
21
+ exports.RuntimeError = RuntimeError;
22
+ /**
23
+ * FreeLang Virtual Machine
24
+ */
25
+ class VirtualMachine {
26
+ constructor() {
27
+ this.stack = [];
28
+ this.memory = new Map(); // 힙 메모리
29
+ this.globals = new Map(); // 전역 변수
30
+ this.locals = new Map(); // 지역 변수
31
+ this.callStack = [];
32
+ this.pc = 0; // 프로그램 카운터
33
+ this.instructions = [];
34
+ this.builtins = new Map();
35
+ this.nextPtr = 0; // 메모리 포인터
36
+ this.registerBuiltins();
37
+ }
38
+ /**
39
+ * 표준 내장 함수 등록
40
+ */
41
+ registerBuiltins() {
42
+ // 나중에 stdlib 모듈에서 자동으로 등록됨
43
+ }
44
+ /**
45
+ * Bytecode 실행
46
+ */
47
+ execute(instructions) {
48
+ this.instructions = instructions;
49
+ this.pc = 0;
50
+ this.stack = [];
51
+ try {
52
+ while (this.pc < instructions.length) {
53
+ const instr = instructions[this.pc];
54
+ this.executeInstruction(instr);
55
+ this.pc++;
56
+ }
57
+ return this.stack.pop() || { type: 'null' };
58
+ }
59
+ catch (error) {
60
+ if (error instanceof RuntimeError) {
61
+ throw error;
62
+ }
63
+ throw new RuntimeError(`VM Error: ${error instanceof Error ? error.message : String(error)}`, instructions[this.pc]?.line || 0, instructions[this.pc]?.column || 0);
64
+ }
65
+ }
66
+ /**
67
+ * 개별 명령어 실행
68
+ */
69
+ executeInstruction(instr) {
70
+ switch (instr.op) {
71
+ case bytecode_1.OpcodeType.PUSH:
72
+ this.stack.push(instr.arg);
73
+ break;
74
+ case bytecode_1.OpcodeType.POP:
75
+ if (this.stack.length === 0) {
76
+ throw new RuntimeError('Stack underflow');
77
+ }
78
+ this.stack.pop();
79
+ break;
80
+ case bytecode_1.OpcodeType.DUP:
81
+ if (this.stack.length === 0) {
82
+ throw new RuntimeError('Stack underflow');
83
+ }
84
+ const top = this.stack[this.stack.length - 1];
85
+ this.stack.push(value_1.ValueHandler.clone(top));
86
+ break;
87
+ // 산술 연산
88
+ case bytecode_1.OpcodeType.ADD:
89
+ this.binaryOp((a, b) => a + b, instr);
90
+ break;
91
+ case bytecode_1.OpcodeType.SUB:
92
+ this.binaryOp((a, b) => a - b, instr);
93
+ break;
94
+ case bytecode_1.OpcodeType.MUL:
95
+ this.binaryOp((a, b) => a * b, instr);
96
+ break;
97
+ case bytecode_1.OpcodeType.DIV:
98
+ this.binaryOp((a, b) => {
99
+ if (b === 0)
100
+ throw new RuntimeError('Division by zero');
101
+ return a / b;
102
+ }, instr);
103
+ break;
104
+ case bytecode_1.OpcodeType.MOD:
105
+ this.binaryOp((a, b) => {
106
+ if (b === 0)
107
+ throw new RuntimeError('Division by zero');
108
+ return a % b;
109
+ }, instr);
110
+ break;
111
+ // 비교 연산
112
+ case bytecode_1.OpcodeType.EQ: {
113
+ const b = this.popValue(instr);
114
+ const a = this.popValue(instr);
115
+ const result = value_1.ValueHandler.equals(a, b);
116
+ this.stack.push({ type: 'bool', value: result });
117
+ break;
118
+ }
119
+ case bytecode_1.OpcodeType.NE: {
120
+ const b = this.popValue(instr);
121
+ const a = this.popValue(instr);
122
+ const result = !value_1.ValueHandler.equals(a, b);
123
+ this.stack.push({ type: 'bool', value: result });
124
+ break;
125
+ }
126
+ case bytecode_1.OpcodeType.LT: {
127
+ const b = this.popValue(instr);
128
+ const a = this.popValue(instr);
129
+ const result = value_1.ValueHandler.lessThan(a, b);
130
+ this.stack.push({ type: 'bool', value: result });
131
+ break;
132
+ }
133
+ case bytecode_1.OpcodeType.LTE: {
134
+ const b = this.popValue(instr);
135
+ const a = this.popValue(instr);
136
+ const result = value_1.ValueHandler.lessThan(a, b) || value_1.ValueHandler.equals(a, b);
137
+ this.stack.push({ type: 'bool', value: result });
138
+ break;
139
+ }
140
+ case bytecode_1.OpcodeType.GT: {
141
+ const b = this.popValue(instr);
142
+ const a = this.popValue(instr);
143
+ const result = value_1.ValueHandler.lessThan(b, a);
144
+ this.stack.push({ type: 'bool', value: result });
145
+ break;
146
+ }
147
+ case bytecode_1.OpcodeType.GTE: {
148
+ const b = this.popValue(instr);
149
+ const a = this.popValue(instr);
150
+ const result = value_1.ValueHandler.lessThan(b, a) || value_1.ValueHandler.equals(a, b);
151
+ this.stack.push({ type: 'bool', value: result });
152
+ break;
153
+ }
154
+ // 논리 연산
155
+ case bytecode_1.OpcodeType.AND: {
156
+ const b = this.popValue(instr);
157
+ const a = this.popValue(instr);
158
+ const result = value_1.ValueHandler.toBoolean(a) && value_1.ValueHandler.toBoolean(b);
159
+ this.stack.push({ type: 'bool', value: result });
160
+ break;
161
+ }
162
+ case bytecode_1.OpcodeType.OR: {
163
+ const b = this.popValue(instr);
164
+ const a = this.popValue(instr);
165
+ const result = value_1.ValueHandler.toBoolean(a) || value_1.ValueHandler.toBoolean(b);
166
+ this.stack.push({ type: 'bool', value: result });
167
+ break;
168
+ }
169
+ case bytecode_1.OpcodeType.NOT: {
170
+ const a = this.popValue(instr);
171
+ const result = !value_1.ValueHandler.toBoolean(a);
172
+ this.stack.push({ type: 'bool', value: result });
173
+ break;
174
+ }
175
+ // 제어 흐름
176
+ case bytecode_1.OpcodeType.JUMP:
177
+ this.pc = instr.arg - 1; // -1은 pc++이 되기 때문
178
+ break;
179
+ case bytecode_1.OpcodeType.JUMP_IF_TRUE: {
180
+ const cond = this.popValue(instr);
181
+ if (value_1.ValueHandler.toBoolean(cond)) {
182
+ this.pc = instr.arg - 1;
183
+ }
184
+ break;
185
+ }
186
+ case bytecode_1.OpcodeType.JUMP_IF_FALSE: {
187
+ const cond = this.popValue(instr);
188
+ if (!value_1.ValueHandler.toBoolean(cond)) {
189
+ this.pc = instr.arg - 1;
190
+ }
191
+ break;
192
+ }
193
+ // 변수 접근
194
+ case bytecode_1.OpcodeType.LOAD_LOCAL: {
195
+ const index = instr.arg;
196
+ const value = this.locals.get(index) || { type: 'null' };
197
+ this.stack.push(value);
198
+ break;
199
+ }
200
+ case bytecode_1.OpcodeType.STORE_LOCAL: {
201
+ const index = instr.arg;
202
+ const value = this.popValue(instr);
203
+ this.locals.set(index, value);
204
+ break;
205
+ }
206
+ case bytecode_1.OpcodeType.LOAD_GLOBAL: {
207
+ const name = instr.arg;
208
+ const value = this.globals.get(name) || { type: 'null' };
209
+ this.stack.push(value);
210
+ break;
211
+ }
212
+ case bytecode_1.OpcodeType.STORE_GLOBAL: {
213
+ const name = instr.arg;
214
+ const value = this.popValue(instr);
215
+ this.globals.set(name, value);
216
+ break;
217
+ }
218
+ case bytecode_1.OpcodeType.PRINT: {
219
+ const value = this.popValue(instr);
220
+ process.stdout.write(value_1.ValueHandler.toString(value));
221
+ break;
222
+ }
223
+ case bytecode_1.OpcodeType.HALT:
224
+ this.pc = this.instructions.length; // 프로그램 종료
225
+ break;
226
+ case bytecode_1.OpcodeType.NOP:
227
+ // No operation
228
+ break;
229
+ default:
230
+ throw new RuntimeError(`Unknown opcode: ${instr.op}`);
231
+ }
232
+ }
233
+ /**
234
+ * 이진 연산 수행
235
+ */
236
+ binaryOp(op, instr) {
237
+ const b = this.popNumber(instr);
238
+ const a = this.popNumber(instr);
239
+ const result = op(a, b);
240
+ // 결과 타입 결정 (정수인지 실수인지)
241
+ const isInt = Number.isInteger(result);
242
+ this.stack.push(isInt ? { type: 'int', value: result } : { type: 'float', value: result });
243
+ }
244
+ /**
245
+ * 스택에서 Value 팝
246
+ */
247
+ popValue(instr) {
248
+ if (this.stack.length === 0) {
249
+ throw new RuntimeError('Stack underflow', instr.line, instr.column);
250
+ }
251
+ return this.stack.pop();
252
+ }
253
+ /**
254
+ * 스택에서 숫자 팝
255
+ */
256
+ popNumber(instr) {
257
+ const value = this.popValue(instr);
258
+ if (value.type !== 'int' && value.type !== 'float') {
259
+ throw new RuntimeError(`Expected number, got ${value.type}`, instr.line, instr.column);
260
+ }
261
+ return value.value;
262
+ }
263
+ /**
264
+ * 내장 함수 등록
265
+ */
266
+ registerBuiltin(name, fn) {
267
+ this.builtins.set(name, fn);
268
+ }
269
+ /**
270
+ * 내장 함수 호출
271
+ */
272
+ callBuiltin(name, args) {
273
+ const fn = this.builtins.get(name);
274
+ if (!fn) {
275
+ throw new RuntimeError(`Unknown builtin function: ${name}`);
276
+ }
277
+ return fn(this, args);
278
+ }
279
+ /**
280
+ * 스택 상태 확인 (디버깅용)
281
+ */
282
+ getStackTrace() {
283
+ const trace = [];
284
+ trace.push(`PC: ${this.pc}`);
285
+ trace.push(`Stack (${this.stack.length} items):`);
286
+ this.stack.forEach((v, i) => {
287
+ trace.push(` [${i}] ${value_1.ValueHandler.toString(v)}`);
288
+ });
289
+ return trace.join('\n');
290
+ }
291
+ }
292
+ exports.VirtualMachine = VirtualMachine;
293
+ //# sourceMappingURL=vm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm.js","sourceRoot":"","sources":["../../src/runtime/vm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ // FreeLang v4 — Struct Instance Tests (Phase 8.1 Complete) - Jest Format
3
+ // struct 인스턴스 생성, 필드 접근, 필드 할당
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
+ function lex(source) {
9
+ const lexer = new lexer_1.Lexer(source);
10
+ return lexer.tokenize();
11
+ }
12
+ function parse(source) {
13
+ const { tokens, errors: lexErrors } = lex(source);
14
+ if (lexErrors.length > 0)
15
+ throw new Error(`Lex error: ${lexErrors[0].message}`);
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 error: ${parseErrors[0].message}`);
20
+ return program;
21
+ }
22
+ function check(source) {
23
+ const program = parse(source);
24
+ const checker = new checker_1.TypeChecker();
25
+ const errors = checker.check(program);
26
+ if (errors.length > 0)
27
+ throw new Error(`Check error: ${errors[0].message}`);
28
+ return program;
29
+ }
30
+ // ============================================================
31
+ // Jest Tests
32
+ // ============================================================
33
+ describe("Struct Instance Tests", () => {
34
+ describe("기본 struct 인스턴스 생성", () => {
35
+ it("struct 선언과 인스턴스 생성", () => {
36
+ const source = `
37
+ struct Point {
38
+ x: f64,
39
+ y: f64
40
+ }
41
+ var p = Point { x: 1.0, y: 2.0 };
42
+ `;
43
+ const program = check(source);
44
+ expect(program.stmts.length).toBe(2);
45
+ });
46
+ });
47
+ describe("struct 인스턴스 필드 접근", () => {
48
+ it("필드 읽기 기본", () => {
49
+ const source = `
50
+ struct Person {
51
+ name: string,
52
+ age: i32
53
+ }
54
+ var alice = Person { name: "Alice", age: 30 };
55
+ var name = alice.name;
56
+ var age = alice.age;
57
+ `;
58
+ const program = check(source);
59
+ expect(program.stmts.length).toBe(4);
60
+ });
61
+ });
62
+ describe("struct 필드 타입 검사", () => {
63
+ it("필드 타입 불일치 감지", () => {
64
+ const source = `
65
+ struct Point {
66
+ x: f64,
67
+ y: f64
68
+ }
69
+ var p = Point { x: 1, y: 2.0 };
70
+ `;
71
+ expect(() => check(source)).toThrow();
72
+ });
73
+ });
74
+ describe("struct 필드 누락 검사", () => {
75
+ it("필드 누락 감지", () => {
76
+ const source = `
77
+ struct Person {
78
+ name: string,
79
+ age: i32
80
+ }
81
+ var bob = Person { name: "Bob" };
82
+ `;
83
+ expect(() => check(source)).toThrow();
84
+ });
85
+ });
86
+ describe("struct 필드 초과 검사", () => {
87
+ it("필드 초과 감지", () => {
88
+ const source = `
89
+ struct Point {
90
+ x: f64,
91
+ y: f64
92
+ }
93
+ var p = Point { x: 1.0, y: 2.0, z: 3.0 };
94
+ `;
95
+ expect(() => check(source)).toThrow();
96
+ });
97
+ });
98
+ describe("undefined struct 검사", () => {
99
+ it("정의되지 않은 struct 감지", () => {
100
+ const source = `
101
+ var p = Point { x: 1.0, y: 2.0 };
102
+ `;
103
+ expect(() => check(source)).toThrow();
104
+ });
105
+ });
106
+ describe("struct 인스턴스 타입 검사", () => {
107
+ it("타입 주석이 있는 struct 인스턴스", () => {
108
+ const source = `
109
+ struct Point {
110
+ x: f64,
111
+ y: f64
112
+ }
113
+ var p: Point = Point { x: 1.0, y: 2.0 };
114
+ `;
115
+ const program = check(source);
116
+ expect(program.stmts.length).toBe(2);
117
+ });
118
+ });
119
+ describe("중첩 struct", () => {
120
+ it("struct 내부에 struct 필드", () => {
121
+ const source = `
122
+ struct Address {
123
+ city: string,
124
+ zipcode: string
125
+ }
126
+ struct Person {
127
+ name: string,
128
+ address: Address
129
+ }
130
+ var addr = Address { city: "Seoul", zipcode: "123456" };
131
+ var person = Person { name: "Alice", address: addr };
132
+ `;
133
+ const program = check(source);
134
+ expect(program.stmts.length).toBe(4);
135
+ });
136
+ });
137
+ describe("배열 필드", () => {
138
+ it("struct에 배열 필드 사용", () => {
139
+ const source = `
140
+ struct Team {
141
+ members: [string],
142
+ scores: [i32]
143
+ }
144
+ var team = Team { members: ["Alice", "Bob"], scores: [10, 20] };
145
+ `;
146
+ const program = check(source);
147
+ expect(program.stmts.length).toBe(2);
148
+ });
149
+ });
150
+ describe("Option 필드", () => {
151
+ it("struct에 Option 필드", () => {
152
+ const source = `
153
+ struct Config {
154
+ name: string,
155
+ value: Option<i32>
156
+ }
157
+ var config = Config { name: "test", value: Some(42) };
158
+ `;
159
+ const program = parse(source);
160
+ expect(program.stmts.length).toBe(2);
161
+ });
162
+ });
163
+ describe("필드 접근으로 값 추출", () => {
164
+ it("여러 필드 접근", () => {
165
+ const source = `
166
+ struct Rectangle {
167
+ width: f64,
168
+ height: f64
169
+ }
170
+ var rect = Rectangle { width: 10.0, height: 5.0 };
171
+ var w = rect.width;
172
+ var h = rect.height;
173
+ `;
174
+ const program = check(source);
175
+ expect(program.stmts.length).toBe(4);
176
+ });
177
+ });
178
+ describe("여러 struct 인스턴스", () => {
179
+ it("같은 struct의 다중 인스턴스", () => {
180
+ const source = `
181
+ struct Point {
182
+ x: f64,
183
+ y: f64
184
+ }
185
+ var p1 = Point { x: 1.0, y: 2.0 };
186
+ var p2 = Point { x: 3.0, y: 4.0 };
187
+ var p3 = Point { x: 5.0, y: 6.0 };
188
+ `;
189
+ const program = check(source);
190
+ expect(program.stmts.length).toBe(4);
191
+ });
192
+ });
193
+ describe("함수 내 struct 인스턴스", () => {
194
+ it("함수에서 struct 반환", () => {
195
+ const source = `
196
+ struct Point {
197
+ x: f64,
198
+ y: f64
199
+ }
200
+ fn make_point(x: f64, y: f64) -> Point {
201
+ Point { x: x, y: y }
202
+ }
203
+ `;
204
+ const program = check(source);
205
+ expect(program.stmts.length).toBe(2);
206
+ });
207
+ });
208
+ });
209
+ //# sourceMappingURL=struct-instance-jest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct-instance-jest.test.js","sourceRoot":"","sources":["../src/struct-instance-jest.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};