diff --git a/TestSuite/generics7.pas b/TestSuite/generics7.pas new file mode 100644 index 000000000..0f2774aff --- /dev/null +++ b/TestSuite/generics7.pas @@ -0,0 +1,9 @@ +procedure wr(a: array of T); +begin + assert(a[0].ToString()='5'); +end; + +begin +var a := Arr(1,3,5); +wr(a.Reverse.ToArray); +end. diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index 846bcc468..28c4baf44 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -811,6 +811,11 @@ namespace PascalABCCompiler.TreeRealization { if (!DeduceInstanceTypes(formal[i].type, fact[i].type, deduced, nils)) { + if (alone && fact[i].type is delegated_methods && (fact[i].type as delegated_methods).empty_param_method != null) + { + if (DeduceInstanceTypes(formal[i].type, (fact[i].type as delegated_methods).empty_param_method.type, deduced, nils)) + continue; + } if (alone) throw new SimpleSemanticError(loc, "GENERIC_FUNCTION_{0}_CAN_NOT_BE_CALLED_WITH_THESE_PARAMETERS", func.name); RestoreLambdasStates(lambda_syntax_nodes.Values.ToList(), saved_lambdas_states);