feat: 模块系统 mod + pub — 多文件编译支持
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
mod math_mod;
|
||||
|
||||
fn main() -> i64 {
|
||||
let result = math_mod::add(3, 4);
|
||||
print_i64(result); // 7
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
pub fn add(a: i64, b: i64) -> i64 {
|
||||
return a + b;
|
||||
}
|
||||
+11
-11
@@ -12,7 +12,7 @@ void test_codegen_simple_function() {
|
||||
AstNode* ret = ast_make_return(&a, ast_make_literal_i64(&a, 42, loc_at(1, 1)), loc_at(1, 1));
|
||||
AstNode* stmts[] = { ret };
|
||||
AstNode* body = ast_make_block(&a, stmts, 1, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, NULL, 0, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
|
||||
@@ -46,7 +46,7 @@ void test_codegen_if_else() {
|
||||
ast_make_literal_bool(&a, true, loc_at(1, 1)), then_block, else_block, loc_at(1, 1));
|
||||
AstNode* stmts[] = { if_stmt };
|
||||
AstNode* body = ast_make_block(&a, stmts, 1, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, NULL, 0, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
|
||||
@@ -77,7 +77,7 @@ void test_codegen_binary_ops() {
|
||||
AstNode* ret = ast_make_return(&a, expr, loc_at(1, 1));
|
||||
AstNode* stmts[] = { ret };
|
||||
AstNode* body = ast_make_block(&a, stmts, 1, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, NULL, 0, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
|
||||
@@ -107,7 +107,7 @@ void test_codegen_while_loop() {
|
||||
AstNode* ret = ast_make_return(&a, ast_make_literal_i64(&a, 1, loc_at(1, 1)), loc_at(1, 1));
|
||||
AstNode* stmts[] = { while_stmt, ret };
|
||||
AstNode* fn_body = ast_make_block(&a, stmts, 2, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, fn_body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, fn_body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, NULL, 0, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
|
||||
@@ -160,7 +160,7 @@ void test_codegen_struct_decl() {
|
||||
AstNode* ret = ast_make_return(&a, field_x, loc_at(1, 1));
|
||||
AstNode* stmts[] = { let_stmt, ret };
|
||||
AstNode* body = ast_make_block(&a, stmts, 2, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, structs, 1, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
@@ -215,7 +215,7 @@ void test_codegen_struct_field_access() {
|
||||
AstNode* ret = ast_make_return(&a, field_y, loc_at(1, 1));
|
||||
AstNode* stmts[] = { let_stmt, ret };
|
||||
AstNode* body = ast_make_block(&a, stmts, 2, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, structs, 1, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
@@ -265,7 +265,7 @@ void test_codegen_enum() {
|
||||
|
||||
AstNode* stmts[] = { let_stmt, print_call, ret };
|
||||
AstNode* body = ast_make_block(&a, stmts, 3, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, NULL, 0, NULL, 0, enums, 1, NULL, 0, loc_at(1, 1));
|
||||
@@ -330,7 +330,7 @@ void test_codegen_array() {
|
||||
|
||||
AstNode* stmts[] = { let_stmt, arr_assign, print_call, ret };
|
||||
AstNode* body = ast_make_block(&a, stmts, 4, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
AstNode* fns[] = { fn };
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, NULL, 0, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
|
||||
@@ -373,7 +373,7 @@ void test_codegen_method_call() {
|
||||
AstNode* ret_body = ast_make_return(&a, field_x, loc_at(1, 1));
|
||||
AstNode* ret_stmts[] = { ret_body };
|
||||
AstNode* body = ast_make_block(&a, ret_stmts, 1, loc_at(1, 1));
|
||||
AstNode* get_x_fn = ast_make_function(&a, "Point$get_x", params, 1, TYPE_I64, NULL, body, loc_at(1, 1));
|
||||
AstNode* get_x_fn = ast_make_function(&a, "Point$get_x", params, 1, TYPE_I64, NULL, body, false, loc_at(1, 1));
|
||||
|
||||
/* fn main() -> i64 {
|
||||
let p = Point { x: 42, y: 0 };
|
||||
@@ -399,7 +399,7 @@ void test_codegen_method_call() {
|
||||
AstNode* ret_main = ast_make_return(&a, method_call, loc_at(1, 1));
|
||||
AstNode* main_stmts[] = { let_stmt, ret_main };
|
||||
AstNode* main_body = ast_make_block(&a, main_stmts, 2, loc_at(1, 1));
|
||||
AstNode* main_fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, main_body, loc_at(1, 1));
|
||||
AstNode* main_fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, main_body, false, loc_at(1, 1));
|
||||
|
||||
AstNode* fns[] = { get_x_fn, main_fn };
|
||||
AstNode* prog = ast_make_program(&a, fns, 2, structs, 1, NULL, 0, NULL, 0, NULL, 0, loc_at(1, 1));
|
||||
@@ -486,7 +486,7 @@ void test_codegen_match() {
|
||||
|
||||
AstNode* main_stmts[] = { let_stmt, outer_if };
|
||||
AstNode* main_body = ast_make_block(&a, main_stmts, 2, loc_at(1, 1));
|
||||
AstNode* main_fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, main_body, loc_at(1, 1));
|
||||
AstNode* main_fn = ast_make_function(&a, "main", NULL, 0, TYPE_I64, NULL, main_body, false, loc_at(1, 1));
|
||||
|
||||
AstNode* fns[] = { main_fn };
|
||||
AstNode* prog = ast_make_program(&a, fns, 1, NULL, 0, NULL, 0, enums, 1, NULL, 0, loc_at(1, 1));
|
||||
|
||||
Reference in New Issue
Block a user