unit interfaces; interface type ICloneable = interface function Clone : ICloneable; end; { ARGH@#_! type parameters. A kingdom for type parameters. } ISimpleIterator = interface //function GenericNext : Variant; { #"nil" = end } end; { this interface exists to signify that what you get back from the #"Next" call is actually a big block } ISimpleBlockIterator = interface(ISimpleIterator) { TODO maybe name the function "NextBlock" though I don't see a reason why I would. } end; ISymbol = interface function GetName : UTF8String; function GetValue : IInterface; procedure SetName(const aValue : UTF8String); procedure SetValue(const aValue : IInterface); property Name : UTF8String read GetName write SetName; // do NOT modify after interning. property Value : IInterface read GetValue write SetValue; end; implementation end.