From f3ee283ea83f33c537eadc029ffb695cc0c8ea48 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Tue, 29 Dec 2020 20:24:58 +0100 Subject: [PATCH] fix #2107 --- TestSuite/generics43.pas | 28 +++++++++++++++++++ .../convertion_data_and_alghoritms.cs | 20 ++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 TestSuite/generics43.pas diff --git a/TestSuite/generics43.pas b/TestSuite/generics43.pas new file mode 100644 index 000000000..40ef7a6ce --- /dev/null +++ b/TestSuite/generics43.pas @@ -0,0 +1,28 @@ +var i: integer; +procedure p1(a: array of T); +begin + i := 1; +end; +procedure p1(a: T); +begin + i := 2; +end; + +procedure p2(a: array[,] of T); +begin + i := 1; +end; +procedure p2(a: T); +begin + i := 2; +end; + + +begin + var a := new byte[5]; + p1(a); + assert(i = 1); + i := 0; + p2(a); + assert(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 d667f86b6..1f116103a 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -2602,7 +2602,25 @@ namespace PascalABCCompiler.TreeConverter } }*/ } - + } + List to_remove = new List(); + foreach (function_node fn in funcs) + { + if (fn.is_generic_function_instance) + foreach (parameter p in fn.original_function.parameters) + { + if (p.type.is_generic_parameter) + { + to_remove.Add(fn); + break; + } + } + } + if (set_of_possible_functions.Count - to_remove.Count == 1) + { + foreach (function_node fn in to_remove) + set_of_possible_functions.Remove(fn); + return set_of_possible_functions[0]; } }