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);