Skip to content

Fix or support return ref value #415

@quifi

Description

@quifi

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.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions