From 18a2256b2bc2a19667f74327f3b2c9398f120556 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: Mon, 6 Aug 2018 21:35:21 +0200 Subject: [PATCH] bug fix #1010 --- TestSuite/overloads9.pas | 15 +++++++++++++++ .../convertion_data_and_alghoritms.cs | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 TestSuite/overloads9.pas diff --git a/TestSuite/overloads9.pas b/TestSuite/overloads9.pas new file mode 100644 index 000000000..0c681a941 --- /dev/null +++ b/TestSuite/overloads9.pas @@ -0,0 +1,15 @@ +var j: int64; + +procedure test(i: int64; proc:procedure); +begin + j := i; +end; + +procedure test(r: real; proc:procedure); +begin + test(System.Convert.ToInt64(r), proc); +end; +begin + test(2.3, nil); + assert(j = 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 216c18a96..2a8e81e74 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -2343,6 +2343,25 @@ namespace PascalABCCompiler.TreeConverter from = (from as delegated_methods).empty_param_method.ret_type; if (to is delegated_methods && (to as delegated_methods).empty_param_method != null && (to as delegated_methods).empty_param_method.ret_type != null) to = (to as delegated_methods).empty_param_method.ret_type; + internal_interface from_ii = from.get_internal_interface(internal_interface_kind.delegate_interface); + internal_interface to_ii = to.get_internal_interface(internal_interface_kind.delegate_interface); + if (from_ii != null && to_ii != null) + { + delegate_internal_interface from_dii = (delegate_internal_interface)from_ii; + if (to_ii != null) + { + delegate_internal_interface to_dii = (delegate_internal_interface)to_ii; + if (from_dii.parameters.Count == to_dii.parameters.Count) + { + bool eq = TreeConverter.convertion_data_and_alghoritms.function_eq_params_and_result(from_dii.invoke_method, to_dii.invoke_method); + if (eq) + { + return 0; + } + } + } + } + type_compare tc = type_table.compare_types(from, to); if (tc == type_compare.non_comparable_type) return 1000;