diff --git a/Compiler/PCU/PCUReader.cs b/Compiler/PCU/PCUReader.cs index baf3a0279..0d246d354 100644 --- a/Compiler/PCU/PCUReader.cs +++ b/Compiler/PCU/PCUReader.cs @@ -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); diff --git a/Compiler/PCU/PCUWriter.cs b/Compiler/PCU/PCUWriter.cs index c85cdaf1f..e75c2e3e9 100644 --- a/Compiler/PCU/PCUWriter.cs +++ b/Compiler/PCU/PCUWriter.cs @@ -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); diff --git a/TestSuite/units/u_events6.pas b/TestSuite/units/u_events6.pas new file mode 100644 index 000000000..8b9a79bea --- /dev/null +++ b/TestSuite/units/u_events6.pas @@ -0,0 +1,10 @@ +unit u_events6; + +uses System; + +type + I1 = interface + event E1: Action; + end; + +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_events6.pas b/TestSuite/usesunits/use_events6.pas new file mode 100644 index 000000000..654831e92 --- /dev/null +++ b/TestSuite/usesunits/use_events6.pas @@ -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. \ No newline at end of file