@@ -230,7 +230,7 @@ private static void InitPyMembers()
230230 ( ) => PyStringType = IntPtr . Zero ) ;
231231 XDecref ( op ) ;
232232
233- op = PyUnicode_FromString ( "unicode" ) ;
233+ op = PyString_FromString ( "unicode" ) ;
234234 SetPyMemberTypeOf ( ref PyUnicodeType , op ,
235235 ( ) => PyUnicodeType = IntPtr . Zero ) ;
236236 XDecref ( op ) ;
@@ -1527,7 +1527,12 @@ internal static bool PyString_Check(IntPtr ob)
15271527 internal static IntPtr PyString_FromString ( string value )
15281528 {
15291529 fixed( char * ptr = value )
1530- return PyUnicode_FromKindAndData ( 2 , ( IntPtr ) ptr , value . Length ) ;
1530+ return Delegates . PyUnicode_DecodeUTF16 (
1531+ ( IntPtr ) ptr ,
1532+ value . Length * sizeof ( Char ) ,
1533+ IntPtr . Zero ,
1534+ IntPtr . Zero
1535+ ) . DangerousMoveToPointerOrNull ( ) ;
15311536 }
15321537
15331538
@@ -1553,16 +1558,6 @@ internal static long PyBytes_Size(IntPtr op)
15531558
15541559 private static IntPtr _PyBytes_Size ( IntPtr op ) => Delegates . _PyBytes_Size ( op ) ;
15551560
1556-
1557- internal static IntPtr PyUnicode_FromStringAndSize ( IntPtr value , long size )
1558- {
1559- return PyUnicode_FromStringAndSize ( value , new IntPtr ( size ) ) ;
1560- }
1561-
1562-
1563- private static IntPtr PyUnicode_FromStringAndSize ( IntPtr value , IntPtr size ) => Delegates . PyUnicode_FromStringAndSize ( value , size ) ;
1564-
1565-
15661561 internal static IntPtr PyUnicode_AsUTF8 ( IntPtr unicode ) => Delegates . PyUnicode_AsUTF8 ( unicode ) ;
15671562
15681563 internal static bool PyUnicode_Check ( IntPtr ob )
@@ -1576,22 +1571,6 @@ internal static bool PyUnicode_Check(IntPtr ob)
15761571
15771572 internal static IntPtr PyUnicode_FromEncodedObject ( IntPtr ob , IntPtr enc , IntPtr err ) => Delegates . PyUnicode_FromEncodedObject ( ob , enc , err ) ;
15781573
1579- internal static IntPtr PyUnicode_FromKindAndData ( int kind , IntPtr s , long size )
1580- {
1581- return PyUnicode_FromKindAndData ( kind , s , new IntPtr ( size ) ) ;
1582- }
1583-
1584-
1585- private static IntPtr PyUnicode_FromKindAndData ( int kind , IntPtr s , IntPtr size )
1586- => Delegates . PyUnicode_FromKindAndData ( kind , s , size ) ;
1587-
1588- internal static IntPtr PyUnicode_FromUnicode ( string s , long size )
1589- {
1590- fixed( char * ptr = s )
1591- return PyUnicode_FromKindAndData ( 2 , ( IntPtr ) ptr , size ) ;
1592- }
1593-
1594-
15951574 internal static int PyUnicode_GetMax ( ) => Delegates . PyUnicode_GetMax ( ) ;
15961575
15971576 internal static long PyUnicode_GetSize ( IntPtr ob )
@@ -1610,12 +1589,6 @@ internal static long PyUnicode_GetSize(IntPtr ob)
16101589
16111590 internal static IntPtr PyUnicode_FromOrdinal ( int c ) => Delegates . PyUnicode_FromOrdinal ( c ) ;
16121591
1613- internal static IntPtr PyUnicode_FromString ( string s )
1614- {
1615- return PyUnicode_FromUnicode ( s , s . Length ) ;
1616- }
1617-
1618-
16191592 internal static IntPtr PyUnicode_InternFromString ( string s )
16201593 {
16211594 using var ptr = new StrPtr ( s , Encoding . UTF8 ) ;
@@ -1646,11 +1619,12 @@ internal static string GetManagedString(IntPtr op)
16461619 if ( type == PyUnicodeType )
16471620 {
16481621 using var p = PyUnicode_AsUTF16String ( new BorrowedReference ( op ) ) ;
1649- int length = ( int ) PyUnicode_GetSize ( op ) ;
1650- char * codePoints = ( char * ) PyBytes_AsString ( p . DangerousGetAddress ( ) ) ;
1622+ var bytesPtr = p . DangerousGetAddress ( ) ;
1623+ int bytesLength = ( int ) Runtime . PyBytes_Size ( bytesPtr ) ;
1624+ char * codePoints = ( char * ) PyBytes_AsString ( bytesPtr ) ;
16511625 return new string ( codePoints ,
16521626 startIndex : 1 , // skip BOM
1653- length : length ) ;
1627+ length : bytesLength / 2 - 1 ) ; // utf16 - BOM
16541628 }
16551629
16561630 return null ;
@@ -2442,11 +2416,10 @@ static Delegates()
24422416 PyBytes_AsString = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_AsString ) , GetUnmanagedDll ( _PythonDll ) ) ;
24432417 PyBytes_FromString = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_FromString ) , GetUnmanagedDll ( _PythonDll ) ) ;
24442418 _PyBytes_Size = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( "PyBytes_Size" , GetUnmanagedDll ( _PythonDll ) ) ;
2445- PyUnicode_FromStringAndSize = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromStringAndSize ) , GetUnmanagedDll ( _PythonDll ) ) ;
24462419 PyUnicode_AsUTF8 = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUTF8 ) , GetUnmanagedDll ( _PythonDll ) ) ;
24472420 PyUnicode_FromObject = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromObject ) , GetUnmanagedDll ( _PythonDll ) ) ;
2421+ PyUnicode_DecodeUTF16 = ( delegate * unmanaged[ Cdecl] < IntPtr , nint , IntPtr , IntPtr , NewReference > ) GetFunctionByName ( nameof ( PyUnicode_DecodeUTF16 ) , GetUnmanagedDll ( _PythonDll ) ) ;
24482422 PyUnicode_FromEncodedObject = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromEncodedObject ) , GetUnmanagedDll ( _PythonDll ) ) ;
2449- PyUnicode_FromKindAndData = ( delegate * unmanaged[ Cdecl] < int , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromKindAndData ) , GetUnmanagedDll ( _PythonDll ) ) ;
24502423 PyUnicode_GetMax = ( delegate * unmanaged[ Cdecl] < int > ) GetFunctionByName ( nameof ( PyUnicode_GetMax ) , GetUnmanagedDll ( _PythonDll ) ) ;
24512424 _PyUnicode_GetSize = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( "PyUnicode_GetSize" , GetUnmanagedDll ( _PythonDll ) ) ;
24522425 PyUnicode_AsUnicode = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUnicode ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2738,11 +2711,10 @@ static Delegates()
27382711 internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > PyBytes_AsString { get ; }
27392712 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyBytes_FromString { get ; }
27402713 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyBytes_Size { get ; }
2741- internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyUnicode_FromStringAndSize { get ; }
27422714 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUTF8 { get ; }
27432715 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_FromObject { get ; }
27442716 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > PyUnicode_FromEncodedObject { get ; }
2745- internal static delegate * unmanaged[ Cdecl] < int , IntPtr , IntPtr , IntPtr > PyUnicode_FromKindAndData { get ; }
2717+ internal static delegate * unmanaged[ Cdecl] < IntPtr , nint , IntPtr , IntPtr , NewReference > PyUnicode_DecodeUTF16 { get ; }
27462718 internal static delegate * unmanaged[ Cdecl] < int > PyUnicode_GetMax { get ; }
27472719 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyUnicode_GetSize { get ; }
27482720 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUnicode { get ; }
0 commit comments