diff --git a/TestSuite/events5.pas b/TestSuite/events5.pas new file mode 100644 index 000000000..ada43591b --- /dev/null +++ b/TestSuite/events5.pas @@ -0,0 +1,35 @@ +var i: integer; + j: integer; + +type + TRec = record + end; + + TExample = class + event f: Action; + event f2: Action>; + constructor Create(); + begin + f += procedure (x) -> begin i := 1; end; + f2 += procedure (x) -> begin j := 1; end; + end; + procedure raiseevent; + begin + f(default(T)); + f2(new List); + end; + end; + +begin + var o: TExample; + o := new TExample(); + o.raiseevent; + assert(i = 1); + assert(j = 1); + i := 0; + j := 0; + var o2 := new TExample; + o2.raiseevent; + assert(i = 1); + assert(j = 1); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/type_constructor.cs b/TreeConverter/TreeConversion/type_constructor.cs index 1d60d79d5..c5ca2f1be 100644 --- a/TreeConverter/TreeConversion/type_constructor.cs +++ b/TreeConverter/TreeConversion/type_constructor.cs @@ -196,7 +196,9 @@ namespace PascalABCCompiler.TreeConverter el.AddElement(cfc); SymbolInfo si = exprs[0].type.find_first_in_type(compiler_string_consts.assign_name); - if (si == null) + if (si == null && exprs[0].type.original_generic != null) + si = exprs[0].type.original_generic.find_first_in_type(compiler_string_consts.assign_name); + if (si == null) { throw new CompilerInternalError("Undefined delegate operation"); } @@ -223,7 +225,9 @@ namespace PascalABCCompiler.TreeConverter el.AddElement(cfc); SymbolInfo si = exprs[0].type.find_first_in_type(compiler_string_consts.assign_name); - if (si == null) + if (si == null && exprs[0].type.original_generic != null) + si = exprs[0].type.original_generic.find_first_in_type(compiler_string_consts.assign_name); + if (si == null) { throw new CompilerInternalError("Undefined delegate operation"); }