! C type protocol
GENERIC: c-type ( name -- c-type ) foldable
- : void? ( c-type -- ? )
- void = ; inline
-GENERIC: resolve-pointer-type ( name -- c-type )
--
-<< \ void \ void* "pointer-c-type" set-word-prop >>
+PREDICATE: c-type-word < word
+ "c-type" word-prop ;
-M: word resolve-pointer-type
- dup "pointer-c-type" word-prop
- [ ] [ drop void* ] ?if ;
+TUPLE: pointer { to initial: void read-only } ;
+C: <pointer> pointer
-M: array resolve-pointer-type
- first resolve-pointer-type ;
+UNION: c-type-name
+ c-type-word pointer ;
: resolve-typedef ( name -- c-type )
dup void? [ no-c-type ] when