>> Additionally, it's possible that it's not possible to inline generic routines in regular routines,
>
> It is not my case.
> I use this generic in another generic and then it is specialized in interface section of same unit.
>
> Later this specialized object is used in another class type, which comes after specialization. > So this object is not used in regular procedure, but in methods of another class ...
>
> I did also attempt to put all this stuff (with generics and specializations) into separate unit and then I have used this unit ( in interface section ) in "main" unit
> But still does not inline ...

You need to call the function in another unit than where the specialization is.

Yes I do it so (in attached example it is in one unit, but in my real generic and specialization is in separate unit, that is used by another in interface section)

Maybe provide a small (compileable) example that shows what you're doing so that we can check that ourselves.

Attached

It could also be that 2.6.x had still problems there...

I tried also with FPC 3.0, but result is same AFAICS

Thanks
-Laco.

program test_inline;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

{$INLINE ON}

type

  { GT }

  generic GT<T> = object
    private
      type
        TElement = T;
        PElement = ^T;
      var
        FArray: array of T;
    public
      constructor Init;
      function Data: PElement; inline;
  end;

  T1 = specialize GT<byte>;

  { T2 }

  T2 = class
    private
      Ft1: T1;
    public
      constructor Create;
      procedure Test;
  end;

{ GT }

constructor GT.Init;
begin
  SetLength(FArray,10);
end;

function GT.Data: PElement; inline;
begin
  Result := @FArray[0];
end;

{ T2 }

constructor T2.Create;
begin
  Ft1.Init;
end;

procedure T2.Test;
var p: T1.PElement;
begin
  p := Ft1.Data; // here is CALL
end;

var
  a: T2;

begin
  a := T2.Create;
  a.Test;
  a.Free;
end.

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

Reply via email to