| include "spec/spec.td" | 
 |  | 
 | class MacroDef<string name> { | 
 |   string Name = name; | 
 |   string Defn = ""; | 
 | } | 
 |  | 
 | class SimpleMacroDef<string name, string value> : MacroDef<name> { | 
 |   let Defn = !strconcat("#define ", name, " ", value); | 
 | } | 
 |  | 
 | class MacroDefineIfNot<string name, string value> : MacroDef<name> { | 
 |   let Defn = !strconcat("#ifndef ", name, "\n", | 
 |                         "#define " , name, " ", value, "\n", | 
 |                         "#endif // ", name); | 
 | } | 
 |  | 
 | class PublicAPI<string name> { | 
 |   string HeaderName = name; | 
 |   list<MacroDef> Macros = []; | 
 |   list<string> Types = []; | 
 |   list<string> Enumerations = []; | 
 |   list<string> Structs = []; | 
 |   list<string> Functions = []; | 
 |   list<string> Objects = []; | 
 | } |