[fpc-devel] Allow record helper inheritance in Delphi mode
Maciej Izak
hnb.code at gmail.com
Fri Sep 1 12:15:19 CEST 2017
2017-09-01 11:41 GMT+02:00 Stefan Glienke <sglienke at dsharp.org>:
> Again you will cause unnecessary headaches because now your helper has the
> dependency of the builtin and the third party one.
> How would third party one and third party two implement them? They both
> probably would extend the builtin one. Which one can you use in your code
> then?
> Yes, the one that comes last in the uses. What if you want to use
> functions from both? Out of luck again.
>
> Inheritance regardless what form is never is the best option here. I think
> "ancestor list" is just a misnomer in the documentation as it cannot be a
> list but only one in case of class helper.
The control of modules order in uses section can turn programmers life into
real hell for type helpers. I think that new directive
$EXPLICITHELPERS should help :
type
TH1 = record helper for string
procedure foo;
procedure foo1;
end;
TH2 = record helper for string
procedure foo;
procedure foo2;
end;
TH3 = record helper for string
procedure foo;
procedure foo3;
end;
var
s: string;
begin
s.foo; // call TH3.foo
{$EXPLICITHELPERS TH1 for string} // scope for helpers limited only to TH1
s.foo; // call TH1.foo
s.foo3; // error
{$EXPLICITHELPERS TH2, TH1 for string}
s.foo; // call TH2.foo
s.foo1; // call TH1.foo1
{$EXPLICITHELPERS default for string}
s.foo; // call TH3.foo
{$EXPLICITHELPERS TH1, default for string}
s.foo; // TH1.foo
s.foo1;
s.foo2;
s.foo3;
end.
--
Best regards,
Maciej Izak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20170901/e40d3892/attachment.html>
More information about the fpc-devel
mailing list