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.
- package/README.md +548 -0
- package/dist/ast.d.ts +367 -0
- package/dist/ast.js +4 -0
- package/dist/ast.js.map +1 -0
- package/dist/async-basic.test.d.ts +1 -0
- package/dist/async-basic.test.js +88 -0
- package/dist/async-basic.test.js.map +1 -0
- package/dist/async-jest.test.d.ts +1 -0
- package/dist/async-jest.test.js +99 -0
- package/dist/async-jest.test.js.map +1 -0
- package/dist/channel-jest.test.d.ts +1 -0
- package/dist/channel-jest.test.js +148 -0
- package/dist/channel-jest.test.js.map +1 -0
- package/dist/checker-jest.test.d.ts +1 -0
- package/dist/checker-jest.test.js +160 -0
- package/dist/checker-jest.test.js.map +1 -0
- package/dist/checker.d.ts +149 -0
- package/dist/checker.js +1565 -0
- package/dist/checker.js.map +1 -0
- package/dist/checker.test.d.ts +1 -0
- package/dist/checker.test.js +217 -0
- package/dist/checker.test.js.map +1 -0
- package/dist/compiler-jest.test.d.ts +1 -0
- package/dist/compiler-jest.test.js +233 -0
- package/dist/compiler-jest.test.js.map +1 -0
- package/dist/compiler.d.ts +127 -0
- package/dist/compiler.js +1588 -0
- package/dist/compiler.js.map +1 -0
- package/dist/compiler.test.d.ts +1 -0
- package/dist/compiler.test.js +313 -0
- package/dist/compiler.test.js.map +1 -0
- package/dist/db-100m-full.d.ts +5 -0
- package/dist/db-100m-full.js +78 -0
- package/dist/db-100m-full.js.map +1 -0
- package/dist/db-100m-no-index.d.ts +12 -0
- package/dist/db-100m-no-index.js +119 -0
- package/dist/db-100m-no-index.js.map +1 -0
- package/dist/db-100m-real.d.ts +5 -0
- package/dist/db-100m-real.js +131 -0
- package/dist/db-100m-real.js.map +1 -0
- package/dist/db-100m-streaming.d.ts +15 -0
- package/dist/db-100m-streaming.js +164 -0
- package/dist/db-100m-streaming.js.map +1 -0
- package/dist/db-100m-test.d.ts +5 -0
- package/dist/db-100m-test.js +111 -0
- package/dist/db-100m-test.js.map +1 -0
- package/dist/db-jest.test.d.ts +1 -0
- package/dist/db-jest.test.js +182 -0
- package/dist/db-jest.test.js.map +1 -0
- package/dist/db-runtime.d.ts +24 -0
- package/dist/db-runtime.js +204 -0
- package/dist/db-runtime.js.map +1 -0
- package/dist/db.d.ts +249 -0
- package/dist/db.js +593 -0
- package/dist/db.js.map +1 -0
- package/dist/file-io-jest.test.d.ts +1 -0
- package/dist/file-io-jest.test.js +225 -0
- package/dist/file-io-jest.test.js.map +1 -0
- package/dist/for-of-jest.test.d.ts +1 -0
- package/dist/for-of-jest.test.js +230 -0
- package/dist/for-of-jest.test.js.map +1 -0
- package/dist/for-of.test.d.ts +1 -0
- package/dist/for-of.test.js +305 -0
- package/dist/for-of.test.js.map +1 -0
- package/dist/function-literal-jest.test.d.ts +1 -0
- package/dist/function-literal-jest.test.js +180 -0
- package/dist/function-literal-jest.test.js.map +1 -0
- package/dist/function-literal.test.d.ts +1 -0
- package/dist/function-literal.test.js +245 -0
- package/dist/function-literal.test.js.map +1 -0
- package/dist/generics-jest.test.d.ts +1 -0
- package/dist/generics-jest.test.js +93 -0
- package/dist/generics-jest.test.js.map +1 -0
- package/dist/ir-gen.d.ts +15 -0
- package/dist/ir-gen.js +400 -0
- package/dist/ir-gen.js.map +1 -0
- package/dist/ir.d.ts +114 -0
- package/dist/ir.js +5 -0
- package/dist/ir.js.map +1 -0
- package/dist/lexer.d.ts +110 -0
- package/dist/lexer.js +467 -0
- package/dist/lexer.js.map +1 -0
- package/dist/lexer.test.d.ts +1 -0
- package/dist/lexer.test.js +426 -0
- package/dist/lexer.test.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +241 -0
- package/dist/main.js.map +1 -0
- package/dist/module-jest.test.d.ts +1 -0
- package/dist/module-jest.test.js +123 -0
- package/dist/module-jest.test.js.map +1 -0
- package/dist/parser.d.ts +56 -0
- package/dist/parser.js +1060 -0
- package/dist/parser.js.map +1 -0
- package/dist/parser.test.d.ts +1 -0
- package/dist/parser.test.js +461 -0
- package/dist/parser.test.js.map +1 -0
- package/dist/pattern-matching-jest.test.d.ts +1 -0
- package/dist/pattern-matching-jest.test.js +158 -0
- package/dist/pattern-matching-jest.test.js.map +1 -0
- package/dist/pkg/init.d.ts +1 -0
- package/dist/pkg/init.js +118 -0
- package/dist/pkg/init.js.map +1 -0
- package/dist/pkg/install.d.ts +1 -0
- package/dist/pkg/install.js +77 -0
- package/dist/pkg/install.js.map +1 -0
- package/dist/pkg/registry.d.ts +23 -0
- package/dist/pkg/registry.js +106 -0
- package/dist/pkg/registry.js.map +1 -0
- package/dist/pkg/run.d.ts +1 -0
- package/dist/pkg/run.js +76 -0
- package/dist/pkg/run.js.map +1 -0
- package/dist/pkg/toml.d.ts +5 -0
- package/dist/pkg/toml.js +117 -0
- package/dist/pkg/toml.js.map +1 -0
- package/dist/repl.d.ts +15 -0
- package/dist/repl.js +197 -0
- package/dist/repl.js.map +1 -0
- package/dist/runtime/bytecode.d.ts +92 -0
- package/dist/runtime/bytecode.js +253 -0
- package/dist/runtime/bytecode.js.map +1 -0
- package/dist/runtime/value.d.ts +102 -0
- package/dist/runtime/value.js +302 -0
- package/dist/runtime/value.js.map +1 -0
- package/dist/runtime/vm.d.ts +65 -0
- package/dist/runtime/vm.js +293 -0
- package/dist/runtime/vm.js.map +1 -0
- package/dist/struct-instance-jest.test.d.ts +1 -0
- package/dist/struct-instance-jest.test.js +209 -0
- package/dist/struct-instance-jest.test.js.map +1 -0
- package/dist/struct-instance.test.d.ts +1 -0
- package/dist/struct-instance.test.js +291 -0
- package/dist/struct-instance.test.js.map +1 -0
- package/dist/struct-jest.test.d.ts +1 -0
- package/dist/struct-jest.test.js +176 -0
- package/dist/struct-jest.test.js.map +1 -0
- package/dist/struct.test.d.ts +1 -0
- package/dist/struct.test.js +231 -0
- package/dist/struct.test.js.map +1 -0
- package/dist/trait-jest.test.d.ts +1 -0
- package/dist/trait-jest.test.js +120 -0
- package/dist/trait-jest.test.js.map +1 -0
- package/dist/vm-jest.test.d.ts +1 -0
- package/dist/vm-jest.test.js +569 -0
- package/dist/vm-jest.test.js.map +1 -0
- package/dist/vm.d.ts +81 -0
- package/dist/vm.js +1956 -0
- package/dist/vm.js.map +1 -0
- package/dist/vm.test.d.ts +1 -0
- package/dist/vm.test.js +337 -0
- package/dist/vm.test.js.map +1 -0
- package/dist/web-repl/sandbox.d.ts +11 -0
- package/dist/web-repl/sandbox.js +76 -0
- package/dist/web-repl/sandbox.js.map +1 -0
- package/dist/web-repl/server.d.ts +1 -0
- package/dist/web-repl/server.js +111 -0
- package/dist/web-repl/server.js.map +1 -0
- package/dist/while-loop-jest.test.d.ts +1 -0
- package/dist/while-loop-jest.test.js +201 -0
- package/dist/while-loop-jest.test.js.map +1 -0
- package/dist/while-loop.test.d.ts +1 -0
- package/dist/while-loop.test.js +262 -0
- package/dist/while-loop.test.js.map +1 -0
- package/docs/EXPERIENCE.md +787 -0
- package/docs/README.md +175 -0
- package/docs/V1_V2_V3_ANALYSIS.md +107 -0
- package/docs/_config.yml +36 -0
- package/docs/api-reference.md +459 -0
- package/docs/architecture.md +470 -0
- package/docs/benchmarks.md +295 -0
- package/docs/comparison.md +454 -0
- package/docs/index.md +335 -0
- package/docs/language-completeness.md +228 -0
- package/docs/learning-guide.md +651 -0
- package/package.json +65 -0
- package/src/api/deploy_key.fl +294 -0
- package/src/api/issue.fl +302 -0
- package/src/api/org.fl +356 -0
- package/src/api/repo.fl +394 -0
- package/src/api/team.fl +299 -0
- package/src/api/user.fl +385 -0
- package/src/api/webhook.fl +273 -0
- package/src/ast.ts +158 -0
- package/src/async-basic.test.ts +94 -0
- package/src/async-jest.test.ts +107 -0
- package/src/channel-jest.test.ts +158 -0
- package/src/checker-jest.test.ts +189 -0
- package/src/checker.test.ts +279 -0
- package/src/checker.ts +1861 -0
- package/src/commands/analyze.fl +227 -0
- package/src/commands/auth.fl +315 -0
- package/src/commands/batch.fl +349 -0
- package/src/commands/config.fl +199 -0
- package/src/commands/deploy_key.fl +352 -0
- package/src/commands/issue.fl +275 -0
- package/src/commands/main.fl +492 -0
- package/src/commands/org.fl +425 -0
- package/src/commands/repo.fl +581 -0
- package/src/commands/team.fl +244 -0
- package/src/commands/user.fl +423 -0
- package/src/commands/webhook.fl +400 -0
- package/src/compiler-jest.test.ts +275 -0
- package/src/compiler.test.ts +375 -0
- package/src/compiler.ts +1770 -0
- package/src/config.fl +175 -0
- package/src/core/batch.fl +355 -0
- package/src/core/cache.fl +284 -0
- package/src/core/ensure.fl +324 -0
- package/src/db-100m-full.ts +96 -0
- package/src/db-100m-no-index.ts +133 -0
- package/src/db-100m-real.ts +152 -0
- package/src/db-100m-streaming.ts +154 -0
- package/src/db-100m-test.ts +136 -0
- package/src/db-jest.test.ts +161 -0
- package/src/db-runtime.ts +242 -0
- package/src/db.ts +676 -0
- package/src/errors.fl +134 -0
- package/src/for-of-jest.test.ts +246 -0
- package/src/for-of.test.ts +308 -0
- package/src/function-literal-jest.test.ts +193 -0
- package/src/function-literal.test.ts +248 -0
- package/src/generics-jest.test.ts +104 -0
- package/src/http/client.fl +327 -0
- package/src/ir-gen.ts +459 -0
- package/src/ir.ts +80 -0
- package/src/lexer.test.ts +499 -0
- package/src/lexer.ts +522 -0
- package/src/main.ts +223 -0
- package/src/models.fl +162 -0
- package/src/module-jest.test.ts +145 -0
- package/src/parser.test.ts +542 -0
- package/src/parser.ts +1211 -0
- package/src/pattern-matching-jest.test.ts +170 -0
- package/src/pkg/init.ts +91 -0
- package/src/pkg/install.ts +56 -0
- package/src/pkg/registry.ts +103 -0
- package/src/pkg/run.ts +49 -0
- package/src/pkg/toml.ts +129 -0
- package/src/repl.ts +190 -0
- package/src/runtime/bytecode.ts +291 -0
- package/src/runtime/value.ts +322 -0
- package/src/runtime/vm.ts +354 -0
- package/src/self-host/bootstrap.fl +68 -0
- package/src/self-host/interpreter.fl +361 -0
- package/src/self-host/lexer-simple.fl +22 -0
- package/src/self-host/lexer.fl +305 -0
- package/src/self-host/parser.fl +580 -0
- package/src/struct-instance-jest.test.ts +221 -0
- package/src/struct-instance.test.ts +293 -0
- package/src/struct-jest.test.ts +187 -0
- package/src/struct.test.ts +234 -0
- package/src/trait-jest.test.ts +136 -0
- package/src/vm-jest.test.ts +754 -0
- package/src/vm.ts +1976 -0
- package/src/web-repl/public/index.html +50 -0
- package/src/web-repl/public/main.js +105 -0
- package/src/web-repl/public/style.css +225 -0
- package/src/web-repl/sandbox.ts +88 -0
- package/src/web-repl/server.ts +97 -0
- package/src/while-loop-jest.test.ts +218 -0
- 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":"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"}
|