Can anyone test this to see if it’s ok? Not sure I got everything correct and I still need some new error messages that make more sense (see the writeln’s I left in)
Even though overloads are allowed the actual name isn’t overloaded so you MUST access without the name to get overloading affects. I didn’t overload the actual name because properties aren’t really functions and as such don’t use tcallcandiates etc… If you attempt to use the name of the default property the last property declared wins. Is that ok? I hope so because I imagine it’s lots of work to actually make property names behave like real functions and not worth it imo. https://github.com/genericptr/freepascal/tree/array_prop_overload {$mode objfpc} {$modeswitch advancedrecords} program tarrpropol1; // https://bugs.freepascal.org/view.php?id=29056 type TValue = TObject; function GetGlobalValue(index: integer): TValue; begin result:=nil; end; property Values[index: integer]: TValue read GetGlobalValue; //property Values[index: string]: TValue read GetGlobalValue; type TList = record function GetFirst: TValue; property First: TValue read GetFirst; function GetValueWithInt(index: integer): TValue; function GetValueWithString(index: string): TValue; function GetValueWithPair(index: integer; key: string): TValue; { all default properties must share the same name } //property Values0[index: integer]: TValue read GetValueWithInt; default; //property Values1[index: string]: TValue read GetValueWithString; default; { default properties must have unique parameters } //property Values[index: integer]: TValue read GetValueWithInt; default; //property Values[index: integer]: TValue read GetValueWithInt; default; { parametered properties still can't have duplicate names } //property Values[index: integer]: TValue read GetValueWithInt; //property Values[index: string]: TValue read GetValueWithString; { ok-defaults } property Values[index: integer]: TValue read GetValueWithInt; default; property Values[index: string]: TValue read GetValueWithString; default; property Values[index: integer; key: string]: TValue read GetValueWithPair; default; end; function TList.GetFirst: TValue; begin result:=nil; end; function TList.GetValueWithInt(index: integer): TValue; begin writeln('GetValueWithInt'); result := nil; end; function TList.GetValueWithString(index: string): TValue; begin writeln('GetValueWithString'); result := nil; end; function TList.GetValueWithPair(index: integer; key: string): TValue; begin writeln('GetValueWithPair'); result := nil; end; var c: TList; v: TValue; begin v := c[1,'f']; end. Regards, Ryan Joseph Regards, Ryan Joseph _______________________________________________ fpc-devel maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
