mescc: Tinycc support: Support bit-fields.
[mes.git] / module / language / c99 / info.scm
index 000b364e72c8f57b96e00a439c873dfbd4b9ff13..f1a432686d634bbfc375f58060df654fef7a26c2 100644 (file)
             pointer:type
             pointer:rank
 
             pointer:type
             pointer:rank
 
+            <bit-field>
+            make-bit-field
+            bit-field?
+            bit-field:type
+            bit-field:bit
+            bit-field:bits
+
             <var>
             var:name
             var:type
             <var>
             var:name
             var:type
   (type pointer:type)
   (rank pointer:rank))
 
   (type pointer:type)
   (rank pointer:rank))
 
+(define-immutable-record-type <bit-field>
+  (make-bit-field type bit bits)
+  bit-field?
+  (type bit-field:type)
+  (bit bit-field:bit)
+  (bits bit-field:bits))
+
 (define-immutable-record-type <var>
   (make-var name type function id value)
   var?
 (define-immutable-record-type <var>
   (make-var name type function id value)
   var?
 
 (define (->type o)
   (cond ((type? o) o)
 
 (define (->type o)
   (cond ((type? o) o)
+        ((bit-field? o) o)
         ((pointer? o) (pointer:type o))
         ((c-array? o) (c-array:type o))
         ((and (pair? o) (eq? (car o) 'tag)) o)
         ((pointer? o) (pointer:type o))
         ((c-array? o) (c-array:type o))
         ((and (pair? o) (eq? (car o) 'tag)) o)
         ((c-array? o) (1+ ((compose ->rank c-array:type) o)))
         ((local? o) ((compose ->rank local:type) o))
         ((global? o) ((compose ->rank global:type) o))
         ((c-array? o) (1+ ((compose ->rank c-array:type) o)))
         ((local? o) ((compose ->rank local:type) o))
         ((global? o) ((compose ->rank global:type) o))
+        ((bit-field? o) 0)
         ;; FIXME
         (#t
          (format (current-error-port) "->rank: not a type: ~s\n" o)
         ;; FIXME
         (#t
          (format (current-error-port) "->rank: not a type: ~s\n" o)