bug fix #1309
This commit is contained in:
parent
4ca6e048db
commit
d56b2b1009
|
|
@ -6984,7 +6984,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
}
|
||||
|
||||
EmitFreePinnedVariables();
|
||||
if (tmp_dot == true)
|
||||
if (tmp_dot)
|
||||
{
|
||||
//MethodInfo mi = value.compiled_method.method_info;
|
||||
if ((mi.ReturnType.IsValueType || mi.ReturnType.IsGenericParameter) && !NETGeneratorTools.IsPointer(mi.ReturnType))
|
||||
|
|
@ -7118,7 +7118,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
//Для правильной работы шаблонов поменял условие (ssyy, 15.05.2009)
|
||||
if ((value.method.return_value_type != null && value.method.return_value_type.is_value_type /*|| value.method.return_value_type != null && value.method.return_value_type.is_generic_parameter*/) && !NETGeneratorTools.IsPointer(mi.ReturnType))
|
||||
{
|
||||
LocalBuilder lb = mi.ReturnType.IsGenericParameter ?
|
||||
LocalBuilder lb = (mi.ReturnType.IsGenericType || mi.ReturnType.IsGenericParameter) ?
|
||||
il.DeclareLocal(helper.GetTypeReference(value.method.return_value_type).tp) :
|
||||
il.DeclareLocal(mi.ReturnType);
|
||||
il.Emit(OpCodes.Stloc, lb);
|
||||
|
|
@ -7473,7 +7473,7 @@ namespace PascalABCCompiler.NETGenerator
|
|||
{
|
||||
if (value.namespace_function.return_value_type != null && value.namespace_function.return_value_type.is_value_type && !NETGeneratorTools.IsPointer(mi.ReturnType))
|
||||
{
|
||||
LocalBuilder lb = mi.ReturnType.IsGenericParameter ?
|
||||
LocalBuilder lb = (mi.ReturnType.IsGenericType || mi.ReturnType.IsGenericParameter) ?
|
||||
il.DeclareLocal(helper.GetTypeReference(value.namespace_function.return_value_type).tp) :
|
||||
il.DeclareLocal(mi.ReturnType);
|
||||
il.Emit(OpCodes.Stloc, lb);
|
||||
|
|
|
|||
27
TestSuite/generics29.pas
Normal file
27
TestSuite/generics29.pas
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
function DQNToNullable<T>(v: T): System.Nullable<T>; where T: record;
|
||||
begin
|
||||
Result := new System.Nullable<T>(v);
|
||||
end;
|
||||
|
||||
type TClass = class
|
||||
function DQNToNullable<T>(v: T): System.Nullable<T>; where T: record;
|
||||
begin
|
||||
Result := new System.Nullable<T>(v);
|
||||
end;
|
||||
end;
|
||||
|
||||
type TClass2 = class
|
||||
static function DQNToNullable<T>(v: T): System.Nullable<T>; where T: record;
|
||||
begin
|
||||
Result := new System.Nullable<T>(v);
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
var x := DQNToNullable(2);
|
||||
assert(x.Value = 2);
|
||||
assert(DQNToNullable(2).Value = 2);
|
||||
var o := new TClass;;
|
||||
assert(o.DQNToNullable(3).Value = 3);
|
||||
assert(TClass2.DQNToNullable(3).Value = 3);
|
||||
end.
|
||||
Loading…
Reference in a new issue