From 8435858c4aa7238e15c70948be393a31db80b542 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, 31 Mar 2019 11:54:53 +0200 Subject: [PATCH] fix #1684 --- TestSuite/generics25.pas | 8 ++++++++ TreeConverter/TreeRealization/generics.cs | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 TestSuite/generics25.pas diff --git a/TestSuite/generics25.pas b/TestSuite/generics25.pas new file mode 100644 index 000000000..1c6c256cd --- /dev/null +++ b/TestSuite/generics25.pas @@ -0,0 +1,8 @@ +function f1 := 1; +function f2(params a: array of integer) := 2; + +begin + var a := Arr(f1, f2); + assert(a[0] = 1); + assert(a[1] = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index 736079fc4..6f75a78a4 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -796,7 +796,12 @@ namespace PascalABCCompiler.TreeRealization //Проверяем фактические, попадающие под params... if (!DeduceInstanceTypes(last_params_type, fact[i].type, deduced, nils)) { - if (alone) + if (alone && fact[i].type is delegated_methods && (fact[i].type as delegated_methods).empty_param_method != null) + { + if (DeduceInstanceTypes(last_params_type, (fact[i].type as delegated_methods).empty_param_method.type, deduced, nils)) + continue; + } + else throw new SimpleSemanticError(loc, "GENERIC_FUNCTION_{0}_CAN_NOT_BE_CALLED_WITH_THESE_PARAMETERS", func.name); return null; }