From 99845ad152ec48a4ee38ea85500f93ea0840daae Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Mon, 29 Apr 2024 23:02:34 +0300 Subject: [PATCH] fix #3102 --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 2 +- Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- TestSuite/CompilationSamples/LightPT.pas | 2 +- .../convertion_data_and_alghoritms.cs | 25 +++++++++++++------ bin/Lib/LightPT.pas | 2 +- 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index fc8615058..e24dd3f30 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "9"; public const string Build = "0"; - public const string Revision = "3463"; + public const string Revision = "3467"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index dbefac6cb..72e9cb7bc 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %MINOR%=9 -%REVISION%=3463 +%REVISION%=3467 %COREVERSION%=0 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 176dd9118..63fb2005c 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.9.0.3463 +3.9.0.3467 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index dc388e450..f4636dad1 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.9.0.3463' +!define VERSION '3.9.0.3467' diff --git a/TestSuite/CompilationSamples/LightPT.pas b/TestSuite/CompilationSamples/LightPT.pas index e4bce4c06..d319fbd2e 100644 --- a/TestSuite/CompilationSamples/LightPT.pas +++ b/TestSuite/CompilationSamples/LightPT.pas @@ -2741,7 +2741,7 @@ begin ColoredMessage($'Неверно составлен тест! Несоответствие типов входных данных в тесте и основном запуске. Возможно, неверно заполнен InputList в GenerateTestData'); end; end; - // Для задачника надо вызывать процедуру __FinalizeModule__ из модуля PT4 jnhf;tybtv, а в модуле PT4 эту процедуру тогда не вызывть + // Для задачника надо вызывать процедуру __FinalizeModule__ из модуля PT4 отражением, а в модуле PT4 эту процедуру тогда не вызывть // Для задачника в CheckTaskPT надо сказать, что проверяется задача из задачника. И выводить на экран ничего не надо - только в базу. TaskResultInfo := TaskException.Info; diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index 9505fd89f..c32141694 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -2258,20 +2258,31 @@ namespace PascalABCCompiler.TreeConverter //TODO: Здесь нужно поправить, если создавать возможность вызова метода с параметрами по умолчанию из откомпилированной dll. if (parameters.Count == fn.parameters.Count) { - function_node func = null; - if ((func = is_exist_eq_method_in_list(fn, set_of_possible_functions)) != null) + function_node fm = null; + if ((fm = is_exist_eq_method_in_list(fn, set_of_possible_functions)) != null) { - if (!eq_type_nodes(fn.return_value_type, func.return_value_type)) + if (!eq_type_nodes(fn.return_value_type, fm.return_value_type)) { - set_of_possible_functions[set_of_possible_functions.IndexOf(func)] = fn; + set_of_possible_functions[set_of_possible_functions.IndexOf(fm)] = fn; } continue; } - else if ((func = find_eq_method_in_list(fn, set_of_possible_functions)) != null) + else if ((fm = find_eq_method_in_list(fn, set_of_possible_functions)) != null) { - if (!(fn is compiled_function_node cfn && func is compiled_function_node cfn2 && (cfn.polymorphic_state == polymorphic_state.ps_static || cfn2.polymorphic_state == polymorphic_state.ps_static))) - set_of_possible_functions.Add(fn); + // SSM 29/04/24 - небольшой рефакторинг для большей понятности + if (fn is compiled_function_node cfnfn && fm is compiled_function_node cfnfm && (cfnfn.polymorphic_state == polymorphic_state.ps_static || cfnfm.polymorphic_state == polymorphic_state.ps_static)) + { + + } + // SSM 29/04/24 - добавил такое же условие что и в предыдущей ветке + else if (fn is compiled_function_node cfnfn1 && fm is compiled_function_node cfnfm1 + && ! (cfnfn1.comperehensive_type.IsInterface || cfnfm1.comperehensive_type.IsInterface)// для интерфейсов обрабатывается ниже + && cfnfn1.comperehensive_type != cfnfm1.comperehensive_type) + { + // пропускается такая же функция, но из предка! + } + else set_of_possible_functions.Add(fn); } else set_of_possible_functions.Add(fn); diff --git a/bin/Lib/LightPT.pas b/bin/Lib/LightPT.pas index e4bce4c06..d319fbd2e 100644 --- a/bin/Lib/LightPT.pas +++ b/bin/Lib/LightPT.pas @@ -2741,7 +2741,7 @@ begin ColoredMessage($'Неверно составлен тест! Несоответствие типов входных данных в тесте и основном запуске. Возможно, неверно заполнен InputList в GenerateTestData'); end; end; - // Для задачника надо вызывать процедуру __FinalizeModule__ из модуля PT4 jnhf;tybtv, а в модуле PT4 эту процедуру тогда не вызывть + // Для задачника надо вызывать процедуру __FinalizeModule__ из модуля PT4 отражением, а в модуле PT4 эту процедуру тогда не вызывть // Для задачника в CheckTaskPT надо сказать, что проверяется задача из задачника. И выводить на экран ничего не надо - только в базу. TaskResultInfo := TaskException.Info;