Add shallow copying of default_value fields in generic function instance creation (#3410)

This commit is contained in:
Александр Земляк 2026-04-09 09:46:58 +03:00 committed by GitHub
parent 8fec3042b9
commit 55aa0f6c9a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 5 deletions

View file

@ -334,6 +334,14 @@ namespace PascalABCCompiler.TreeRealization
return this.conversion_type;
}
}
/// <summary>
/// Возвращает поверхностную копию объекта
/// </summary>
public expression_node ShallowCopy()
{
return (expression_node)this.MemberwiseClone();
}
}
[Serializable]

View file

@ -2665,15 +2665,15 @@ namespace PascalABCCompiler.TreeRealization
generic_convertions.determine_type(par.type, _instance_params, true, orig_gen_params),
par.parameter_type, this,
(par.parameter_type == SemanticTree.parameter_type.var) ? concrete_parameter_type.cpt_var : concrete_parameter_type.cpt_none,
par.default_value, null);
par.default_value?.ShallowCopy(), null);
cpar.inital_value = par.inital_value;
cpar.default_value = par.default_value;
if (cpar.default_value is default_operator_node)
(cpar.default_value as default_operator_node).type = generic_convertions.determine_type(cpar.default_value.type, _instance_params, true, orig_gen_params);
else if (cpar.default_value is default_operator_node_as_constant)
else if (cpar.default_value is default_operator_node_as_constant def_oper_as_constant)
{
(cpar.default_value as default_operator_node_as_constant).type = generic_convertions.determine_type(cpar.default_value.type, _instance_params, true, orig_gen_params);
(cpar.default_value as default_operator_node_as_constant).default_operator.type = (cpar.default_value as default_operator_node_as_constant).type;
def_oper_as_constant.type = generic_convertions.determine_type(cpar.default_value.type, _instance_params, true, orig_gen_params);
def_oper_as_constant.default_operator = (default_operator_node)def_oper_as_constant.default_operator.ShallowCopy(); // ShallowCopy здесь и выше, чтобы не портить исходный тип шаблона EVA 26.03.2026
def_oper_as_constant.default_operator.type = def_oper_as_constant.type;
}
cpar.intrenal_is_params = par.is_params;