From 132b1e2de2c252261f2e020f89a19541b728af32 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: Wed, 3 Aug 2016 21:24:30 +0200 Subject: [PATCH] bug fix #240 --- TestSuite/params10.pas | 18 ++++++++++++++++++ TreeConverter/TreeRealization/generics.cs | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 TestSuite/params10.pas diff --git a/TestSuite/params10.pas b/TestSuite/params10.pas new file mode 100644 index 000000000..97f1ad8ed --- /dev/null +++ b/TestSuite/params10.pas @@ -0,0 +1,18 @@ +function f(params a: array of T): array of T; +begin + Result := a; +end; + +function f2(b: T; params a: array of T): array of T; +begin + Result := a; +end; + +begin + var a := new integer[3](1,2,3); + var b: array of integer; + b := f(a); + assert(b[0] = 1); + b := f2(2, a); + assert(b[1] = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index ae5b2a483..a56a1e298 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -809,7 +809,10 @@ namespace PascalABCCompiler.TreeRealization for (int i = formal_count - 1; i < fact_count; ++i) { //Проверяем фактические, попадающие под params... - if (!DeduceInstanceTypes(last_params_type, fact[i].type, deduced, nils)) + type_node tn = fact[i].type; + if (tn.element_type != null && tn.type_special_kind != SemanticTree.type_special_kind.array_wrapper) + tn = tn.element_type; + if (!DeduceInstanceTypes(last_params_type, tn, deduced, nils)) { if (alone) throw new SimpleSemanticError(loc, "GENERIC_FUNCTION_{0}_CAN_NOT_BE_CALLED_WITH_THESE_PARAMETERS", func.name);