-
Notifications
You must be signed in to change notification settings - Fork 5k
[LibraryImportGenerator] Reduce unnecessary casting/locals in pinning path #69804
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Tagging subscribers to this area: @dotnet/interop-contrib Issue DetailsContributes to #69608: Style item (6) UTF-16 [LibraryImport("lib", StringMarshalling = StringMarshalling.Utf16)]
internal static partial void ManyStrings(string s1, string s2, string s3, string s4, string s5);
// Generated
internal static partial void ManyStrings(string s1, string s2, string s3, string s4, string s5)
{
// Pin - Pin data in preparation for calling the P/Invoke.
fixed (void* __s1_native = s1)
fixed (void* __s2_native = s2)
fixed (void* __s3_native = s3)
fixed (void* __s4_native = s4)
fixed (void* __s5_native = s5)
{
__PInvoke(__s1_native, __s2_native, __s3_native, __s4_native, __s5_native);
}
// Local P/Invoke
[System.Runtime.InteropServices.DllImportAttribute("lib", EntryPoint = "ManyStrings", ExactSpelling = true)]
static extern unsafe void __PInvoke(void* s1, void* s2, void* s3, void* s4, void* s5);
} User-defined: runtime/src/libraries/System.Runtime.InteropServices/tests/TestAssets/SharedTypes/NonBlittable.cs Lines 98 to 104 in d143e18
[LibraryImport("lib")]
public static partial void UserDefinedPinnable(SharedTypes.IntWrapper i1, SharedTypes.IntWrapper i2);
// Generated
public static partial void UserDefinedPinnable(global::SharedTypes.IntWrapper i1, global::SharedTypes.IntWrapper i2)
{
// Pin - Pin data in preparation for calling the P/Invoke.
fixed (void* __i1_native = i1)
fixed (void* __i2_native = i2)
{
__PInvoke((int*)__i1_native, (int*)__i2_native);
}
// Local P/Invoke
[System.Runtime.InteropServices.DllImportAttribute("lib", EntryPoint = "UserDefinedPinnable", ExactSpelling = true)]
static extern unsafe void __PInvoke(int* i1, int* i2);
}
|
Do we have such control over indentation which would make it (conveniently) generate stacked // Pin - Pin data in preparation for calling the P/Invoke.
fixed (void* __s1_native = s1)
fixed (void* __s2_native = s2)
fixed (void* __s3_native = s3)
fixed (void* __s4_native = s4)
fixed (void* __s5_native = s5)
{
__PInvoke(__s1_native, __s2_native, __s3_native, __s4_native, __s5_native);
} |
...e.InteropServices/gen/Microsoft.Interop.SourceGeneration/Marshalling/MarshallingGenerator.cs
Show resolved
Hide resolved
We are relying on Roslyn's |
Failures are #69792. |
Contributes to #69608: Style item (6)
UTF-16
string
:User-defined:
runtime/src/libraries/System.Runtime.InteropServices/tests/TestAssets/SharedTypes/NonBlittable.cs
Lines 98 to 104 in d143e18