- Notifications
You must be signed in to change notification settings - Fork749
Add a failing test for Unicode conversion#1467
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Changes fromall commits
da051a9
1b6c6c0
4674b5c
1629116
df5ebc2
d084b2e
f061d28
49ccc1e
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -230,7 +230,7 @@ private static void InitPyMembers() | ||
() => PyStringType = IntPtr.Zero); | ||
XDecref(op); | ||
op =PyString_FromString("unicode"); | ||
SetPyMemberTypeOf(ref PyUnicodeType, op, | ||
() => PyUnicodeType = IntPtr.Zero); | ||
XDecref(op); | ||
@@ -1527,7 +1527,12 @@ internal static bool PyString_Check(IntPtr ob) | ||
internal static IntPtr PyString_FromString(string value) | ||
{ | ||
fixed(char* ptr = value) | ||
return Delegates.PyUnicode_DecodeUTF16( | ||
(IntPtr)ptr, | ||
value.Length * sizeof(Char), | ||
IntPtr.Zero, | ||
IntPtr.Zero | ||
).DangerousMoveToPointerOrNull(); | ||
} | ||
@@ -1553,16 +1558,6 @@ internal static long PyBytes_Size(IntPtr op) | ||
private static IntPtr _PyBytes_Size(IntPtr op) => Delegates._PyBytes_Size(op); | ||
internal static IntPtr PyUnicode_AsUTF8(IntPtr unicode) => Delegates.PyUnicode_AsUTF8(unicode); | ||
internal static bool PyUnicode_Check(IntPtr ob) | ||
@@ -1576,22 +1571,6 @@ internal static bool PyUnicode_Check(IntPtr ob) | ||
internal static IntPtr PyUnicode_FromEncodedObject(IntPtr ob, IntPtr enc, IntPtr err) => Delegates.PyUnicode_FromEncodedObject(ob, enc, err); | ||
internal static int PyUnicode_GetMax() => Delegates.PyUnicode_GetMax(); | ||
internal static long PyUnicode_GetSize(IntPtr ob) | ||
@@ -1610,12 +1589,6 @@ internal static long PyUnicode_GetSize(IntPtr ob) | ||
internal static IntPtr PyUnicode_FromOrdinal(int c) => Delegates.PyUnicode_FromOrdinal(c); | ||
internal static IntPtr PyUnicode_InternFromString(string s) | ||
{ | ||
using var ptr = new StrPtr(s, Encoding.UTF8); | ||
@@ -1646,11 +1619,12 @@ internal static string GetManagedString(IntPtr op) | ||
if (type == PyUnicodeType) | ||
{ | ||
using var p = PyUnicode_AsUTF16String(new BorrowedReference(op)); | ||
var bytesPtr = p.DangerousGetAddress(); | ||
int bytesLength = (int)Runtime.PyBytes_Size(bytesPtr); | ||
char* codePoints = (char*)PyBytes_AsString(bytesPtr); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. NIT: better add overload for | ||
return new string(codePoints, | ||
startIndex: 1, // skip BOM | ||
length:bytesLength/2-1); // utf16 - BOM | ||
} | ||
return null; | ||
@@ -2442,11 +2416,10 @@ static Delegates() | ||
PyBytes_AsString = (delegate* unmanaged[Cdecl]<BorrowedReference, IntPtr>)GetFunctionByName(nameof(PyBytes_AsString), GetUnmanagedDll(_PythonDll)); | ||
PyBytes_FromString = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr>)GetFunctionByName(nameof(PyBytes_FromString), GetUnmanagedDll(_PythonDll)); | ||
_PyBytes_Size = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr>)GetFunctionByName("PyBytes_Size", GetUnmanagedDll(_PythonDll)); | ||
PyUnicode_AsUTF8 = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr>)GetFunctionByName(nameof(PyUnicode_AsUTF8), GetUnmanagedDll(_PythonDll)); | ||
PyUnicode_FromObject = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr>)GetFunctionByName(nameof(PyUnicode_FromObject), GetUnmanagedDll(_PythonDll)); | ||
PyUnicode_DecodeUTF16 = (delegate* unmanaged[Cdecl]<IntPtr, nint, IntPtr, IntPtr, NewReference>)GetFunctionByName(nameof(PyUnicode_DecodeUTF16), GetUnmanagedDll(_PythonDll)); | ||
PyUnicode_FromEncodedObject = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyUnicode_FromEncodedObject), GetUnmanagedDll(_PythonDll)); | ||
PyUnicode_GetMax = (delegate* unmanaged[Cdecl]<int>)GetFunctionByName(nameof(PyUnicode_GetMax), GetUnmanagedDll(_PythonDll)); | ||
_PyUnicode_GetSize = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr>)GetFunctionByName("PyUnicode_GetSize", GetUnmanagedDll(_PythonDll)); | ||
PyUnicode_AsUnicode = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr>)GetFunctionByName(nameof(PyUnicode_AsUnicode), GetUnmanagedDll(_PythonDll)); | ||
@@ -2738,11 +2711,10 @@ static Delegates() | ||
internal static delegate* unmanaged[Cdecl]<BorrowedReference, IntPtr> PyBytes_AsString { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr> PyBytes_FromString { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr> _PyBytes_Size { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr> PyUnicode_AsUTF8 { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr> PyUnicode_FromObject { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, IntPtr> PyUnicode_FromEncodedObject { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, nint, IntPtr, IntPtr, NewReference> PyUnicode_DecodeUTF16 { get; } | ||
internal static delegate* unmanaged[Cdecl]<int> PyUnicode_GetMax { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr> _PyUnicode_GetSize { get; } | ||
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr> PyUnicode_AsUnicode { get; } | ||