mescc: Tinycc support: Handle short struct initializer.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 22 May 2018 16:24:32 +0000 (18:24 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 22 May 2018 16:24:32 +0000 (18:24 +0200)
* module/language/c99/compiler.mes (array-init-element->data): Handle
  short struct initializer.

module/language/c99/compiler.mes

index 3c146d590eec5fe8e2013ed6ff6a05885b1d9b7b..26d37eb6bbc2da3d797dc33b9955b9e9d7835a3e 100644 (file)
     ((initzer (p-expr (fixed ,fixed)))
      (int->bv type (expr->number info fixed)))
     ((initzer (initzer-list . ,inits))
-     (if (structured-type? type)
-         (map (cut init->data <> <> info) (map cdr (struct->init-fields type)) inits)
-         (begin
-           (stderr "array-init-element->data: oops:~s\n" o)
-           (stderr "type:~s\n" type)
-           (error "array-init-element->data: not supported: " o))))
+      (if (structured-type? type)
+          (let* ((fields (map cdr (struct->init-fields type)))
+                 (missing (max 0 (- (length fields) (length inits))))
+                 (inits (append inits
+                                (map (const '(fixed "0")) (iota missing)))))
+            (map (cut init->data <> <> info) fields inits))
+          (begin
+            (stderr "array-init-element->data: oops:~s\n" o)
+            (stderr "type:~s\n" type)
+            (error "array-init-element->data: not supported: " o))))
     (_ (init->data type o info))
     (_ (error "array-init-element->data: not supported: " o))))