Skip to content

Commit b3a5ac0

Browse files
committed
Add PyUnicode_EncodeLocale
1 parent 824103a commit b3a5ac0

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_unicode.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,19 @@ class TestPyUnicode(CPyExtTestCase):
946946
cmpfunc=unhandled_error_compare
947947
)
948948

949+
test_PyUnicode_EncodeLocale = CPyExtFunction(
950+
# We don't want to make tests dependent on the current locale, so just test that ascii works
951+
lambda args: args[0].encode('ascii', args[1]),
952+
lambda: (
953+
("hello", "strict"),
954+
(UnicodeSubclass("asdf"), "strict"),
955+
),
956+
resultspec="O",
957+
argspec='Os',
958+
arguments=["PyObject* str", "const char* errors"],
959+
cmpfunc=unhandled_error_compare
960+
)
961+
949962
test_PyUnicode_AsUnicodeEscapeString = CPyExtFunction(
950963
_reference_as_unicode_escape_string,
951964
lambda: (

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextUnicodeBuiltins.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
import com.oracle.graal.python.builtins.modules.BuiltinFunctions.ChrNode;
9090
import com.oracle.graal.python.builtins.modules.CodecsModuleBuiltins;
9191
import com.oracle.graal.python.builtins.modules.CodecsModuleBuiltins.CodecsEncodeNode;
92+
import com.oracle.graal.python.builtins.modules.CodecsTruffleModuleBuiltins;
9293
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApi5BuiltinNode;
9394
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApi6BuiltinNode;
9495
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiBinaryBuiltinNode;
@@ -954,6 +955,18 @@ static PBytes fromObject(Object s,
954955
}
955956
}
956957

958+
@CApiBuiltin(ret = PyObjectTransfer, args = {PyObject, ConstCharPtrAsTruffleString}, call = Direct)
959+
abstract static class PyUnicode_EncodeLocale extends CApiBinaryBuiltinNode {
960+
@Specialization
961+
static Object encode(Object s, Object errors,
962+
@Bind("this") Node inliningTarget,
963+
@Cached CastToTruffleStringNode cast,
964+
@Cached CodecsTruffleModuleBuiltins.GetEncodingNode getEncodingNode,
965+
@Cached CodecsModuleBuiltins.EncodeNode encodeNode) {
966+
return encodeNode.execute(null, cast.execute(inliningTarget, s), getEncodingNode.execute(null), errors);
967+
}
968+
}
969+
957970
@CApiBuiltin(ret = PyObjectTransfer, args = {CONST_WCHAR_PTR, Py_ssize_t}, call = Direct)
958971
abstract static class PyUnicode_FromWideChar extends CApiBinaryBuiltinNode {
959972
@Specialization

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CApiFunction.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,6 @@ public final class CApiFunction {
937937
@CApiBuiltin(name = "PyUnicode_DecodeUTF7", ret = PyObject, args = {ConstCharPtrAsTruffleString, Py_ssize_t, ConstCharPtrAsTruffleString}, call = NotImplemented)
938938
@CApiBuiltin(name = "PyUnicode_DecodeUTF7Stateful", ret = PyObject, args = {ConstCharPtrAsTruffleString, Py_ssize_t, ConstCharPtrAsTruffleString, PY_SSIZE_T_PTR}, call = NotImplemented)
939939
@CApiBuiltin(name = "PyUnicode_DecodeUnicodeEscape", ret = PyObject, args = {ConstCharPtrAsTruffleString, Py_ssize_t, ConstCharPtrAsTruffleString}, call = NotImplemented)
940-
@CApiBuiltin(name = "PyUnicode_EncodeLocale", ret = PyObject, args = {PyObject, ConstCharPtrAsTruffleString}, call = NotImplemented)
941940
@CApiBuiltin(name = "PyUnicode_FSDecoder", ret = Int, args = {PyObject, Pointer}, call = NotImplemented)
942941
@CApiBuiltin(name = "PyUnicode_Fill", ret = Py_ssize_t, args = {PyObject, Py_ssize_t, Py_ssize_t, PY_UCS4}, call = NotImplemented)
943942
@CApiBuiltin(name = "PyUnicode_GetDefaultEncoding", ret = ConstCharPtrAsTruffleString, args = {}, call = NotImplemented)

0 commit comments

Comments
 (0)