This commit is contained in:
Ivan Bondarev 2024-06-23 14:21:12 +02:00
parent 73369527c8
commit 2007fd155c
4 changed files with 38 additions and 2 deletions

View file

@ -1847,7 +1847,10 @@ namespace PascalABCCompiler.PCU
common_method_node raise_meth = null;
if (CanReadObject())
raise_meth = GetClassMethod(br.ReadInt32());
class_field cf = GetClassField(br.ReadInt32());
int field_off = br.ReadInt32();
class_field cf = null;
if (field_off > 0)
cf = GetClassField(br.ReadInt32());
common_type_node cont = (common_type_node)GetTypeReference(br.ReadInt32());
if (name==null)
name = GetStringInClass(cont, name_ref);

View file

@ -3021,7 +3021,10 @@ namespace PascalABCCompiler.PCU
bw.Write(GetMemberOffset(_event.remove_method));
if (CanWriteObject(_event.raise_method))
bw.Write(GetMemberOffset(_event.raise_method));
bw.Write(GetMemberOffset(_event.field));
if (!_event.cont_type.IsInterface)
bw.Write(GetMemberOffset(_event.field));
else
bw.Write(0);
bw.Write(offset);
bw.Write((byte)_event.field_access_level);
bw.Write((byte)_event.polymorphic_state);

View file

@ -0,0 +1,10 @@
unit u_events6;
uses System;
type
I1 = interface
event E1: Action;
end;
end.

View file

@ -0,0 +1,20 @@
uses u_events6, System;
type TClass = class(I1)
event E1: Action;
procedure RaiseMethod;
begin
if E1 <> nil then
E1();
end;
end;
begin
var i := 0;
var o := new TClass;
o.E1 += () -> begin Inc(i) end;
o.RaiseMethod();
assert(i = 1);
end.