mescc: Support struct definition with variable declaration.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 6 May 2017 07:27:28 +0000 (09:27 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 6 May 2017 07:27:28 +0000 (09:27 +0200)
* module/language/c99/compiler.mes (ast->info): Support `struct foo {} bar;'.

module/language/c99/compiler.mes

index 260432716909112a0e477fe7ea33f5acc232db67..04c55914b5113e192bc88965ea11a7bd91312aea 100644 (file)
          (let ((type (struct->type (list "struct" name) (map struct-field fields))))
            (clone info #:types (append (.types info) (list type)))))
 
+        ;; struct foo {} bar;
+        ((decl (decl-spec-list (type-spec (struct-def (ident ,type) (field-list . ,fields))))
+               (init-declr-list (init-declr (ident ,name))))
+         (let ((info ((ast->info info) `(decl (decl-spec-list (type-spec (struct-def (ident ,type) (field-list . ,fields))))))))
+           ((ast->info info)
+            `(decl (decl-spec-list (type-spec (struct-ref (ident ,type)))) (init-declr-list (init-declr (ident ,name)))))))
+
         ;; char *p = &bla;
         ((decl (decl-spec-list (type-spec (fixed-type ,type))) (init-declr-list (init-declr (ptr-declr (pointer) (ident ,name)) (initzer (ref-to (p-expr (ident ,value)))))))
          (let ((type (decl->type type)))