From b0e41c5980dac2c0fbb3ebb9e24533e759ebc4b5 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 10 Aug 2020 12:43:49 -0500 Subject: [PATCH] added memory reservation initial values --- docs/plan | 7 +++++ include/onyxastnodes.h | 2 +- include/onyxtypes.h | 1 + onyx | Bin 140328 -> 144464 bytes progs/stack_based.onyx | 7 +++-- src/onyxchecker.c | 28 ++++++++++++++++-- src/onyxparser.c | 33 +++++++++------------ src/onyxsymres.c | 19 ++++++++++-- src/onyxtypes.c | 5 ++++ src/onyxwasm.c | 65 +++++++++++++++++++++++++++++++++++------ 10 files changed, 130 insertions(+), 37 deletions(-) diff --git a/docs/plan b/docs/plan index 6ef779a7..838906d8 100644 --- a/docs/plan +++ b/docs/plan @@ -161,6 +161,13 @@ HOW: [ ] Array literals + [ ] Struct literals + + [ ] Top level variable initialization + - Works for numeric literals + + [ ] 'use' enums and packages at an arbitrary scope + [ ] Better checking for casts - Checking which things are allowed to cast to/from should be checked in the checker, not in the wasm generatation diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 6e9401f6..6d242e73 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -350,7 +350,7 @@ struct AstTypeAlias { AstType_base; AstType* to; }; // Top level nodes struct AstBinding { AstTyped_base; AstNode* node; }; -struct AstMemRes { AstTyped_base; u64 addr; }; // HACK: This has to be the same size as AstDereference +struct AstMemRes { AstTyped_base; u64 addr; AstTyped *initial_value; }; // HACK: This has to be the same size or bigger as AstDereference struct AstIncludeFile { AstNode_base; OnyxToken *filename; }; struct AstUsePackage { AstNode_base; diff --git a/include/onyxtypes.h b/include/onyxtypes.h index fb2fa7e9..7d17297c 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -125,6 +125,7 @@ b32 type_is_struct(Type* type); b32 type_is_bool(Type* type); b32 type_is_integer(Type* type); b32 type_is_numeric(Type* type); +b32 type_is_compound(Type* type); b32 type_results_in_void(Type* type); #endif // #ifndef ONYX_TYPES diff --git a/onyx b/onyx index bedfe214813a519434ac328dfe9a62dbed941910..144ca80f6ff59a5c1a8701aa17d71c0bb1957dc2 100755 GIT binary patch delta 48518 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 delta 47703 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⩔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 == NULL) @@ -1071,6 +1072,27 @@ CHECK(function_header, AstFunction* func) { return 0; } +CHECK(memres, AstMemRes* memres) { + fill_in_type((AstTyped *) memres); + + if (memres->initial_value != NULL) { + fill_in_type(memres->initial_value); + + Type* memres_type = memres->type; + if (!type_is_compound(memres_type)) memres_type = memres_type->Pointer.elem; + + if (!types_are_compatible(memres_type, memres->initial_value->type)) { + onyx_message_add(Msg_Type_Binop_Mismatch, + memres->token->pos, + type_get_name(memres_type), + type_get_name(memres->initial_value->type)); + return 1; + } + } + + return 0; +} + CHECK(node, AstNode* node) { switch (node->kind) { case Ast_Kind_Function: return check_function((AstFunction *) node); @@ -1119,6 +1141,10 @@ void onyx_type_check() { if (check_struct((AstStructType *) entity->type_alias)) return; break; + case Entity_Type_Memory_Reservation: + if (check_memres(entity->mem_res)) return; + break; + case Entity_Type_Enum: break; case Entity_Type_String_Literal: break; @@ -1129,8 +1155,6 @@ void onyx_type_check() { case Entity_Type_Use_Package: break; - case Entity_Type_Memory_Reservation: break; - default: DEBUG_HERE; break; } } diff --git a/src/onyxparser.c b/src/onyxparser.c index 8849e451..6cab7515 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -169,10 +169,6 @@ static AstTyped* parse_factor(OnyxParser* parser) { negate_node->operation = Unary_Op_Negate; negate_node->expr = factor; - if ((factor->flags & Ast_Flag_Comptime) != 0) { - negate_node->flags |= Ast_Flag_Comptime; - } - retval = (AstTyped *) negate_node; break; } @@ -183,10 +179,6 @@ static AstTyped* parse_factor(OnyxParser* parser) { not_node->token = expect_token(parser, '!'); not_node->expr = parse_factor(parser); - if ((not_node->expr->flags & Ast_Flag_Comptime) != 0) { - not_node->flags |= Ast_Flag_Comptime; - } - retval = (AstTyped *) not_node; break; } @@ -572,10 +564,6 @@ static AstTyped* parse_expression(OnyxParser* parser) { right = parse_factor(parser); bin_op->right = right; - - if ((left->flags & Ast_Flag_Comptime) != 0 && (right->flags & Ast_Flag_Comptime) != 0) { - bin_op->flags |= Ast_Flag_Comptime; - } } } @@ -1460,16 +1448,21 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { return (AstNode *) binding; } else { - if (parser->curr->type == '=') { - onyx_message_add(Msg_Type_Literal, - parser->curr->pos, - "assigning initial values to memory reservations isn't allowed yet."); - break; - } - AstMemRes* memres = make_node(AstMemRes, Ast_Kind_Memres); memres->token = symbol; - memres->type_node = parse_type(parser); + + if (parser->curr->type == '=') { + consume_token(parser); + memres->initial_value = parse_expression(parser); + + } else { + memres->type_node = parse_type(parser); + + if (parser->curr->type == '=') { + consume_token(parser); + memres->initial_value = parse_expression(parser); + } + } if (is_private) memres->flags |= Ast_Flag_Private_Package; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 116eb158..8a095b04 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -495,11 +495,26 @@ static void symres_enum(AstEnumType* enum_node) { static void symres_memres(AstMemRes** memres) { (*memres)->type_node = symres_type((*memres)->type_node); - if ((*memres)->type_node == NULL) return; + if ((*memres)->initial_value != NULL) { + symres_expression(&(*memres)->initial_value); + + if (((*memres)->initial_value->flags & Ast_Flag_Comptime) == 0) { + onyx_message_add(Msg_Type_Literal, + (*memres)->initial_value->token->pos, + "top level expressions must be compile time known"); + return; + } + + if ((*memres)->type_node == NULL) + (*memres)->type_node = (*memres)->initial_value->type_node; + + } else { + if ((*memres)->type_node == NULL) return; + } (*memres)->type = type_build_from_ast(semstate.allocator, (*memres)->type_node); - if ((*memres)->type->kind != Type_Kind_Array && (*memres)->type->kind != Type_Kind_Struct) { + if (!type_is_compound((*memres)->type)) { Type* ptr_type = type_make_pointer(semstate.allocator, (*memres)->type); (*memres)->type = ptr_type; diff --git a/src/onyxtypes.c b/src/onyxtypes.c index df03d677..b61e05fd 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -483,6 +483,11 @@ b32 type_is_numeric(Type* type) { return type->Basic.kind >= Basic_Kind_I8 && type->Basic.kind <= Basic_Kind_F64; } +b32 type_is_compound(Type* type) { + return type->kind == Type_Kind_Array + || type->kind == Type_Kind_Struct; +} + b32 type_results_in_void(Type* type) { return (type == NULL) || (type->kind == Type_Kind_Basic && type->Basic.kind == Basic_Kind_Void) diff --git a/src/onyxwasm.c b/src/onyxwasm.c index dc821569..665cd82f 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -1645,25 +1645,72 @@ static void compile_string_literal(OnyxWasmModule* mod, AstStrLit* strlit) { bh_arr_push(mod->data, datum); } +static void compile_raw_data(OnyxWasmModule* mod, ptr data, AstTyped* node) { + switch (node->kind) { + case Ast_Kind_NumLit: { + switch (node->type->Basic.kind) { + case Basic_Kind_Bool: + case Basic_Kind_I8: + case Basic_Kind_U8: + case Basic_Kind_I16: + case Basic_Kind_U16: + case Basic_Kind_I32: + case Basic_Kind_U32: + case Basic_Kind_Rawptr: + *((i32 *) data) = ((AstNumLit *) node)->value.i; + return; + + case Basic_Kind_I64: + case Basic_Kind_U64: + *((i64 *) data) = ((AstNumLit *) node)->value.l; + return; + + case Basic_Kind_F32: + *((f32 *) data) = ((AstNumLit *) node)->value.f; + return; + + case Basic_Kind_F64: + *((f64 *) data) = ((AstNumLit *) node)->value.d; + return; + + default: break; + } + + //fallthrough + } + default: onyx_message_add(Msg_Type_Literal, + node->token->pos, + "invalid data"); + } +} + static void compile_memory_reservation(OnyxWasmModule* mod, AstMemRes* memres) { - u64 alignment = type_alignment_of(memres->type); - u64 size = type_size_of(memres->type); + Type* effective_type = memres->type; + if (!type_is_compound(effective_type)) effective_type = effective_type->Pointer.elem; + + u64 alignment = type_alignment_of(effective_type); + u64 size = type_size_of(effective_type); u32 offset = mod->next_datum_offset; if (offset % alignment != 0) { offset += alignment - (offset % alignment); } - // WasmDatum datum = { - // .offset = offset, - // .length = size, - // .data = NULL - // }; + if (memres->initial_value != NULL) { + u8* data = bh_alloc(mod->allocator, size); + compile_raw_data(mod, data, memres->initial_value); + + WasmDatum datum = { + .offset = offset, + .length = size, + .data = data, + }; + + bh_arr_push(mod->data, datum); + } memres->addr = offset; mod->next_datum_offset = offset + size; - - // bh_arr_push(mod->data, datum); } static void compile_file_contents(OnyxWasmModule* mod, AstFileContents* fc) { -- 2.25.1