From d6ca8cb5c76df77dfe004f8dfde07c1320247f75 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 12 Aug 2020 12:29:30 -0500 Subject: [PATCH] added 'builtin' package for symbols that are built into the language --- core/alloc.onyx | 1 + docs/plan | 3 +-- include/onyxastnodes.h | 1 + onyx | Bin 391224 -> 395392 bytes progs/fcf.onyx | 19 ++++++++++++------- progs/stack_based.onyx | 8 ++++++-- src/onyxbuiltins.c | 32 ++++++++++++++++---------------- src/onyxsymres.c | 13 ++++++++++++- 8 files changed, 49 insertions(+), 28 deletions(-) diff --git a/core/alloc.onyx b/core/alloc.onyx index fda4cdb4..fe975ed3 100644 --- a/core/alloc.onyx +++ b/core/alloc.onyx @@ -3,6 +3,7 @@ package memory #include_file "memory" #include_file "intrinsics" +use package builtin { __heap_start } use package intrinsics { memory_size, memory_grow } // Need to define this somewhere diff --git a/docs/plan b/docs/plan index fe7948b1..316d6f7d 100644 --- a/docs/plan +++ b/docs/plan @@ -162,10 +162,9 @@ HOW: - structs can still be passed by value however - removed the implicit splatting feature - [ ] package builtin + [X] package builtin - Place to store builtin types and values __heap_start - __stack_base __stack_top etc diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index ebb99d5e..8af55706 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -487,6 +487,7 @@ extern AstNumLit builtin_heap_start; extern AstGlobal builtin_stack_top; typedef struct BuiltinSymbol { + char* package; char* sym; AstNode* node; } BuiltinSymbol; diff --git a/onyx b/onyx index efe6385a6d6f79bcef1cf9f49774e6ecc66e3de8..3c14e98c5508af1d376e953cb8d0b63a1bd1a131 100755 GIT binary patch delta 56859 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%0AWz*ABW_6t`oRGv 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 delta 56566 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≺_;Jw(Sq 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 diff --git a/progs/fcf.onyx b/progs/fcf.onyx index b16687ad..12500c0b 100644 --- a/progs/fcf.onyx +++ b/progs/fcf.onyx @@ -1,5 +1,7 @@ -use "progs/print_funcs" -use "progs/intrinsics" +#include_folder "./core" + +#include_file "printing" +#include_file "intrinsics" use package printing @@ -39,13 +41,13 @@ I32Array :: struct { } 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); @@ -56,7 +58,7 @@ proc #export "main" { 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; @@ -67,12 +69,15 @@ proc #export "main" { 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; diff --git a/progs/stack_based.onyx b/progs/stack_based.onyx index df4699c7..b0ac4c35 100644 --- a/progs/stack_based.onyx +++ b/progs/stack_based.onyx @@ -88,8 +88,6 @@ start :: proc #export { print("Hello, World!"); print_hex(cast(u64) some_value); print("Hello, World!"); - print_ptr(__heap_start); - print_ptr(__stack_top); print_bin(42l); print_hex(42l); @@ -143,4 +141,10 @@ start :: proc #export { |> print(); stupid_idea(1234)() |> print(); + + v : [5] Vec3; + v[2].x = 4; + v[2].y = 5; + v[2].z = 6; + mag_squared(v[2]) |> print(); } \ No newline at end of file diff --git a/src/onyxbuiltins.c b/src/onyxbuiltins.c index 1a8c7bcc..e4a8d423 100644 --- a/src/onyxbuiltins.c +++ b/src/onyxbuiltins.c @@ -21,24 +21,24 @@ AstNumLit builtin_heap_start = { Ast_Kind_NumLit, Ast_Flag_Const, &builtin_heap_ 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() { diff --git a/src/onyxsymres.c b/src/onyxsymres.c index a4a855ae..cf9e0a3a 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -523,7 +523,18 @@ void onyx_resolve_symbols() { // NOTE: Add types to global scope BuiltinSymbol* bsym = (BuiltinSymbol *) &builtin_symbols[0]; while (bsym->sym != NULL) { - symbol_builtin_introduce(semstate.curr_scope, bsym->sym, bsym->node); + if (bsym->package == NULL) + symbol_builtin_introduce(semstate.curr_scope, bsym->sym, bsym->node); + else { + Package* p = program_info_package_lookup_or_create( + semstate.program, + bsym->package, + semstate.curr_scope, + semstate.node_allocator); + assert(p); + + symbol_builtin_introduce(p->scope, bsym->sym, bsym->node); + } bsym++; } -- 2.25.1