package webidl; typedef Data = Array; typedef Position = { var file : String; var line : Int; var pos : Int; } typedef Definition = { var pos : Position; var kind : DefinitionKind; } enum DefinitionKind { DInterface( name : String, attrs : Array, fields : Array ); DImplements( type : String, interfaceName : String ); DEnum( name : String, values : Array ); } typedef Field = { var name : String; var kind : FieldKind; var pos : Position; } enum FieldKind { FMethod( args : Array, ret : TypeAttr ); FAttribute( t : TypeAttr ); DConst( name : String, type : Type, value : String ); } typedef FArg = { name : String, opt : Bool, t : TypeAttr }; typedef TypeAttr = { var t : Type; var attr : Array; }; enum Type { TVoid; TInt; TShort; TFloat; TDouble; TBool; TAny; TVoidPtr; TCustom( id : String ); TArray( t : Type ); } enum Attrib { // fields AValue; ARef; AConst; AOperator( op : String ); // interfaces ANoDelete; APrefix( prefix : String ); AJSImplementation( name : String ); }