From 9071a4786a52670f9f2b89cffd6fcadf0ba590a5 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, 16 Aug 2020 19:23:58 +0200 Subject: [PATCH] fix #2243 --- TestSuite/generics40.pas | 22 +++++++++++++++++++ .../convertion_data_and_alghoritms.cs | 13 ++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 TestSuite/generics40.pas diff --git a/TestSuite/generics40.pas b/TestSuite/generics40.pas new file mode 100644 index 000000000..d8bed1ae1 --- /dev/null +++ b/TestSuite/generics40.pas @@ -0,0 +1,22 @@ +var i: integer; +type + t1 = class; + + t0 = class + + public function f1: t1 := nil; + + end; + t1 = class(t0) end; + +procedure p1(q: t1); +begin + Inc(i); +end; + +procedure p1(q: t0) := p1(q.f1&); + +begin + p1(new t0); + assert(i = 1); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index d3c0c4212..edf3e63d5 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -2088,7 +2088,18 @@ namespace PascalABCCompiler.TreeConverter is_alone_method_defined, syntax_tree_visitor.context, loc, syntax_nodes_parameters); if (inst == null) { - set_of_possible_functions.RemoveAt(i); + try + { + inst = generic_convertions.DeduceFunction(func, parameters, true, syntax_tree_visitor.context, loc, syntax_nodes_parameters); + } + catch + { + + } + if (inst == null) + set_of_possible_functions.RemoveAt(i); + else + set_of_possible_functions[i] = inst; } else {