This commit is contained in:
Бондарев Иван 2018-09-16 18:32:46 +02:00
parent ebe8dc1c1d
commit 4baf57d45f
2 changed files with 16 additions and 3 deletions

View file

@ -7353,11 +7353,13 @@ namespace PascalABCCompiler.NETGenerator
EmitArguments(parameters, real_parameters);
il.EmitCall(OpCodes.Call, mi, null);
EmitFreePinnedVariables();
if (tmp_dot == true)
if (tmp_dot)
{
if (mi.ReturnType.IsValueType && !NETGeneratorTools.IsPointer(mi.ReturnType))
if (value.namespace_function.return_value_type != null && value.namespace_function.return_value_type.is_value_type && !NETGeneratorTools.IsPointer(mi.ReturnType))
{
LocalBuilder lb = il.DeclareLocal(mi.ReturnType);
LocalBuilder lb = mi.ReturnType.IsGenericParameter ?
il.DeclareLocal(helper.GetTypeReference(value.namespace_function.return_value_type).tp) :
il.DeclareLocal(mi.ReturnType);
il.Emit(OpCodes.Stloc, lb);
il.Emit(OpCodes.Ldloca, lb);
}

11
TestSuite/generics23.pas Normal file
View file

@ -0,0 +1,11 @@
type
TSome = record
fX: integer := 1;
function Method() := fX;
end;
function CastTo<T>(reference: object) := T(reference);
begin
assert(CastTo&<TSome>(new TSome()).Method() = 1);
end.