Am 09.07.2020 um 14:31 schrieb Ryan Joseph via fpc-pascal:
Given the code below and the 2 cases can anyone explain what exactly the 
compiler does when the interfaces are assigned to? Does it copy a record like 
structure, call some internal functions, do runtime checks? I'm curious if 
they're doing more than I think they do.

============================

{$mode objfpc}
{$interfaces corba}

program unit_name;

type
   IFoo = interface ['IFoo']
   end;

type
   TMyClass = class (IFoo)
   end;

procedure DoSomething(i: IFoo);
begin
end;

var
   f: IFoo;
   c: TMyClass;
begin
   // case A
   f := c;
   // case B
   DoSomething(c);
end.

As you're using CORBA or RAW interfaces a) will simply copy a shifted pointer to the 'c' class instance (so that it points to the VMT generated for the interface). And b) is a simple pointer passing.

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to