2016-05-10 11:26 GMT+02:00 Anthony Walter <sys...@gmail.com>:

> Hey I'm all for your improvements. Good work, keep it up, and I actually
> appreciate it. If you want, I can write up an overview of your improvements
> at getlazarus.org and provide precompiled versions for testings/use on
> all platforms (win, mac, linux, raspbian)..
>

glad to hear that ^^. I think is good idea to wait for smart pointers. I
will let you know in PM.

Which probably isn't something you or anyone else has implemented yet
> because of the generic factor. Actually support for type helpers for any
> generic types (classes, records, interfaces, arrays) would be great,
> especially when combined with the work you've done on record initialization
> and finalization.
>

With my private "not committed yet" version of compiler I can compile code
like that (I think the good name for below construction is "specialized
helper" or "forced helper" or just "record with default field"):

{ be aware that code below is experimental }
type
  TManagedArray<T> = record
    Instance: TArray<T> default;

    function Add(A: T): Integer;
  end;

function TManagedArray<T>.Add(A: T): Integer;
begin
  Result := Length(Instance);
  SetLength(Instance, Succ(Result));
  Instance[Result] := A;
end;

procedure foo(A: TArray<Integer>);
begin
  WriteLn(a[0]); // 10
end;

var
  a: TManagedArray<Integer>;
  pa: ^TArray<Integer>;
  i: Integer;
begin
  a.Add(10);
  i := a[0]; // compiler magic, equivalent of: i := a.Instance[0];
  foo(a); // compiler magic, equivalent of: foo(a.Instance);
  pa := @a; // compiler magic, equivalent of: pa := @a.Instance;
  WriteLn(pa^[0], ' = ', i); // 10 = 10
end.

-- 
Best regards,
Maciej Izak
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to