Skip to content

Commit 7529158

Browse files
committed
Implement HPy context function ctx_Unicode_DecodeFSDefault
1 parent ea736fa commit 7529158

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

graalpython/com.oracle.graal.python.cext/hpy/hpy.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,6 +1164,11 @@ HPyAPI_STORAGE HPy _HPy_IMPL_NAME(Unicode_FromWideChar)(HPyContext *ctx, const w
11641164
return UPCALL_HPY(ctx_Unicode_FromWideChar, ctx, w, size);
11651165
}
11661166

1167+
HPyAPI_STORAGE HPy _HPy_IMPL_NAME(Unicode_DecodeFSDefault)(HPyContext *ctx, const char *v)
1168+
{
1169+
return UPCALL_HPY(ctx_Unicode_DecodeFSDefault, ctx, v);
1170+
}
1171+
11671172
HPyAPI_STORAGE int _HPy_IMPL_NAME(List_Check)(HPyContext *ctx, HPy h)
11681173
{
11691174
return (int) UPCALL_I32(ctx_List_Check, ctx, h);
@@ -1467,6 +1472,7 @@ HPyContext *graal_hpy_context_to_native(HPyContext *managed_context) {
14671472
HPY_CTX_UPCALL(ctx_Unicode_AsUTF8String);
14681473
HPY_CTX_UPCALL(ctx_Unicode_AsUTF8AndSize);
14691474
HPY_CTX_UPCALL(ctx_Unicode_FromWideChar);
1475+
HPY_CTX_UPCALL(ctx_Unicode_DecodeFSDefault);
14701476
HPY_CTX_UPCALL(ctx_List_Check);
14711477
HPY_CTX_UPCALL(ctx_List_New);
14721478
HPY_CTX_UPCALL(ctx_List_Append);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SysModuleBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ private PException raiseCallStackDepth() {
533533
public abstract static class GetFileSystemEncodingNode extends PythonBuiltinNode {
534534
@Specialization
535535
@TruffleBoundary
536-
protected static String getFileSystemEncoding() {
536+
public static String getFileSystemEncoding() {
537537
String javaEncoding = System.getProperty("file.encoding");
538538
String pythonEncoding = CharsetMapping.getPythonEncodingNameFromJavaName(javaEncoding);
539539
// Fallback on returning the property value if no mapping found

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyContext.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@
196196
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyUnaryArithmetic;
197197
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyUnicodeAsUTF8AndSize;
198198
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyUnicodeAsUTF8String;
199+
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyUnicodeDecodeFSDefault;
199200
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyUnicodeFromString;
200201
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyUnicodeFromWchar;
201202
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.ReturnType;
@@ -562,6 +563,7 @@ enum HPyContextMember {
562563
CTX_UNICODE_ASUTF8STRING("ctx_Unicode_AsUTF8String"),
563564
CTX_UNICODE_ASUTF8ANDSIZE("ctx_Unicode_AsUTF8AndSize"),
564565
CTX_UNICODE_FROMWIDECHAR("ctx_Unicode_FromWideChar"),
566+
CTX_UNICODE_DECODEFSDEFAULT("ctx_Unicode_DecodeFSDefault"),
565567
CTX_LIST_NEW("ctx_List_New"),
566568
CTX_LIST_APPEND("ctx_List_Append"),
567569
CTX_DICT_CHECK("ctx_Dict_Check"),
@@ -1269,6 +1271,7 @@ private static Object[] createMembers(PythonContext context, String name) {
12691271
members[HPyContextMember.CTX_UNICODE_ASUTF8ANDSIZE.ordinal()] = new GraalHPyUnicodeAsUTF8AndSize();
12701272
members[HPyContextMember.CTX_UNICODE_FROMSTRING.ordinal()] = new GraalHPyUnicodeFromString();
12711273
members[HPyContextMember.CTX_UNICODE_FROMWIDECHAR.ordinal()] = new GraalHPyUnicodeFromWchar();
1274+
members[HPyContextMember.CTX_UNICODE_DECODEFSDEFAULT.ordinal()] = new GraalHPyUnicodeDecodeFSDefault();
12721275
members[HPyContextMember.CTX_TYPE_FROM_SPEC.ordinal()] = new GraalHPyTypeFromSpec();
12731276
members[HPyContextMember.CTX_GETATTR.ordinal()] = new GraalHPyGetAttr(OBJECT);
12741277
members[HPyContextMember.CTX_GETATTR_S.ordinal()] = new GraalHPyGetAttr(CHAR_PTR);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyContextFunctions.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import com.oracle.graal.python.builtins.Python3Core;
6868
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
6969
import com.oracle.graal.python.builtins.modules.CodecsModuleBuiltins;
70+
import com.oracle.graal.python.builtins.modules.SysModuleBuiltins.GetFileSystemEncodingNode;
7071
import com.oracle.graal.python.builtins.objects.PNone;
7172
import com.oracle.graal.python.builtins.objects.PythonAbstractObject.PInteropGetAttributeNode;
7273
import com.oracle.graal.python.builtins.objects.PythonAbstractObject.PInteropSubscriptAssignNode;
@@ -1145,6 +1146,28 @@ Object execute(Object[] arguments,
11451146
}
11461147
}
11471148

1149+
@ExportLibrary(InteropLibrary.class)
1150+
public static final class GraalHPyUnicodeDecodeFSDefault extends GraalHPyContextFunction {
1151+
1152+
@ExportMessage
1153+
Object execute(Object[] arguments,
1154+
@Cached HPyAsContextNode asContextNode,
1155+
@Cached PCallHPyFunction callFromStringNode,
1156+
@Cached HPyAsHandleNode asHandleNode,
1157+
@Exclusive @Cached GilNode gil) throws ArityException {
1158+
boolean mustRelease = gil.acquire();
1159+
try {
1160+
checkArity(arguments, 2);
1161+
GraalHPyContext context = asContextNode.execute(arguments[0]);
1162+
String fileSystemEncoding = GetFileSystemEncodingNode.getFileSystemEncoding();
1163+
Object result = callFromStringNode.call(context, GraalHPyNativeSymbol.POLYGLOT_FROM_STRING, arguments[1], fileSystemEncoding);
1164+
return asHandleNode.execute(context, result);
1165+
} finally {
1166+
gil.release(mustRelease);
1167+
}
1168+
}
1169+
}
1170+
11481171
@ExportLibrary(InteropLibrary.class)
11491172
public static final class GraalHPyAsPyObject extends GraalHPyContextFunction {
11501173

0 commit comments

Comments
 (0)