From bda964c3aff0417c639d82ccb0e719821bda9358 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Fri, 31 May 2024 22:01:54 +0300 Subject: [PATCH] fix #3133 --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- Localization/DefaultLang.resources | Bin 102073 -> 101866 bytes Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- .../convertion_data_and_alghoritms.cs | 35 ++++++++++++++++-- 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 0814f841f..69ab15ea2 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 = "3487"; + public const string Revision = "3488"; 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 a29c6ccd7..cc83a1470 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=9 -%REVISION%=3487 %COREVERSION%=0 +%REVISION%=3488 +%MINOR%=9 %MAJOR%=3 diff --git a/Localization/DefaultLang.resources b/Localization/DefaultLang.resources index f65cae7905c3a80c1de480ae1affb7e3b271977f..13b78889db13e579af4d88eeb3c0fbf10de205f5 100644 GIT binary patch delta 23 fcmdlvm+jSTwh0dy*)~2b_G?xS*sdJFIL!_Kf9VOQ delta 218 zcmaDgn{DS@wh0dyuWo!;>}Qvno>^RyTI86Q;+&sXQk0()kW-qTnWvYMSi;Mt8W7~_ z<{6=C%gd#&9|TpZkeHXE098CWkWr#O$kp95IK(w5-qFt`-r3(TB*@<q!lU2s-@ShO j^sNFfmz#f(FQy5+Twn*4=9OgTrZz|UZ;$e4oL~n4!`)#) diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 146f09bca..da56e7006 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.9.0.3487 +3.9.0.3488 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 96410497d..18f6a36a5 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.9.0.3487' +!define VERSION '3.9.0.3488' diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index 8e2f3c044..0958f3a2b 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -2270,15 +2270,42 @@ namespace PascalABCCompiler.TreeConverter } else if ((fm = find_eq_method_in_list(fn, set_of_possible_functions)) != null) { + // fn и fm могут быть также common_method_node + // SSM 31/05/24 - добавляю в условия common_method_node. + // Это ошибка проектирования - много одинаковых свойств есть в compiled_function_node и common_method_node + // но они не наследуются от единого предка. В результате весь этот ужас надо повторять везде по проекту. + // Это надо перепроектировать!!! + polymorphic_state fn_ps = polymorphic_state.ps_common; + polymorphic_state fm_ps = polymorphic_state.ps_common; + if (fn is compiled_function_node) + fn_ps = (fn as compiled_function_node).polymorphic_state; + else if (fn is common_method_node) + fn_ps = (fn as common_method_node).polymorphic_state; + if (fm is compiled_function_node) + fm_ps = (fm as compiled_function_node).polymorphic_state; + else if (fm is common_method_node) + fm_ps = (fm as common_method_node).polymorphic_state; + + ITypeNode fn_ct = null; + ITypeNode fm_ct = null; + if (fn is compiled_function_node) + fn_ct = (fn as compiled_function_node).comperehensive_type; + else if (fn is common_method_node) + fn_ct = (fn as common_method_node).comperehensive_type; + if (fm is compiled_function_node) + fm_ct = (fm as compiled_function_node).comperehensive_type; + else if (fm is common_method_node) + fm_ct = (fm as common_method_node).comperehensive_type; + // 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)) + if (fn_ps == polymorphic_state.ps_static || fm_ps == 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 if (fn_ct != null && fm_ct != null + && ! (fn_ct.IsInterface || fm_ct.IsInterface)// для интерфейсов обрабатывается ниже + && fn_ct != fm_ct) { // пропускается такая же функция, но из предка! }