Fix or support return ref value
quifi opened this issue · 4 comments
quifi commented
With C#, we can return a ref value:
ref Int32 ReturnByRef(ref Int32 x) => ref x;
System expression simply says it is not supported
System.ArgumentException : Expression of type 'System.Int32' cannot be used for return type 'System.Int32&'
LightExpression supports return ref value, but sometimes fails to unref returned ref value.
e.g.
Int32 f(ref Int32 x) => ReturnByRef(ref x);
emits
ldarg.1
call Int32& ReturnRef(Int32 ByRef)
(missing ldind.i4)
ret
See the "ReadReturnedRef" test case of attached source file.
ReturnRef.zip
I tried to add a EmitLoadIndirectlyByRef
after each Demit(OpCodes.Call)
, which seemed worked.
dadhi commented
@quifi I have checked your sample, but I don't see ldind.i4
in the decompiled IL code
So the current FEC output is fine, I think.
quifi commented
FEC
In order to reproduce the bug, I think 'Bar' should return int, instead of int&.
See modified sample code
With v4.2.1, this one seems not fixed yet.