Generally, we only pin for cases where we directly pass down the value. That’s why the Pin stage only accepts FixedStatementSyntaxes
I’d honestly recommend keeping the heap allocation or at most adding a stackalloc optimization with the native marshalling APIs
If that’s not high enough perf, then you’d have to file an issue or fork the generator
By @jkoritzinsky in private discord messages.
i'm thinking about implementing IMarshallingGenerator that will output:
private static void ulConfigSetCachePath(IntPtr config, in string cache_path)
{
unsafe
{
global::UltralightNet.ULString __cache_path_gen = default;
global::UltralightNet.ULString* __cache_path_gen_native = default;
//
// Pin
//
fixed(char* __cache_path_gen_native_pinned = cache_path)
{
__cache_path_gen = new ULString() { data = (ushort*)__cache_path_gen_native_pinned, length = (nuint)cache_path.Length };
__cache_path_gen_native = &__cache_path_gen;
//
// Invoke
//
ulConfigSetCachePath__PInvoke__(config, __cache_path_gen_native);
}
}
}
[System.Runtime.InteropServices.DllImportAttribute("Ultralight", EntryPoint = "ulConfigSetCachePath")]
extern private static unsafe void ulConfigSetCachePath__PInvoke__(global::System.IntPtr config, global::UltralightNet.ULString* cache_path);
So it isn't possible yet?
By @jkoritzinsky in private discord messages.
i'm thinking about implementing IMarshallingGenerator that will output:
So it isn't possible yet?