diff --git a/TestSuite/defaultparams5.pas b/TestSuite/defaultparams5.pas new file mode 100644 index 000000000..390961b5d --- /dev/null +++ b/TestSuite/defaultparams5.pas @@ -0,0 +1,9 @@ +var obj: object; +procedure p1(o: T := default(T)); +begin + obj := o; +end; +begin + p1&; + assert(BigInteger(obj) = default(BigInteger)); +end. diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index cd6e95807..96e044663 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -2649,6 +2649,14 @@ namespace PascalABCCompiler.TreeRealization par.default_value, 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) + { + (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; + } + cpar.intrenal_is_params = par.is_params; cpar.is_ret_value = par.is_ret_value; cpar.is_special_name = par.is_special_name;