dadhi / dadhi/FastExpressionCompiler

Fix or support return ref value

Open
#415 4 comments 0 reactions 1 assignee Claimed by @dadhi View on GitHub
bug
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.