+ERROR: unknown-child-forms order ;
+M: c-field libclang>string
+ [
+ {
+ [ drop " { " ]
+ [ name>> " " ]
+ [ type>> " }" ]
+ } cleave
+ ] "" append-outputs-as ;
+
+M: c-struct libclang>string
+ [
+ {
+ [ drop "STRUCT: " ]
+ [ name>> "\n" ]
+ [
+ order>> child-forms get-global ?at [ unknown-child-forms ] unless
+ [ libclang>string ] map "\n" join " ;\n" append
+ ]
+ } cleave
+ ] "" append-outputs-as ;
+
+M: c-enum libclang>string
+ [
+ {
+ [ drop "ENUM: " ]
+ [ name>> "\n" ]
+ [
+ order>> child-forms get-global ?at [ unknown-child-forms ] unless
+ [ libclang>string ] map "\n" join " ;\n" append
+ ]
+ } cleave
+ ] "" append-outputs-as ;
+
+M: c-union libclang>string
+ [
+ {
+ [ drop "UNION-STRUCT: " ]
+ [ name>> ]
+ } cleave
+ ] "" append-outputs-as ;
+
+M: object libclang>string
+ class-of name>> "unknown object: " prepend ;
+
+: reset-c-defs ( -- )
+ 0 unnamed-counter set-global
+ 0 defs-counter set-global
+ H{ } clone c-defs set-global
+ H{ } clone c-defs-order set-global
+ V{ } clone c-forms set-global
+ H{ } clone child-forms set-global ;
+
+: set-definition ( named -- )
+ [ dup name>> c-defs get-global set-at ]
+ [ dup order>> c-defs-order get-global set-at ] bi ;