IL2CPU icon indicating copy to clipboard operation
IL2CPU copied to clipboard

[Discussion] Using ldftn and calli to call X# methods from managed code

Open jp2masa opened this issue 6 years ago • 1 comments

I think it would be interesting to call X# methods from IL (C#) using ldftn/calli. The assembler plug would be replaced with managed code, which means better portability.

Example

public static void SendNumber(int number)
{
	ldarg.0
    ldftn
	calli
}

[XSharpMethod("DebugStub_SendSimpleNumber")]
private static void DoSendNumber(int number);

We just need to handle the attribute in ldftn, where we just emit push label.

Possible issues

  • In the debug stub assembler plugs, we currently ifdef the calls, because the debug stub may be disabled (i.e. it's not emitted), so we need to handle that somehow.
  • Calling conventions.

jp2masa avatar Oct 30 '18 13:10 jp2masa

I think this would be a good idea to make things simpler. You could - for example - write the opcoded Execute part in "real" X# too using this method?

A clarification I need only to write this:

[XSharpMethod("DebugStub_SendSimpleNumber")]
private static void DoSendNumber(int number);

the stub method in C# will be generated automatically by IL2CPU?

fanoI avatar Feb 19 '19 10:02 fanoI