From ccc342f915aa284eefd2075c992b9c8519d16f03 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 29 Dec 2020 22:06:00 -0600 Subject: [PATCH] structs are much better now, as far as I can tell --- .vimspector.json | 2 +- docs/bugs | 4 ++-- include/onyxtypes.h | 3 +-- onyx | Bin 287128 -> 287128 bytes src/onyxsymres.c | 35 ++++++++++++--------------------- src/onyxtypes.c | 37 +++++++++++++++++++++++------------ tests/struct_robustness.onyx | 20 +++++-------------- 7 files changed, 45 insertions(+), 56 deletions(-) diff --git a/.vimspector.json b/.vimspector.json index d9aef1fd..57cf6c88 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -6,7 +6,7 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/onyx", - "args": ["--verbose", "progs/poly_solidify.onyx"], + "args": ["--verbose", "tests/struct_robustness.onyx"], "stopAtEntry": true, "cwd": "~/dev/c/onyx", "environment": [], diff --git a/docs/bugs b/docs/bugs index b5c6a35d..d3c3580b 100644 --- a/docs/bugs +++ b/docs/bugs @@ -55,7 +55,7 @@ List of known bugs: [X] Polymorphic structs do not recognize default values for members. -[ ] `use` on struct members does not work correctly if the type is a union. +[X] `use` on struct members does not work correctly if the type is a union. ``` BadUnion :: struct { use container : struct #union { @@ -67,7 +67,7 @@ List of known bugs: test :: proc () do print(sizeof BadUnion == 4); ``` -[ ] `use` on struct members breaks struct literals. +[X] `use` on struct members breaks struct literals. ``` Vec2 :: struct { x: i32; y: i32; } Entity :: struct { use pos: Vec2; } diff --git a/include/onyxtypes.h b/include/onyxtypes.h index 54251639..cec94fa5 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -69,8 +69,7 @@ typedef struct StructMember { char *name; struct AstTyped* initial_value; - - b32 member_was_used : 1; + b32 included_through_use : 1; } StructMember; #define TYPE_KINDS \ diff --git a/onyx b/onyx index 2722db43ed545bbccaeeb50a9f94c0cc7419695f..67bca43e39e01d6168eb40a3c802d75917fff9ca 100755 GIT binary patch delta 53215 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 AGynhq diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 2d0921c7..d368eb06 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -145,12 +145,6 @@ AstType* symres_type(AstType* type) { return type; } - - bh_arr_insertn(s_node->members, i, bh_arr_length(used->members)); - - fori (j, 0, bh_arr_length(used->members)) { - s_node->members[i + j + 1] = used->members[j]; - } } if (member->initial_value != NULL) { @@ -351,13 +345,14 @@ static void symres_struct_literal(AstStructLiteral* sl) { } token_toggle_end((*smem)->token); - if (sl->values[s.idx] != NULL) { - onyx_report_error((*smem)->token->pos, "Multiple values given for '%b'.", (*smem)->token->text, (*smem)->token->length); + if (s.included_through_use) { + onyx_report_error((*smem)->token->pos, "Cannot specify value for member '%b', whic was included through a 'use' statement.", s.name); return; } - if (s.member_was_used) { - (*smem)->flags |= Ast_Flag_Struct_Mem_Used; + if (sl->values[s.idx] != NULL) { + onyx_report_error((*smem)->token->pos, "Multiple values given for '%b'.", (*smem)->token->text, (*smem)->token->length); + return; } sl->values[s.idx] = (*smem)->initial_value; @@ -759,29 +754,23 @@ void symres_function_header(AstFunction* func) { if (param->local->flags & Ast_Flag_Param_Use) { if (type_is_struct(param->local->type)) { - AstStructType* st; + Type* st; if (param->local->type->kind == Type_Kind_Struct) { - st = (AstStructType *) param->local->type_node; + st = param->local->type; } else { - st = (AstStructType *) ((AstPointerType *) param->local->type_node)->elem; + st = param->local->type->Pointer.elem; } - if (st->kind == Ast_Kind_Poly_Call_Type) { - st = (AstStructType *) (((AstPolyStructType *) (((AstPolyCallType *) st)->callee))->base_struct); - } - - bh_arr_each(AstStructMember *, mem, st->members) { + bh_table_each_start(StructMember, st->Struct.members); AstFieldAccess* fa = onyx_ast_node_new(semstate.node_allocator, sizeof(AstFieldAccess), Ast_Kind_Field_Access); - fa->token = (*mem)->token; fa->expr = (AstTyped *) param->local; + fa->field = value.name; - token_toggle_end((*mem)->token); symbol_raw_introduce(semstate.curr_scope, - (*mem)->token->text, + value.name, param->local->token->pos, (AstNode *) fa); - token_toggle_end((*mem)->token); - } + bh_table_each_end; } else { onyx_report_error(param->local->token->pos, "can only 'use' structures or pointers to structures."); diff --git a/src/onyxtypes.c b/src/onyxtypes.c index 31ffcc04..f8f4aad0 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -367,32 +367,43 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { .type = (*member)->type, .idx = idx, .name = bh_strdup(alloc, (*member)->token->text), - .member_was_used = ((*member)->flags & Ast_Flag_Struct_Mem_Used) != 0, .initial_value = (*member)->initial_value, + .included_through_use = 0, }; bh_table_put(StructMember, s_type->Struct.members, (*member)->token->text, smem); token_toggle_end((*member)->token); + if (((*member)->flags & Ast_Flag_Struct_Mem_Used) != 0) { + assert((*member)->type->kind == Type_Kind_Struct); + + bh_arr_each(StructMember*, psmem, (*member)->type->Struct.memarr) { + StructMember new_smem = { + .offset = offset + (*psmem)->offset, + .type = (*psmem)->type, + .idx = -1, // Dummy value because I don't think this is needed. + .name = (*psmem)->name, + .initial_value = (*psmem)->initial_value, + .included_through_use = 1, + }; + + bh_table_put(StructMember, s_type->Struct.members, (*psmem)->name, new_smem); + } + } + u32 type_size = type_size_of((*member)->type); - if (((*member)->flags & Ast_Flag_Struct_Mem_Used) == 0) { - if (!is_union) offset += type_size; - if (!is_union) size += type_size; - else size = bh_max(size, type_size); - idx++; - } + if (!is_union) offset += type_size; + if (!is_union) size += type_size; + else size = bh_max(size, type_size); + + idx++; } // NOTE: Need to do a second pass because the references to the // elements of the table may change if the internal arrays of the // table need to be resized. - s_type->Struct.mem_count = 0; bh_arr_each(AstStructMember *, member, s_node->members) { - if ((*member)->flags & Ast_Flag_Struct_Mem_Used) continue; - - s_type->Struct.mem_count++; - token_toggle_end((*member)->token); bh_arr_push(s_type->Struct.memarr, &bh_table_get(StructMember, s_type->Struct.members, (*member)->token->text)); token_toggle_end((*member)->token); @@ -649,8 +660,8 @@ u32 type_get_alignment_log2(Type* type) { b32 type_lookup_member(Type* type, char* member, StructMember* smem) { if (type->kind == Type_Kind_Pointer) type = type->Pointer.elem; - smem->member_was_used = 0; smem->initial_value = NULL; + smem->included_through_use = 0; switch (type->kind) { case Type_Kind_Struct: { diff --git a/tests/struct_robustness.onyx b/tests/struct_robustness.onyx index 1391139e..503d9b3e 100644 --- a/tests/struct_robustness.onyx +++ b/tests/struct_robustness.onyx @@ -78,27 +78,17 @@ main :: proc (args: [] cstr) { y : f32; } - // This does not work, but it should. - // swu := StructWithUse.{ 1234, UsedMember.{ 1, 2 }, 5678 }; + swu := StructWithUse.{ 1234, UsedMember.{ 1, 2 }, 5678 }; - // Neither does this, but it also should. - // swu := StructWithUse.{ - // first_member = 1234, - // used_member = UsedMember.{ 1, 2 }, - // last_member = 5678, - // }; - - // This does, when all non-used members are listed out. - swu := StructWithUse.{ 1234, 1, 2, 5678 }; - - // This also does. swu2 := StructWithUse.{ first_member = 1234, - x = 1, - y = 2, + used_member = UsedMember.{ 1, 2 }, last_member = 5678, }; + // This will not work. `use`d members cannot be set directly. + swu3 := StructWithUse.{ 1234, 1, 2, 5678 }; + print_swu :: proc (use swu: StructWithUse) { printf("StructWithUse(%i, (%f, %f), %i)\n", first_member, x, y, last_member); -- 2.25.1