1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
program tConstRef1;
{$mode objfpc}{$h+}
uses
Classes, SysUtils;
type
TConstRefProc = procedure(constref AParam: integer);
TAClass = class(tobject)
private
function GetSomething(constref int:integer): integer;
public
property Something[constref int:integer] : integer read getSomething;
end;
function TAClass.GetSomething(constref int: integer): integer;
begin
if int<>$1234567 then
halt(1);
result := $54321;
end;
procedure TestConstRef(constref AParam: integer); [public, alias: '_TESTCONSTREF'];
begin
if AParam<>$1234567 then
halt(1);
end;
procedure TestConstRefAlias(AParam: PInteger); [external name '_TESTCONSTREF'];
const c = $1234567;
var a: integer;
aclass: TAClass;
p: TConstRefProc;
begin
a := $1234567;
TestConstRef(a);
TestConstRef(c);
TestConstRef($1234567);
TestConstRefAlias(@a);
aclass := TAClass.Create;
if aclass.Something[a]<>$54321 then
halt(1);
aclass.Free;
p := @TestConstRef;
p(c);
end.
|