From 4e4906107688b5744023252cc121f19b69c74783 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Tue, 31 Aug 2021 20:30:25 +0200 Subject: [PATCH] #2446 --- TestSuite/partial_generics2.pas | 29 +++++++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 2 ++ 2 files changed, 31 insertions(+) create mode 100644 TestSuite/partial_generics2.pas diff --git a/TestSuite/partial_generics2.pas b/TestSuite/partial_generics2.pas new file mode 100644 index 000000000..567c990b2 --- /dev/null +++ b/TestSuite/partial_generics2.pas @@ -0,0 +1,29 @@ +var i: integer; + +procedure p0(x: byte); +begin + i := x; +end; + +type + t1 = partial class end; + t2 = partial class(t1) end; + + t0 = class + x: T; + end; + t1 = partial class(t0) end; + + t2 = partial class//(t1) // Если указать наследование от t1 - ошибки нет + + //Ошибка: Нельзя преобразовать тип T к byte + procedure p1 := p0(x); + + end; + +begin + var o := new t2; + o.x := 2; + o.p1; + assert(i = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 7d686f618..489d130ee 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -3797,6 +3797,8 @@ namespace PascalABCCompiler.TreeConverter { if (!(context.converted_type.IsPartial && context.converted_type.base_type != null && context.converted_type.base_type != SemanticRules.ClassBaseType)) context.converted_type.SetBaseType(SemanticRules.ClassBaseType); + else if (context.converted_type.IsPartial && context.converted_type.base_type != null) + context.converted_type.SetBaseType(context.converted_type.base_type); } context.converted_type.is_class = true;