Skip to content

Commit 652b2b3

Browse files
committed
add PyUnicode_DecodeLatin1 and PyUnicode_EncodeFSDefault apis
1 parent 613909d commit 652b2b3

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

graalpython/com.oracle.graal.python.cext/src/unicodeobject.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,11 @@ PyObject* PyUnicode_FromString(const char* o) {
227227
return to_sulong(polyglot_from_string(o, SRC_CS));
228228
}
229229

230+
UPCALL_ID(PyUnicode_EncodeFSDefault);
231+
PyObject* PyUnicode_EncodeFSDefault(PyObject* o) {
232+
return UPCALL_CEXT_O(_jls_PyUnicode_EncodeFSDefault, native_to_java(o));
233+
}
234+
230235
PyObject* PyUnicode_DecodeFSDefault(const char* o) {
231236
// TODO: this implementation does not honor Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
232237
return to_sulong(polyglot_from_string(o, "utf-8"));
@@ -584,6 +589,10 @@ PyObject * PyUnicode_DecodeASCII(const char *s, Py_ssize_t size, const char *err
584589
return PyUnicode_Decode(s, size, "ascii", errors);
585590
}
586591

592+
PyObject * PyUnicode_DecodeLatin(const char *s, Py_ssize_t size, const char *errors) {
593+
return PyUnicode_Decode(s, size, "latin1", errors);
594+
}
595+
587596
UPCALL_ID(PyUnicode_Tailmatch);
588597
Py_ssize_t PyUnicode_Tailmatch(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction) {
589598
return UPCALL_CEXT_L(_jls_PyUnicode_Tailmatch, native_to_java(str), native_to_java(substr), start, end, direction);

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@
6868
import com.oracle.graal.python.builtins.objects.PNone;
6969
import com.oracle.graal.python.builtins.objects.bytes.BytesBuiltins;
7070
import com.oracle.graal.python.builtins.objects.bytes.BytesBuiltins.DecodeNode;
71+
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
7172
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
7273
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes;
7374
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PRaiseNativeNode;
7475
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.ToNewRefNode;
7576
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.TransformExceptionToNativeNode;
77+
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.EncodeNativeStringNode;
7678
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.GetByteArrayNode;
7779
import com.oracle.graal.python.builtins.objects.ints.PInt;
7880
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
@@ -109,6 +111,7 @@
109111
import com.oracle.graal.python.util.OverflowException;
110112
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
111113
import com.oracle.truffle.api.dsl.Cached;
114+
import com.oracle.truffle.api.dsl.Cached.Shared;
112115
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
113116
import com.oracle.truffle.api.dsl.NodeFactory;
114117
import com.oracle.truffle.api.dsl.Specialization;
@@ -815,4 +818,23 @@ Object doDecode(VirtualFrame frame, PMemoryView mv, String encoding, String erro
815818
}
816819
}
817820
}
821+
822+
@Builtin(name = "PyUnicode_EncodeFSDefault", minNumOfPositionalArgs = 1)
823+
@GenerateNodeFactory
824+
abstract static class PyUnicodeEncodeFSDefaultNode extends PythonBuiltinNode {
825+
@Specialization
826+
PBytes fromObject(String s,
827+
@Shared("encode") @Cached EncodeNativeStringNode encode) {
828+
byte[] array = encode.execute(StandardCharsets.UTF_8, s, "replace");
829+
return factory().createBytes(array);
830+
}
831+
832+
@Specialization
833+
PBytes fromObject(Object s,
834+
@Cached CastToJavaStringNode castStr,
835+
@Shared("encode") @Cached EncodeNativeStringNode encode) {
836+
byte[] array = encode.execute(StandardCharsets.UTF_8, castStr.execute(s), "replace");
837+
return factory().createBytes(array);
838+
}
839+
}
818840
}

0 commit comments

Comments
 (0)