On Wed, 27 Jul 2016, Maciej Izak wrote:

2016-07-27 11:24 GMT+02:00 Jonas Maebe <jonas.ma...@elis.ugent.be>:

On a more general note, I think the fact that @recordvar no longer is a
pointer to the record is wrong. You need a different keyword instead of
"record" in that case (or possibly a modifier for the "record" keyword,
like with "class abstract" -- but this is not a record at any more than an
shortstring is a record, so I don't think that's a good idea either).

Completely changing how certain aspects of a record are treated by the
compiler only based on the fact that somewhere there is a "default"
modifier for one field is not good. You should definitely not have to go
through an entire declaration of a record to be able to know how it will
behave.


I was thinking on additional modifier for that before. We can use something
like this:

=== code begin ===
type
 TNullable<T: record> = record proxy to Instance
 public type
   PT = ^T;
 strict private
   Instance: ^T; // no default word anymore
   function GetValue: T;
=== code end ===

Record proxy will not work. Proxy can be the name of a field.

So I think the modifier should be before the record, just as 'packed' or 
'bitpacked' are.

And contrary to 'to instance', I prefer the default:

type
  TNullable<T: record> = proxy record
  public type
    PT = ^T;
  strict private
    Instance: ^T; default;
    function GetValue: T;
  end;

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to