From 710d9580ca52ac259a12dcb469821fd1b5084a06 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Thu, 14 Oct 2021 20:43:29 +0200 Subject: [PATCH] #2532 --- TestSuite/partial_generics6.pas | 21 +++++++++++++++++++++ TreeConverter/TreeRealization/type_table.cs | 4 ++++ 2 files changed, 25 insertions(+) create mode 100644 TestSuite/partial_generics6.pas diff --git a/TestSuite/partial_generics6.pas b/TestSuite/partial_generics6.pas new file mode 100644 index 000000000..ea93819f7 --- /dev/null +++ b/TestSuite/partial_generics6.pas @@ -0,0 +1,21 @@ +type + t0 = class end; +function f0(q: t0) := default(T); + +type + t1 = partial class end; + t2 = partial class + // Обязательно как то использовать t1, именно с + o: t1; + end; + + t1 = partial class(t0>) end; + t2 = partial class + //Ошибка: Нельзя преобразовать тип t2 к t2 + function f1: t2 := f0(default(t1)); + end; + +begin + var o := new t2; + assert(o.f1() = nil); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/type_table.cs b/TreeConverter/TreeRealization/type_table.cs index cd35cfba4..07db07cbc 100644 --- a/TreeConverter/TreeRealization/type_table.cs +++ b/TreeConverter/TreeRealization/type_table.cs @@ -1026,6 +1026,10 @@ namespace PascalABCCompiler.TreeRealization } } + if (from.is_generic_type_instance && to.is_generic_type_instance && from.original_generic == to.original_generic && from.name == to.name + && from.original_generic is common_type_node && to.original_generic is common_type_node && (from.original_generic as common_type_node).comprehensive_namespace == (to.original_generic as common_type_node).comprehensive_namespace + && (to.original_generic as common_type_node).IsPartial && (from.original_generic as common_type_node).IsPartial) + add_conversion(ret, TreeConverter.convertion_data_and_alghoritms.get_empty_conversion(from, to, true), from, to); return ret; } }