From e82be647b22c929aaaa36a213e974372987400bb 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: Tue, 30 Jun 2020 21:42:29 +0200 Subject: [PATCH] bug fix #2218 --- TestSuite/generics39.pas | 28 +++++++++++++++++++ .../convertion_data_and_alghoritms.cs | 2 ++ 2 files changed, 30 insertions(+) create mode 100644 TestSuite/generics39.pas diff --git a/TestSuite/generics39.pas b/TestSuite/generics39.pas new file mode 100644 index 000000000..2c63fc3a8 --- /dev/null +++ b/TestSuite/generics39.pas @@ -0,0 +1,28 @@ +type + t0 = class end; + + t1 = class + + function f1: array of T; virtual := nil; + function f2: t0; virtual := nil; + function f3: ^T; virtual := nil; + function f4(a: T1; b: T2): (T1,T2); virtual := nil; + end; + + t2 = class(t1) + function f1: array of T; override := new T[2]; + function f2: t0; override := new t0; + function f3: ^T; override := nil; + function f4(a: T2; b: T1): (T2,T1); override := (a,b); + end; + +begin + var o: t1 := new t2; + var a := o.f1&; + assert(a.Length = 2); + var o2 := o.f2&; + assert(o2 <> nil); + var o3 := o.f4&(2,'a'); + assert(o3.Item1 = 2); + assert(o3.Item2 = 'a'); +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 06ff6937c..36075f088 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -1443,6 +1443,8 @@ namespace PascalABCCompiler.TreeConverter { if (strong && tn1.generic_function_container != tn2.generic_function_container) { + if (tn1.is_generic_parameter && tn2.is_generic_parameter) + return tn1.generic_param_index == tn2.generic_param_index; return false; } return (tn1.generic_param_index == tn2.generic_param_index);