From acaabbb3193498d11b57d88f0dff010fb22a1684 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, 23 Aug 2020 13:57:30 +0200 Subject: [PATCH] fix #1512 --- TestSuite/delegates15.pas | 13 +++++++++++++ .../convertion_data_and_alghoritms.cs | 7 ++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 TestSuite/delegates15.pas diff --git a/TestSuite/delegates15.pas b/TestSuite/delegates15.pas new file mode 100644 index 000000000..d4a3237d5 --- /dev/null +++ b/TestSuite/delegates15.pas @@ -0,0 +1,13 @@ +function f1(b: byte) := b; +function f2 := 2; +type fnc = function(b: byte): byte; +begin + var o1: object := f1; + var f: fnc := fnc(o1); + assert(f(2) = 2); + var o2: object := f2; + assert(integer(o2) = 2); + o1 := f1; + f := fnc(o1); + assert(f(2) = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index edf3e63d5..a2ca94aea 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -662,7 +662,12 @@ namespace PascalABCCompiler.TreeConverter } en.location = loc; if (en.type is delegated_methods dm && dm.proper_methods[0].parameters.Count == 0 && dm.proper_methods[0].ret_type != null) - AddError(new CanNotConvertTypes(en, dm.proper_methods[0].ret_type, to, loc)); // SSM 18/06/20 #2261 + { + if (to != SystemLibrary.SystemLibrary.object_type) + AddError(new CanNotConvertTypes(en, dm.proper_methods[0].ret_type, to, loc)); // SSM 18/06/20 #2261 + else + return en; + } else if (en.type is undefined_type && en is base_function_call bfc) throw new SimpleSemanticError(loc, "RETURN_TYPE_UNDEFINED_{0}", bfc.function.name); else AddError(new CanNotConvertTypes(en, en.type, to, loc));