From 7f6030c25346e23627c45fdf203e4e9638b12a40 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 30 Jul 2023 12:07:06 +0200 Subject: [PATCH] #2906 --- NETGenerator/NETGenerator.cs | 2 +- TestSuite/generics70.pas | 16 ++++++++++++++++ TestSuite/generics71.pas | 13 +++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 TestSuite/generics70.pas create mode 100644 TestSuite/generics71.pas diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index 0264319fd..3c6cf4802 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -8058,7 +8058,7 @@ namespace PascalABCCompiler.NETGenerator (ctn2 != null && (ctn2.compiled_type == TypeFactory.ObjectType || ctn2.compiled_type == TypeFactory.EnumType) || tn2.IsInterface) && !(real_parameters[i] is SemanticTree.INullConstantNode) && (ctn3.is_value_type || ctn3.is_generic_parameter); if (!box_awaited && (ctn2 != null && ctn2.compiled_type == TypeFactory.ObjectType || tn2.IsInterface) && !(real_parameters[i] is SemanticTree.INullConstantNode) - && ctn4 != null && ctn4.is_value_type) + && ctn4 != null && (ctn4.is_value_type || ctn4.is_generic_parameter)) { box_awaited = true; use_stn4 = true; diff --git a/TestSuite/generics70.pas b/TestSuite/generics70.pas new file mode 100644 index 000000000..9281cf843 --- /dev/null +++ b/TestSuite/generics70.pas @@ -0,0 +1,16 @@ +var i: integer; + +procedure p0(o: object); +begin + i := integer(o); +end; + +procedure p1(a: T); +begin + p0(object(a)); +end; + +begin + p1(1); + assert(i = 1); +end. \ No newline at end of file diff --git a/TestSuite/generics71.pas b/TestSuite/generics71.pas new file mode 100644 index 000000000..1b3a0b641 --- /dev/null +++ b/TestSuite/generics71.pas @@ -0,0 +1,13 @@ +var InputList := new List; + +procedure GenerateTests(a: array of T); +begin + InputList.Add(object(a[0])); + Print(1); +end; + +begin + GenerateTests(Arr('a','b')); + Print(InputList); + assert(char(InputList[0]) = 'a'); +end. \ No newline at end of file