mescc: Tinycc support: foo.bar[baz], foo->bar[baz] for typedef'd struct bar.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 5 Aug 2017 10:39:36 +0000 (12:39 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 5 Aug 2017 10:39:36 +0000 (12:39 +0200)
* module/language/c99/compiler.mes (expr->accu): foo.bar[baz],
  foo->bar[baz] for typedef'd struct bar.
* scaffold/tests/7c-dynarray.c: Test it.

module/language/c99/compiler.mes
scaffold/tests/7c-dynarray.c

index a5ce8b581643683e2448e359c8a3a5d2267c85bd..73a94488ba50f467cd3a65facf155a2dfd7eb679 100644 (file)
          (let* ((info ((expr->accu* info) o))
                 (type0 (ident->type info struct0))
                 (type1 (field-type info type0 field0))
-                (struct? (and (pair? type1) (equal? (car type1) "tag")))
+                (struct? (memq (type:type (ast-type->type info type0)) '(struct union)))
                 (ptr (field-pointer info type0 field0))
                 (size (ast-type->size info type1)))
            (if (= ptr -3) info
          (let* ((info ((expr->accu* info) o))
                 (type0 (ident->type info struct0))
                 (type1 (field-type info type0 field0))
-                (struct? (and (pair? type1) (equal? (car type1) "tag")))
+                (struct? (memq (type:type (ast-type->type info type0)) '(struct union)))
                 (ptr (field-pointer info type0 field0))
                 (size (ast-type->size info type1)))
            (append-text info (wrap-as (append (if (and (= ptr -2) struct?) (i386:mem->accu) '())
index 71fe72a46a2c0253239a5c68d08ced82d8ec17da..b11196aa99be8f8b288d90bce12f412f8e7b4219 100644 (file)
@@ -46,14 +46,16 @@ add (void *ptab, int *nb_ptr, void *data)
     *nb_ptr = nb;
 }
 
-struct file {
+typedef struct file {
   char name[4];
-};
+} file_struct;
 
 struct state {
+  int bla;
   char **paths;
   int path_count;
   struct file **files;
+  //file_struct **files;
   int file_count;
 };