- changed status to resolved
Exception when using IList<T> where T is a method pointer
Issue #294
resolved
The following code will raise an exception when it ends:
program Test_Spring_IList_With_Event_Handler;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
Spring.Collections;
type
TSomeEvent = procedure of object;
TMyEventHandlerClass = class
procedure SomeProcedure;
end;
TMyClass = class
private
FEventList: IList<TSomeEvent>;
public
constructor Create;
destructor Destroy; override;
procedure AddEvent(aEvent: TSomeEvent);
end;
procedure TMyEventHandlerClass.SomeProcedure;
begin
// Nothing to do.
end;
constructor TMyClass.Create;
begin
inherited;
FEventList := TCollections.CreateList<TSomeEvent>;
end;
destructor TMyClass.Destroy;
begin
FEventList := nil;
inherited;
end;
procedure TMyClass.AddEvent(aEvent: TSomeEvent);
begin
FEventList.Add(aEvent);
end;
var
MyEventHandlerObj: TMyEventHandlerClass;
MyObj: TMyClass;
begin
MyObj := TMyClass.Create;
MyEventHandlerObj := TMyEventHandlerClass.Create;
try
MyObj.AddEvent(MyEventHandlerObj.SomeProcedure);
finally
MyObj.Free;
MyEventHandlerObj.Free;
end;
end.
Originally reported on StackOverflow: https://stackoverflow.com/q/50708095/587106
Found to be a compiler codegen issue reported here: https://quality.embarcadero.com/browse/RSP-20683
Comments (2)
-
reporter -
reporter - edited description
- Log in to comment
fixed
#294→ <<cset 871cbdbe4339>>