fixed bug with field accesses
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 9 Dec 2020 00:02:20 +0000 (18:02 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 9 Dec 2020 00:02:20 +0000 (18:02 -0600)
onyx
src/onyxchecker.c

diff --git a/onyx b/onyx
index 203fd0b68d54cdedcc77f84ea9a66ff85238e1d9..d28cdf91964c1a1cea7eebe449c576f2ff50ef92 100755 (executable)
Binary files a/onyx and b/onyx differ
index 683524fa43ea4cad32003d5e108012d67de6a621..0226e5a7504ab5e0136ca77259fd1ccaadcde824 100644 (file)
@@ -976,6 +976,7 @@ b32 check_array_access(AstArrayAccess* aa) {
         fa->offset = smem.offset;
         fa->idx = smem.idx;
         fa->expr = aa->addr;
+        fa->field = "data";
 
         aa->addr = (AstTyped *) fa;
         aa->type = aa->addr->type->Pointer.elem;
@@ -1005,9 +1006,13 @@ b32 check_field_access(AstFieldAccess** pfield) {
     }
 
     StructMember smem;
-    if (field->token != NULL) {
+    if (field->token != NULL && field->field == NULL) {
+        token_toggle_end(field->token);
+        // CLEANUP: Duplicating the string here isn't the best for effiency,
+        // but it fixes a lot of bugs, so here we are.
+        //                                      - brendanfh  2020/12/08
+        field->field = bh_strdup(semstate.allocator, field->token->text);
         token_toggle_end(field->token);
-        field->field = field->token->text;
     }
 
     if (!type_lookup_member(field->expr->type, field->field, &smem)) {
@@ -1016,7 +1021,6 @@ b32 check_field_access(AstFieldAccess** pfield) {
             field->field,
             type_get_name(field->expr->type));
 
-        if (field->token != NULL) token_toggle_end(field->token);
         return 1;
     }
 
@@ -1024,7 +1028,6 @@ b32 check_field_access(AstFieldAccess** pfield) {
     field->idx = smem.idx;
     field->type = smem.type;
 
-    if (field->token != NULL) token_toggle_end(field->token);
     return 0;
 }