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 f65cae790..13b78889d 100644 Binary files a/Localization/DefaultLang.resources and b/Localization/DefaultLang.resources differ 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) { // пропускается такая же функция, но из предка! }