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.
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 \
// 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;
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);