From 00846fd0fc613b49cc9a22b6e31a9932bc60e332 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 10 Jan 2021 18:54:40 +0100 Subject: [PATCH] #1093 --- TestSuite/generics47.pas | 4 ++++ TreeConverter/TreeRealization/generics.cs | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 TestSuite/generics47.pas diff --git a/TestSuite/generics47.pas b/TestSuite/generics47.pas new file mode 100644 index 000000000..550d16801 --- /dev/null +++ b/TestSuite/generics47.pas @@ -0,0 +1,4 @@ +begin + var s := '1234'; + assert(s.All(char.IsDigit)); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index 7a67340a2..dd08cd3bd 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -1187,6 +1187,18 @@ namespace PascalABCCompiler.TreeRealization if (sil != null && sil.Count > 0) fact_func = sil[0].sym_info as function_node; } + else if (dm != null && dm.proper_methods.Count > 1 && formal_type.original_generic is compiled_type_node && (formal_type.original_generic as compiled_type_node).compiled_type.FullName.StartsWith("System.Func`")) + { + var ctn = formal_type.original_generic as compiled_type_node; + foreach (var fc in dm.proper_methods) + { + if (fc.simple_function_node.parameters.Count == formal_type.instance_params.Count - 1) + { + fact_func = fc.simple_function_node; + break; + } + } + } if (fact_func != null) {