From e04cc45970d774373938a199d1a49beda8c863bf 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, 27 Dec 2015 11:27:31 +0100 Subject: [PATCH] bug fix issue #21 --- TestSuite/generics7.pas | 9 +++++++++ TreeConverter/TreeRealization/generics.cs | 5 +++++ 2 files changed, 14 insertions(+) create mode 100644 TestSuite/generics7.pas 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);