-use "progs/print_funcs"
-use "progs/intrinsics"
+#include_folder "./core"
+
+#include_file "printing"
+#include_file "intrinsics"
use package printing
}
array_map :: proc (arr: I32Array, map: proc (i32) -> i32) {
- for i: 0, arr.length arr.data[i] = map(arr.data[i]);
+ for i: 0, arr.length do arr.data[i] = map(arr.data[i]);
}
minus_one :: proc (n: i32) -> i32 { return n - 1; }
double :: proc (n: i32) -> i32 { return n << 1; }
-proc #export "main" {
+proc #export "start" {
call_me(echo, 10);
print(cast(my_int) add);
funcs[3] = div;
funcs[4] = mod;
- for i: 0, 5 print(funcs[i](10, 3));
+ for i: 0, 5 do print(funcs[i](10, 3));
dc := cast(^DeferredCall) __heap_start;
dc.func = add;
len :: 10;
data := cast(^i32) (cast(i32) __heap_start + sizeof DeferredCall);
- for i: 0, len data[i] = i;
+ for i: 0, len do data[i] = i;
print(cast([] i32) data, len);
add_one :: proc (n: i32) -> i32 { return n + 1; };
- array_map(len, data, add_one);
+ arr : I32Array;
+ arr.length = len;
+ arr.data = data;
+ array_map(arr, add_one);
print(cast([] i32) data, len);
cheese := Cheeses.Cheddar;
AstGlobal builtin_stack_top = { Ast_Kind_Global, Ast_Flag_Const | Ast_Flag_Global_Stack_Top, &builtin_stack_top_token, NULL, (AstType *) &basic_type_rawptr, NULL };
const BuiltinSymbol builtin_symbols[] = {
- { "void", (AstNode *) &basic_type_void },
- { "bool", (AstNode *) &basic_type_bool },
- { "i8", (AstNode *) &basic_type_i8 },
- { "u8", (AstNode *) &basic_type_u8 },
- { "i16", (AstNode *) &basic_type_i16 },
- { "u16", (AstNode *) &basic_type_u16 },
- { "i32", (AstNode *) &basic_type_i32 },
- { "u32", (AstNode *) &basic_type_u32 },
- { "i64", (AstNode *) &basic_type_i64 },
- { "u64", (AstNode *) &basic_type_u64 },
- { "f32", (AstNode *) &basic_type_f32 },
- { "f64", (AstNode *) &basic_type_f64 },
- { "rawptr", (AstNode *) &basic_type_rawptr },
+ { NULL, "void", (AstNode *) &basic_type_void },
+ { NULL, "bool", (AstNode *) &basic_type_bool },
+ { NULL, "i8", (AstNode *) &basic_type_i8 },
+ { NULL, "u8", (AstNode *) &basic_type_u8 },
+ { NULL, "i16", (AstNode *) &basic_type_i16 },
+ { NULL, "u16", (AstNode *) &basic_type_u16 },
+ { NULL, "i32", (AstNode *) &basic_type_i32 },
+ { NULL, "u32", (AstNode *) &basic_type_u32 },
+ { NULL, "i64", (AstNode *) &basic_type_i64 },
+ { NULL, "u64", (AstNode *) &basic_type_u64 },
+ { NULL, "f32", (AstNode *) &basic_type_f32 },
+ { NULL, "f64", (AstNode *) &basic_type_f64 },
+ { NULL, "rawptr", (AstNode *) &basic_type_rawptr },
- { "__heap_start", (AstNode *) &builtin_heap_start },
- { "__stack_top", (AstNode *) &builtin_stack_top },
+ { "builtin", "__heap_start", (AstNode *) &builtin_heap_start },
+ { "builtin", "__stack_top", (AstNode *) &builtin_stack_top },
- { NULL, NULL },
+ { NULL, NULL, NULL },
};
void initialize_builtins() {