From 8b4b333cd0837f1d28dba811fb9e9e48b92dc7ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Sun, 19 Aug 2018 14:14:16 +0200 Subject: [PATCH] bug fix #1054 --- TestSuite/events5.pas | 35 +++++++++++++++++++ .../TreeConversion/type_constructor.cs | 8 +++-- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 TestSuite/events5.pas 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"); }