[fpc-pascal] More problems with generics
bartek
bbartek at gmx.net
Sun Dec 23 21:13:52 CET 2007
Hi,
I am struggling to compile the following code. FPC throws a syntax error where the expression is IMHO correct.
Can somebody point me in the right direction?
FPC SVN (rev. 9495) -- FPC 2.2.0 dies with EAccessViolation while compiling the code in question
linux 2.6.23 x86
Thank you in advance.
bartek
{$mode objfpc}{$h+}
unit RegisteredCallbacks;
interface
uses classes, sysutils;
type
{ fake TList }
generic TList<T> = class
private
FakeMemory: T;
function GetElement(const Index: integer): T;
procedure SetElement(const Index: integer; const AElement: T);
public
constructor Create;
destructor Destroy; override;
property Element[index: integer]: T read GetElement write SetElement;
end;
{ TMulticast }
generic TMulticast<TParam> = class
type public
TListener = procedure(const Param: TParam) of object;
TListenerList = specialize TList<TListener>;
var private
Listener: TListener;
Audience: TListenerList;
public
constructor Create;
destructor Destroy; override;
procedure Invoke(const Param: TParam);
end;
implementation
{ fake TList }
constructor TList.Create;
begin
end;
destructor TList.Destroy;
begin
inherited Destroy;
end;
function TList.GetElement(const Index: Integer): T;
begin
Result := FakeMemory;
end;
procedure TList.SetElement(const Index: Integer; const AElement: T);
begin
FakeMemory := AElement;
end;
{ TMulticast }
constructor TMulticast.Create;
begin
Audience := TListenerList.Create;
end;
destructor TMulticast.Destroy;
begin
FreeAndNil(Audience);
inherited Destroy;
end;
procedure TMulticast.Invoke(const Param: TParam);
var
i: integer;
begin
Listener(Param); // This *does* compile. Why won't the line below?
for i := 0 to Audience.Count - 1 do Audience.Element[i](Param);
---------------------------------------------------------------^ (78,64)
end;
end.
% /usr/local/lib/fpc/2.3.1/ppc386 RegisteredCallbacks.pp
Free Pascal Compiler version 2.3.1 [2007/12/21] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for i386
Compiling RegisteredCallbacks.pp
RegisteredCallbacks.pp(78,64) Error: Illegal expression
RegisteredCallbacks.pp(78,64) Fatal: Syntax error, ";" expected but "(" found
Fatal: Compilation aborted
[1028] bartek at banana:~/Dev/bLibrary
%
More information about the fpc-pascal
mailing list