From 1f397ebde4098cd06aa2de4bab9643d96bf719d9 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 19 Jul 2020 19:39:56 -0500 Subject: [PATCH] Added '__heap_start' builtin; more cases for casting --- include/onyxastnodes.h | 10 ++++++ onyx | Bin 265528 -> 274784 bytes progs/arrays.onyx | 28 +++++---------- progs/print_funcs.onyx | 24 +++---------- src/onyxlex.c | 3 +- src/onyxparser.c | 14 -------- src/onyxsymres.c | 60 ++++++++++++++++++++++--------- src/onyxwasm.c | 80 +++++++++++++++++++++++++++-------------- 8 files changed, 122 insertions(+), 97 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 25791afb..c2fc7c67 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -346,6 +346,16 @@ extern AstBasicType basic_type_f32; extern AstBasicType basic_type_f64; extern AstBasicType basic_type_rawptr; +extern AstNumLit builtin_heap_start; + +typedef struct BuiltinSymbol { + char* sym; + AstNode* node; +} BuiltinSymbol; + +extern const BuiltinSymbol builtin_symbols[]; + + // NOTE: Useful inlined functions static inline b32 is_lval(AstNode* node) { diff --git a/onyx b/onyx index 6bf00b5ab2f28ff59e7bd418de71621604a85ec6..03babad22da9c27cb3fd3ccf2e1e3a45c95bc39e 100755 GIT binary patch delta 98032 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 delta 95660 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 { len++; diff --git a/src/onyxparser.c b/src/onyxparser.c index 097af9cb..a630e36b 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -8,20 +8,6 @@ static AstNode error_node = { Ast_Kind_Error, 0, NULL, NULL }; -AstBasicType basic_type_void = { { Ast_Kind_Basic_Type, 0, "void" }, &basic_types[Basic_Kind_Void] }; -AstBasicType basic_type_bool = { { Ast_Kind_Basic_Type, 0, "bool" }, &basic_types[Basic_Kind_Bool] }; -AstBasicType basic_type_i8 = { { Ast_Kind_Basic_Type, 0, "i8" }, &basic_types[Basic_Kind_I8] }; -AstBasicType basic_type_u8 = { { Ast_Kind_Basic_Type, 0, "u8" }, &basic_types[Basic_Kind_U8] }; -AstBasicType basic_type_i16 = { { Ast_Kind_Basic_Type, 0, "i16" }, &basic_types[Basic_Kind_I16] }; -AstBasicType basic_type_u16 = { { Ast_Kind_Basic_Type, 0, "u16" }, &basic_types[Basic_Kind_U16] }; -AstBasicType basic_type_i32 = { { Ast_Kind_Basic_Type, 0, "i32" }, &basic_types[Basic_Kind_I32] }; -AstBasicType basic_type_u32 = { { Ast_Kind_Basic_Type, 0, "u32" }, &basic_types[Basic_Kind_U32] }; -AstBasicType basic_type_i64 = { { Ast_Kind_Basic_Type, 0, "i64" }, &basic_types[Basic_Kind_I64] }; -AstBasicType basic_type_u64 = { { Ast_Kind_Basic_Type, 0, "u64" }, &basic_types[Basic_Kind_U64] }; -AstBasicType basic_type_f32 = { { Ast_Kind_Basic_Type, 0, "f32" }, &basic_types[Basic_Kind_F32] }; -AstBasicType basic_type_f64 = { { Ast_Kind_Basic_Type, 0, "f64" }, &basic_types[Basic_Kind_F64] }; -AstBasicType basic_type_rawptr = { { Ast_Kind_Basic_Type, 0, "rawptr" }, &basic_types[Basic_Kind_Rawptr] }; - // NOTE: Forward declarations static void consume_token(OnyxParser* parser); static void unconsume_token(OnyxParser* parser); diff --git a/src/onyxsymres.c b/src/onyxsymres.c index f504daa3..ca3c274f 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -1,9 +1,45 @@ #define BH_DEBUG #include "onyxsempass.h" +AstBasicType basic_type_void = { { Ast_Kind_Basic_Type, 0, "void" }, &basic_types[Basic_Kind_Void] }; +AstBasicType basic_type_bool = { { Ast_Kind_Basic_Type, 0, "bool" }, &basic_types[Basic_Kind_Bool] }; +AstBasicType basic_type_i8 = { { Ast_Kind_Basic_Type, 0, "i8" }, &basic_types[Basic_Kind_I8] }; +AstBasicType basic_type_u8 = { { Ast_Kind_Basic_Type, 0, "u8" }, &basic_types[Basic_Kind_U8] }; +AstBasicType basic_type_i16 = { { Ast_Kind_Basic_Type, 0, "i16" }, &basic_types[Basic_Kind_I16] }; +AstBasicType basic_type_u16 = { { Ast_Kind_Basic_Type, 0, "u16" }, &basic_types[Basic_Kind_U16] }; +AstBasicType basic_type_i32 = { { Ast_Kind_Basic_Type, 0, "i32" }, &basic_types[Basic_Kind_I32] }; +AstBasicType basic_type_u32 = { { Ast_Kind_Basic_Type, 0, "u32" }, &basic_types[Basic_Kind_U32] }; +AstBasicType basic_type_i64 = { { Ast_Kind_Basic_Type, 0, "i64" }, &basic_types[Basic_Kind_I64] }; +AstBasicType basic_type_u64 = { { Ast_Kind_Basic_Type, 0, "u64" }, &basic_types[Basic_Kind_U64] }; +AstBasicType basic_type_f32 = { { Ast_Kind_Basic_Type, 0, "f32" }, &basic_types[Basic_Kind_F32] }; +AstBasicType basic_type_f64 = { { Ast_Kind_Basic_Type, 0, "f64" }, &basic_types[Basic_Kind_F64] }; +AstBasicType basic_type_rawptr = { { Ast_Kind_Basic_Type, 0, "rawptr" }, &basic_types[Basic_Kind_Rawptr] }; + +AstNumLit builtin_heap_start = { Ast_Kind_NumLit, 0, NULL, NULL, (AstType *) &basic_type_rawptr, NULL, 0 }; + +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 }, + + { "__heap_start", (AstNode *) &builtin_heap_start }, + + { NULL, NULL }, +}; + static b32 symbol_introduce(OnyxToken* tkn, AstNode* symbol); +static void symbol_builtin_introduce(char* sym, AstNode *node); static AstNode* symbol_resolve(OnyxToken* tkn); -static void symbol_basic_type_introduce(AstBasicType* basic_type); static void scope_enter(Scope* new_scope); static void scope_leave(); @@ -42,8 +78,8 @@ static b32 symbol_introduce(OnyxToken* tkn, AstNode* symbol) { return 1; } -static void symbol_basic_type_introduce(AstBasicType* basic_type) { - bh_table_put(AstNode *, semstate.curr_scope->symbols, basic_type->name, (AstNode *) basic_type); +static void symbol_builtin_introduce(char* sym, AstNode *node) { + bh_table_put(AstNode *, semstate.curr_scope->symbols, sym, node); } static AstNode* symbol_resolve(OnyxToken* tkn) { @@ -316,19 +352,11 @@ void onyx_resolve_symbols(ProgramInfo* program) { scope_enter(semstate.global_scope); // NOTE: Add types to global scope - symbol_basic_type_introduce(&basic_type_void); - symbol_basic_type_introduce(&basic_type_bool); - symbol_basic_type_introduce(&basic_type_i8); - symbol_basic_type_introduce(&basic_type_u8); - symbol_basic_type_introduce(&basic_type_i16); - symbol_basic_type_introduce(&basic_type_u16); - symbol_basic_type_introduce(&basic_type_i32); - symbol_basic_type_introduce(&basic_type_u32); - symbol_basic_type_introduce(&basic_type_i64); - symbol_basic_type_introduce(&basic_type_u64); - symbol_basic_type_introduce(&basic_type_f32); - symbol_basic_type_introduce(&basic_type_f64); - symbol_basic_type_introduce(&basic_type_rawptr); + BuiltinSymbol* bsym = (BuiltinSymbol *) &builtin_symbols[0]; + while (bsym->sym != NULL) { + symbol_builtin_introduce(bsym->sym, bsym->node); + bsym++; + } bh_arr_each(AstBinding *, binding, program->bindings) if (!symbol_introduce((*binding)->token, (*binding)->node)) return; diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 972db89f..7e949cc3 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -212,6 +212,7 @@ static WasmType onyx_type_to_wasm_type(Type* type) { if (basic->size <= 4) return WASM_TYPE_INT32; if (basic->size == 8) return WASM_TYPE_INT64; } + if (basic->flags & Basic_Flag_Pointer) return WASM_TYPE_INT32; if (basic->flags & Basic_Flag_Float) { if (basic->size <= 4) return WASM_TYPE_FLOAT32; if (basic->size == 8) return WASM_TYPE_FLOAT64; @@ -848,14 +849,17 @@ COMPILE_FUNC(expression, AstTyped* expr) { *pcode = code; } -static const WasmInstructionType cast_map[][6] = { - // I32 U32 I64 U64 F32 F64 - /* I32 */ { WI_NOP, WI_NOP, WI_I64_FROM_I32_S, WI_I64_FROM_I32_S, WI_F32_FROM_I32_S, WI_F64_FROM_I32_S }, - /* U32 */ { WI_NOP, WI_NOP, WI_I64_FROM_I32_U, WI_I64_FROM_I32_U, WI_F32_FROM_I32_U, WI_F64_FROM_I32_U }, - /* I64 */ { WI_I32_FROM_I64, WI_I32_FROM_I64, WI_NOP, WI_NOP, WI_F32_FROM_I64_S, WI_F64_FROM_I64_S }, - /* U64 */ { WI_I32_FROM_I64, WI_I32_FROM_I64, WI_NOP, WI_NOP, WI_F32_FROM_I64_U, WI_F64_FROM_I64_U }, - /* F32 */ { WI_I32_FROM_F32_S, WI_I32_FROM_F32_U, WI_I64_FROM_F32_S, WI_I64_FROM_F32_U, WI_NOP, WI_F64_FROM_F32 }, - /* F64 */ { WI_I32_FROM_F64_S, WI_I32_FROM_F64_U, WI_I64_FROM_F64_S, WI_I64_FROM_F64_U, WI_F32_FROM_F64, WI_NOP, }, +static const WasmInstructionType cast_map[][9] = { + // I8 I16 I32 U32 I64 U64 F32 F64 PTR + /* I8 */ { WI_NOP, WI_I32_EXTEND_8_S, WI_I32_EXTEND_8_S, WI_NOP, WI_I64_FROM_I32_S, WI_I64_FROM_I32_S, WI_UNREACHABLE, WI_UNREACHABLE, WI_UNREACHABLE }, + /* I16 */ { WI_NOP, WI_NOP, WI_I32_EXTEND_16_S, WI_NOP, WI_I64_FROM_I32_U, WI_I64_FROM_I32_U, WI_F32_FROM_I32_U, WI_F64_FROM_I32_U, WI_UNREACHABLE }, + /* I32 */ { WI_NOP, WI_NOP, WI_NOP, WI_NOP, WI_I64_FROM_I32_S, WI_I64_FROM_I32_S, WI_F32_FROM_I32_S, WI_F64_FROM_I32_S, WI_NOP }, + /* U32 */ { WI_NOP, WI_NOP, WI_NOP, WI_NOP, WI_I64_FROM_I32_U, WI_I64_FROM_I32_U, WI_F32_FROM_I32_U, WI_F64_FROM_I32_U, WI_NOP }, + /* I64 */ { WI_NOP, WI_NOP, WI_I32_FROM_I64, WI_I32_FROM_I64, WI_NOP, WI_NOP, WI_F32_FROM_I64_S, WI_F64_FROM_I64_S, WI_I32_FROM_I64 }, + /* U64 */ { WI_NOP, WI_NOP, WI_I32_FROM_I64, WI_I32_FROM_I64, WI_NOP, WI_NOP, WI_F32_FROM_I64_U, WI_F64_FROM_I64_U, WI_I32_FROM_I64 }, + /* F32 */ { WI_UNREACHABLE, WI_UNREACHABLE, WI_I32_FROM_F32_S, WI_I32_FROM_F32_U, WI_I64_FROM_F32_S, WI_I64_FROM_F32_U, WI_NOP, WI_F64_FROM_F32, WI_UNREACHABLE }, + /* F64 */ { WI_UNREACHABLE, WI_UNREACHABLE, WI_I32_FROM_F64_S, WI_I32_FROM_F64_U, WI_I64_FROM_F64_S, WI_I64_FROM_F64_U, WI_F32_FROM_F64, WI_NOP, WI_UNREACHABLE }, + /* PTR */ { WI_UNREACHABLE, WI_UNREACHABLE, WI_NOP, WI_NOP, WI_I64_FROM_I32_U, WI_I64_FROM_I32_U, WI_UNREACHABLE, WI_UNREACHABLE, WI_NOP }, }; COMPILE_FUNC(cast, AstUnaryOp* cast) { @@ -866,36 +870,57 @@ COMPILE_FUNC(cast, AstUnaryOp* cast) { Type* from = cast->expr->type; Type* to = cast->type; - i32 fromidx = 0, toidx = 0; + i32 fromidx = -1, toidx = -1; if (from->Basic.flags & Basic_Flag_Integer) { b32 unsign = (from->Basic.flags & Basic_Flag_Unsigned) != 0; - if (from->Basic.size == 4 && !unsign) fromidx = 0; - else if (from->Basic.size == 4 && unsign) fromidx = 1; - else if (from->Basic.size == 8 && !unsign) fromidx = 2; - else if (from->Basic.size == 8 && unsign) fromidx = 3; + if (from->Basic.size == 1 && !unsign) fromidx = 0; + else if (from->Basic.size == 1 && unsign) fromidx = -1; + else if (from->Basic.size == 2 && !unsign) fromidx = 1; + else if (from->Basic.size == 2 && unsign) fromidx = -1; + else if (from->Basic.size == 4 && !unsign) fromidx = 2; + else if (from->Basic.size == 4 && unsign) fromidx = 3; + else if (from->Basic.size == 8 && !unsign) fromidx = 4; + else if (from->Basic.size == 8 && unsign) fromidx = 5; } else if (from->Basic.flags & Basic_Flag_Float) { - if (from->Basic.size == 4) fromidx = 4; - else if (from->Basic.size == 8) fromidx = 5; + if (from->Basic.size == 4) fromidx = 6; + else if (from->Basic.size == 8) fromidx = 7; + } + else if (from->Basic.flags & Basic_Flag_Pointer) { + fromidx = 8; } if (to->Basic.flags & Basic_Flag_Integer) { b32 unsign = (to->Basic.flags & Basic_Flag_Unsigned) != 0; - if (to->Basic.size == 4 && !unsign) toidx = 0; - else if (to->Basic.size == 4 && unsign) toidx = 1; - else if (to->Basic.size == 8 && !unsign) toidx = 2; - else if (to->Basic.size == 8 && unsign) toidx = 3; + if (to->Basic.size == 1 && !unsign) toidx = 0; + else if (to->Basic.size == 1 && unsign) toidx = -1; + else if (to->Basic.size == 2 && !unsign) toidx = 1; + else if (to->Basic.size == 2 && unsign) toidx = -1; + else if (to->Basic.size == 4 && !unsign) toidx = 2; + else if (to->Basic.size == 4 && unsign) toidx = 3; + else if (to->Basic.size == 8 && !unsign) toidx = 4; + else if (to->Basic.size == 8 && unsign) toidx = 5; } else if (to->Basic.flags & Basic_Flag_Float) { - if (to->Basic.size == 4) toidx = 4; - else if (to->Basic.size == 8) toidx = 5; + if (to->Basic.size == 4) toidx = 6; + else if (to->Basic.size == 8) toidx = 7; + } + else if (to->Basic.flags & Basic_Flag_Pointer) { + toidx = 8; } - WasmInstructionType cast_op = cast_map[fromidx][toidx]; - if (cast_op != WI_NOP) { - WI(cast_op); + if (fromidx != -1 && toidx != -1) { + WasmInstructionType cast_op = cast_map[fromidx][toidx]; + if (cast_op == WI_UNREACHABLE) { + onyx_message_add(Msg_Type_Literal, + cast->token->pos, + "bad cast"); + } + else if (cast_op != WI_NOP) { + WI(cast_op); + } } *pcode = code; @@ -1216,8 +1241,11 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, ProgramInfo* program) { } } - - + // NOTE: Round up to the nearest multiple of 16 + builtin_heap_start.value.i = + (module->next_datum_offset & 15) + ? ((module->next_datum_offset >> 4) + 1) << 4 + : module->next_datum_offset; // NOTE: Then, compile everything bh_arr_each(Entity, entity, program->entities) { -- 2.25.1