Peter Popov wrote:

Hi All
As you now, the Slice function (internal to the Delphi compiler) is not currently implented in fpc (see bug http://www.freepascal.org/bugs/showrec.php3?ID=2856). I am wondering how easy it is to implement/circumvent this problem. In these regard, can someone shed light on the following two things:

1. Are open array parameters in fpc functions and procedure implemented in the same way as in Delphi. That is,

procedure MyFunc(x: array of integer)

is actually compiled as

procedure MyFunc(count: Integer; x: ^Integer)

and inside MyFunc, x is treated as a zero based arrays of size count, and count is only accessible through High(x).

Are fpc open arrays done in the same way?

2. What is the internal structure of a dynamic array/open array in fpc. Maybe, given a pointer and a array size, one can hack a temprorary dynamic array structure (probably without typecasting) and pass it as an open array parameter. Even without typecasting, this will let me compile existing delphi code.

Thanks
Peter

Array slicing is already possible with the use of absolute eg:

program Project1;

{$mode objfpc}{$H+}

procedure Crap(var A: array of Integer);
var
 b: array[1..3] of Integer absolute A[2];
 i: Integer;
begin
 for i:=1 to 3 do b[i]:=0;
end;

var
 a: array of Integer;
 i: Integer;
begin
 SetLength(a, 6);
 for i:=0 to 5 do
   a[i]:=i + 1; // 1 to 6
 Crap(a);
 for i:=0 to 5 do
   Write(a[i], ' ');
 Writeln;
end.

Output is 1 2 0 0 0 6

Ales
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to