dadhi / dadhi/FastExpressionCompiler
Fix or support return ref value
- Dominant language
- C#
- Stars
- 1.4k
- Forks
- 94
- PR merge metrics
- No merged PRs in 30d
Description
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](https://github.com/user-attachments/files/15891456/ReturnRef.zip)
I tried to add a `EmitLoadIndirectlyByRef` after each `Demit(OpCodes.Call)`, which seemed worked.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.