fixed #24; ready for v0.0.3
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 18 Sep 2020 03:18:36 +0000 (22:18 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 18 Sep 2020 03:18:36 +0000 (22:18 -0500)
CHANGELOG
include/onyxtypes.h
onyx
src/onyxchecker.c
src/onyxtypes.c

index ca2b210745cf0c78ddb9ab3881453aa17d1cc5ea..8567f3d07c1c90c70658a61c8d4b2c5623d48de4 100644 (file)
--- 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.
index 4be207ea6af80d99c2a3551076c5289afab2cf92..b6ff8a27b20e886468970c5134cacbe28a34abf0 100644 (file)
@@ -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 451f3906e178a4018d68bb3413fc73df7072e7b2..f722c77d53b61302b198b899800ee610197177dd 100755 (executable)
Binary files a/onyx and b/onyx differ
index 64c61b93deb52aadb17d0bdf4ccd4ae63dc190e0..0b3991b8f7afcb2f3e4419023e4a55ae547c999f 100644 (file)
@@ -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;
index 986bc4a868621d9c658a2e69bc94309e8a874053..0569314d1dad8372c4729b9a693ed669bd29f0c4 100644 (file)
@@ -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);