Add shallow copying of default_value fields in generic function instance creation (#3410)
This commit is contained in:
parent
8fec3042b9
commit
55aa0f6c9a
|
|
@ -334,6 +334,14 @@ namespace PascalABCCompiler.TreeRealization
|
||||||
return this.conversion_type;
|
return this.conversion_type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Возвращает поверхностную копию объекта
|
||||||
|
/// </summary>
|
||||||
|
public expression_node ShallowCopy()
|
||||||
|
{
|
||||||
|
return (expression_node)this.MemberwiseClone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
|
|
|
||||||
|
|
@ -2665,15 +2665,15 @@ namespace PascalABCCompiler.TreeRealization
|
||||||
generic_convertions.determine_type(par.type, _instance_params, true, orig_gen_params),
|
generic_convertions.determine_type(par.type, _instance_params, true, orig_gen_params),
|
||||||
par.parameter_type, this,
|
par.parameter_type, this,
|
||||||
(par.parameter_type == SemanticTree.parameter_type.var) ? concrete_parameter_type.cpt_var : concrete_parameter_type.cpt_none,
|
(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.inital_value = par.inital_value;
|
||||||
cpar.default_value = par.default_value;
|
|
||||||
if (cpar.default_value is default_operator_node)
|
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);
|
(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);
|
def_oper_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.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;
|
cpar.intrenal_is_params = par.is_params;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue