Il 24/10/2017 14:15, Mattias Gaertner via Lazarus ha scritto:
On Tue, 24 Oct 2017 13:56:43 +0200
Giuliano Colla via Lazarus <lazarus@lists.lazarus-ide.org> wrote:


[...]
Now the catch is that the queue used is just a queue of pointers, while
here we're dealing with procedures of object. This is legal with Delphi
syntax, while it is forbidden in ObjFpc.
It's only legal with a typecast.
You can typecast a procedure of object to a pointer, but not the opposite. And that is good.

When I tried to see if the
problem was originated by Delphi mode, and changed to objfpc mode, it
turned out that there was no way to make it compile.
The compiler tried to protect you from shooting yourself in the foot.

Yes, but not in Delphi mode.
But just changing
my queue from a queue of pointers to a queue of TProc (TProc = procedure
of object) fixes the issue: it compiles, it works, Self is correct,
there's no need to qualify the identifier, and all is well.

The moral of the story is: in Delphi mode you can assign a procedure of
object to a pointer, and the compiler doesn't complain, but it is wrong,
I just tried with $mode delphi:

p:=o.DoIt;

test1.pas(32,4) Error: Invalid assignment, procedures return no
value

But in Delphi mode

    @NextProc := Coda.Remove;
    Sending := True;
    NextProc;

with NextProc defined as a procedure of object does compile but it's wrong.

Mattias


--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to