I think I have this done except for cleanup. Here’s the status: - Integer,string,real,set and nil constant for parameters. - Consts can have type restrictions which correspond to the above types. - Const can be assigned to from generic const params. - PPU loading.
Technical compiler issues: - I couldn’t figure out how to extend PPU loading for a ttypesym subclass so I put 2 fields into ttypesym. Those are probably best moved to a subclass later. - We may need new error messages but I just left place holders in for now. https://github.com/genericptr/freepascal/tree/generic_constants program generic_constants_types; type generic TList<T, const U:integer> = record const ID = U; public list: array[0..U-1] of T; procedure dothis (msg:string); end; procedure TList.dothis (msg:string); begin writeln('message:',msg, ' high:', high(ID), ' constsize:', sizeof(ID), ' structsize:', sizeof(self)); end; type TDay = (Mon, Tue, Wed); TDays = set of TDay; const kSomeDays:TDays = [Mon, Wed]; var a: specialize TList<integer,10>; //b: specialize TList<integer,'foo'>; //c: specialize TList<integer,0.1>; //d: specialize TList<integer,kSomeDays>; //e: specialize TList<integer,nil>; begin a.dothis('hello'); end. Regards, Ryan Joseph _______________________________________________ fpc-pascal maillist - [email protected] http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
