From: Brendan Hansen Date: Fri, 18 Sep 2020 03:18:36 +0000 (-0500) Subject: fixed #24; ready for v0.0.3 X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=f4ad0b037e0c4ef27c1de47672327c2c420fed4f;p=onyx.git fixed #24; ready for v0.0.3 --- diff --git a/CHANGELOG b/CHANGELOG index ca2b2107..8567f3d0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -19,5 +19,6 @@ Changes: Bug fixes: * Fixed error message index for struct literal member type mismatch. +* Added struct member name in struct literal member type mismatch. * Fixed freeing non-allocated memory when generating documentation. * Fixed alignment issue with struct members. diff --git a/include/onyxtypes.h b/include/onyxtypes.h index 4be207ea..b6ff8a27 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -59,6 +59,12 @@ typedef struct Type Type; typedef struct StructMember { u32 offset, idx; Type *type; + + // NOTE: Since the name is stored here, it may not be necessary to, + // store a hash table of struct members. There realistically will not + // be many struct members, and iterating through an array would be + // easier and less costly. - brendanfh 2020/09/17 + char *name; } StructMember; #define TYPE_KINDS \ diff --git a/onyx b/onyx index 451f3906..f722c77d 100755 Binary files a/onyx and b/onyx differ diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 64c61b93..0b3991b8 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -799,8 +799,9 @@ b32 check_struct_literal(AstStructLiteral* sl) { // since those names may not be in the correct order. - brendanfh 2020/09/12 if (!types_are_compatible(formal, (*actual)->type)) { onyx_report_error(sl->token->pos, - "Mismatched types for %d%s member, expected '%s', got '%s'.", + "Mismatched types for %d%s member named '%s', expected '%s', got '%s'.", i + 1, bh_num_suffix(i + 1), + smem.name, type_get_name(formal), type_get_name((*actual)->type)); return 1; diff --git a/src/onyxtypes.c b/src/onyxtypes.c index 986bc4a8..0569314d 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -341,13 +341,14 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { offset += mem_alignment - (offset % mem_alignment); } + token_toggle_end((*member)->token); StructMember smem = { .offset = offset, .type = (*member)->type, .idx = idx, + .name = bh_strdup(alloc, (*member)->token->text), }; - token_toggle_end((*member)->token); bh_table_put(StructMember, s_type->Struct.members, (*member)->token->text, smem); token_toggle_end((*member)->token);