1 type inherited
= bool (* true if inherited *)
2 type keep_binding
= Unitary
(* need no info *)
3 | Nonunitary
(* need an env entry *) | Saved
(* need a witness *)
6 ConstVol
of const_vol
* typeC
8 | SignedT
of sign
* typeC
option
10 | FunctionPointer
of typeC
(* only return type *)
11 | Array
of typeC
(* drop size info *)
12 | EnumName
of bool (* true if a metaId *) * string
13 | StructUnionName
of structUnion
* bool (* true if type metavar *) * string
15 | MetaType
of (string * string) * keep_binding
* inherited
16 | Unknown
(* for metavariables of type expression *^* *)
18 and tagged_string
= string
20 and baseType
= VoidType
| CharType
| ShortType
| IntType
| DoubleType
21 | FloatType
| LongType
| LongLongType
| BoolType
23 and structUnion
= Struct
| Union
25 and sign
= Signed
| Unsigned
27 and const_vol
= Const
| Volatile
29 val type2c
: typeC
-> string
30 val typeC
: typeC
-> unit
32 val compatible
: typeC
-> typeC
option -> bool