dadhi / dadhi/FastExpressionCompiler

Fix or support return ref value

Offen
#415 4 Kommentare 0 Reaktionen 1 zugewiesene Person Beansprucht von @dadhi Auf GitHub ansehen
bug
Vorherrschende Sprache
C#
Sterne
1.4k
Forks
94
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.