This commit is contained in:
Mikhalkovich Stanislav 2024-05-31 22:01:54 +03:00
parent 497566e325
commit bda964c3af
6 changed files with 36 additions and 9 deletions

View file

@ -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;

View file

@ -1,4 +1,4 @@
%MINOR%=9
%REVISION%=3487
%COREVERSION%=0
%REVISION%=3488
%MINOR%=9
%MAJOR%=3

Binary file not shown.

View file

@ -1 +1 @@
3.9.0.3487
3.9.0.3488

View file

@ -1 +1 @@
!define VERSION '3.9.0.3487'
!define VERSION '3.9.0.3488'

View file

@ -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)
{
// пропускается такая же функция, но из предка!
}