On Wed, 27 Jul 2016, Maciej Izak wrote:


3. "default" need to be transparent and usable with existing code base,
some compiler magic is part of my further compiler development (I mean here
"Storage Modifiers" and ARC objects in DelphiNextgen mode). With current
approach is possible to pass record with default field as var/out/constref
parameter. With property that is impossible.

This is probably the only good argument.


Question: can "default" only be used in "record" or also in "object" and
"class"?


Current implementation allows "default" only for "records".

I don't think that for classes this should be allowed.

Imagine:

TSomeClass = Class
  Property SomeProp : TSomeClass; default;
end;

Var
  A,B : TSomeClass;

begin
  A:=B;  // What to do ? Set A, or A.SomeProp ?
end;

For records, this construct is simply not possible.

@@ operator is very simple way to determine where you point. In any other
case we have casting hell. See below (and more below). @@ exist rather as
fulfillment to pa := @a; form tdefault7.pp (anyway is necessary for untyped
pointers). You might not like @@ operator but @@ is part of long tradition.
In practice works like a charm and is very clear.

I agree and think @@ is indeed better.



Since normally in Pascal the
result type of an expression is *not* determined by the left hand side
of an assignment that's rather confusing (yes, there are exceptions, but
that doesn't mean that one needs to add a new one).


That is also by design. That is because you can't declare as "default
field" nor "normal field" the field of owner type, so as logical
consequence the syntax needs to be allowed (I mean here pa := @a; form
tdefault7.pp). In daily usage it works very well and any other compiler
behavior is irrational.

? A compiler always behaves rational.

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

Reply via email to