bug fix #1160
This commit is contained in:
parent
ebe8dc1c1d
commit
4baf57d45f
|
|
@ -7353,11 +7353,13 @@ namespace PascalABCCompiler.NETGenerator
|
||||||
EmitArguments(parameters, real_parameters);
|
EmitArguments(parameters, real_parameters);
|
||||||
il.EmitCall(OpCodes.Call, mi, null);
|
il.EmitCall(OpCodes.Call, mi, null);
|
||||||
EmitFreePinnedVariables();
|
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.Stloc, lb);
|
||||||
il.Emit(OpCodes.Ldloca, lb);
|
il.Emit(OpCodes.Ldloca, lb);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
11
TestSuite/generics23.pas
Normal file
11
TestSuite/generics23.pas
Normal 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.
|
||||||
Loading…
Reference in a new issue