From ecdf35ab53b0617fe0a53d8fd9f3af46ee2b5fb7 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, 1 Mar 2020 13:45:55 +0100 Subject: [PATCH] fix #2149 --- .../errors/err0347_wrong_generic_override.pas | 13 ++++++++++ TestSuite/generics34.pas | 26 +++++++++++++++++++ .../convertion_data_and_alghoritms.cs | 8 +++--- 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 TestSuite/errors/err0347_wrong_generic_override.pas create mode 100644 TestSuite/generics34.pas diff --git a/TestSuite/errors/err0347_wrong_generic_override.pas b/TestSuite/errors/err0347_wrong_generic_override.pas new file mode 100644 index 000000000..b62b33001 --- /dev/null +++ b/TestSuite/errors/err0347_wrong_generic_override.pas @@ -0,0 +1,13 @@ +type + t1 = class + procedure p1(x: T; y: U); virtual := exit; + end; + + t2 = class(t1) + procedure p1(x: UU; y: TT); override; + begin + end; + end; + +begin +end. \ No newline at end of file diff --git a/TestSuite/generics34.pas b/TestSuite/generics34.pas new file mode 100644 index 000000000..399e667fa --- /dev/null +++ b/TestSuite/generics34.pas @@ -0,0 +1,26 @@ +type + t1 = class + i: integer; + procedure p1(x: T); virtual := exit; + function f: T; virtual := default(T); + end; + + t2 = class(t1) + procedure p1(x: TT); override; + begin + i := 1; + end; + function f: T1; override; + begin + Result := default(T1); + i := 2; + end; + end; + +begin + var o: t1 := new t2; + o.p1&(2); + assert(o.i = 1); + assert(o.f& = 0); + assert(o.i = 2); +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 284f22bb3..73d926625 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -1549,8 +1549,8 @@ namespace PascalABCCompiler.TreeConverter { if (left.return_value_type != null && right.return_value_type != null && left.return_value_type.is_generic_parameter && right.return_value_type.is_generic_parameter) { - if (string.Compare(left.return_value_type.name, right.return_value_type.name, true) != 0) - return false; + //if (string.Compare(left.return_value_type.name, right.return_value_type.name, true) != 0) + // return false; return eq_type_nodes(left.return_value_type, right.return_value_type, false); } @@ -1575,13 +1575,13 @@ namespace PascalABCCompiler.TreeConverter { return false; } - for (int i = 0; i < left_type_params.Count; i++) + /*for (int i = 0; i < left_type_params.Count; i++) { if (string.Compare(left_type_params[i].name, right_type_params[i].name, true) != 0) { return false; } - } + }*/ return true; }