Skip to content

Commit 167f25e

Browse files
committed
Move POL.asPath to a node
1 parent b6cd4e8 commit 167f25e

File tree

12 files changed

+263
-126
lines changed

12 files changed

+263
-126
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@
119119
import com.oracle.graal.python.builtins.objects.module.PythonModule;
120120
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
121121
import com.oracle.graal.python.builtins.objects.object.PythonObject;
122-
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
123122
import com.oracle.graal.python.builtins.objects.str.PString;
124123
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
125124
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
@@ -140,6 +139,7 @@
140139
import com.oracle.graal.python.lib.PyObjectSizeNode;
141140
import com.oracle.graal.python.lib.PyObjectStrAsJavaStringNode;
142141
import com.oracle.graal.python.lib.PyObjectStrAsObjectNode;
142+
import com.oracle.graal.python.lib.PyUnicodeFSDecoderNode;
143143
import com.oracle.graal.python.nodes.BuiltinNames;
144144
import com.oracle.graal.python.nodes.ErrorMessages;
145145
import com.oracle.graal.python.nodes.GraalPythonTranslationErrorNode;
@@ -839,7 +839,7 @@ PCode generic(VirtualFrame frame, Object wSource, Object wFilename, Object wMode
839839
@Cached CodecsModuleBuiltins.HandleDecodingErrorNode handleDecodingErrorNode,
840840
@Cached PyObjectStrAsJavaStringNode asStrNode,
841841
@CachedLibrary("wSource") InteropLibrary interopLib,
842-
@CachedLibrary(limit = "4") PythonObjectLibrary lib,
842+
@Cached PyUnicodeFSDecoderNode asPath,
843843
@Cached WarnNode warnNode) {
844844
if (wSource instanceof PCode) {
845845
return (PCode) wSource;
@@ -857,7 +857,7 @@ PCode generic(VirtualFrame frame, Object wSource, Object wFilename, Object wMode
857857
bufferLib.release(filenameBuffer);
858858
}
859859
} else {
860-
filename = lib.asPathWithState(wFilename, PArguments.getThreadState(frame));
860+
filename = asPath.execute(frame, wFilename);
861861
}
862862
String mode;
863863
try {

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@
6363
import com.oracle.graal.python.annotations.ArgumentClinic;
6464
import com.oracle.graal.python.builtins.Builtin;
6565
import com.oracle.graal.python.builtins.CoreFunctions;
66+
import com.oracle.graal.python.builtins.Python3Core;
6667
import com.oracle.graal.python.builtins.PythonBuiltins;
6768
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum;
6869
import com.oracle.graal.python.builtins.objects.module.PythonModule;
69-
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
7070
import com.oracle.graal.python.builtins.objects.ssl.ALPNHelper;
7171
import com.oracle.graal.python.builtins.objects.ssl.CertUtils;
7272
import com.oracle.graal.python.builtins.objects.ssl.SSLCipher;
@@ -76,23 +76,23 @@
7676
import com.oracle.graal.python.builtins.objects.ssl.SSLOptions;
7777
import com.oracle.graal.python.builtins.objects.ssl.SSLProtocol;
7878
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
79+
import com.oracle.graal.python.lib.PyUnicodeFSDecoderNode;
7980
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
8081
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
8182
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
8283
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryClinicBuiltinNode;
8384
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
8485
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
85-
import com.oracle.graal.python.builtins.Python3Core;
8686
import com.oracle.graal.python.runtime.exception.PException;
8787
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
8888
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
8989
import com.oracle.truffle.api.TruffleFile;
9090
import com.oracle.truffle.api.TruffleLogger;
91+
import com.oracle.truffle.api.dsl.Cached;
9192
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
9293
import com.oracle.truffle.api.dsl.NodeFactory;
9394
import com.oracle.truffle.api.dsl.Specialization;
9495
import com.oracle.truffle.api.frame.VirtualFrame;
95-
import com.oracle.truffle.api.library.CachedLibrary;
9696

9797
@CoreFunctions(defineModule = "_ssl")
9898
public class SSLModuleBuiltins extends PythonBuiltins {
@@ -358,10 +358,10 @@ Object getDefaultPaths() {
358358
@Builtin(name = "_test_decode_cert", minNumOfPositionalArgs = 1, numOfPositionalOnlyArgs = 1, parameterNames = {"path"})
359359
@GenerateNodeFactory
360360
abstract static class DecodeCertNode extends PythonUnaryBuiltinNode {
361-
@Specialization(limit = "2")
361+
@Specialization
362362
Object decode(VirtualFrame frame, Object path,
363-
@CachedLibrary("path") PythonObjectLibrary lib) {
364-
return decode(toTruffleFile(frame, lib, path));
363+
@Cached PyUnicodeFSDecoderNode asPath) {
364+
return decode(toTruffleFile(frame, asPath, path));
365365
}
366366

367367
@TruffleBoundary
@@ -387,10 +387,10 @@ private Object decode(TruffleFile file) throws PException {
387387
}
388388
}
389389

390-
private TruffleFile toTruffleFile(VirtualFrame frame, PythonObjectLibrary lib, Object fileObject) throws PException {
390+
private TruffleFile toTruffleFile(VirtualFrame frame, PyUnicodeFSDecoderNode asPath, Object fileObject) throws PException {
391391
TruffleFile file;
392392
try {
393-
file = getContext().getEnv().getPublicTruffleFile(lib.asPath(fileObject));
393+
file = getContext().getEnv().getPublicTruffleFile(asPath.execute(frame, fileObject));
394394
if (!file.exists()) {
395395
throw raiseOSError(frame, OSErrorEnum.ENOENT);
396396
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PythonAbstractObject.java

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import static com.oracle.graal.python.nodes.SpecialMethodNames.KEYS;
4646
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELETE__;
4747
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELITEM__;
48-
import static com.oracle.graal.python.nodes.SpecialMethodNames.__FSPATH__;
4948
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
5049
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTR__;
5150
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETITEM__;
@@ -646,24 +645,6 @@ private static void addKeysFromObject(HashSet<String> keys, PythonObject o, bool
646645
}
647646
}
648647

649-
@ExportMessage
650-
public String asPathWithState(ThreadState state,
651-
@CachedLibrary("this") PythonObjectLibrary lib,
652-
@Shared("methodLib") @CachedLibrary(limit = "2") PythonObjectLibrary methodLib,
653-
@Shared("raise") @Cached PRaiseNode raise,
654-
@Cached CastToJavaStringNode castToJavaStringNode) {
655-
Object func = lib.lookupAttributeOnType(this, __FSPATH__);
656-
if (func == PNone.NO_VALUE) {
657-
throw raise.raise(PythonBuiltinClassType.TypeError, ErrorMessages.EXPECTED_STR_BYTE_OSPATHLIKE_OBJ, this);
658-
}
659-
Object pathObject = methodLib.callUnboundMethodWithState(func, state, this);
660-
try {
661-
return castToJavaStringNode.execute(pathObject);
662-
} catch (CannotCastException e) {
663-
throw raise.raise(PythonBuiltinClassType.TypeError, ErrorMessages.EXPECTED_FSPATH_TO_RETURN_STR_OR_BYTES, this, pathObject);
664-
}
665-
}
666-
667648
@ExportMessage
668649
public Object lookupAttributeInternal(ThreadState state, String name, boolean strict,
669650
@Shared("gotState") @Cached ConditionProfile gotState,
@@ -1769,7 +1750,7 @@ public static Object getIteratorWithState(PythonAbstractObject self, ThreadState
17691750
@Cached("createIterMethodProfile(plib)") ValueProfile iterMethodProfile,
17701751
@Cached IteratorNodes.IsIteratorObjectNode isIteratorObjectNode,
17711752
@Cached PythonObjectFactory factory,
1772-
@Shared("raise") @Cached PRaiseNode raise) {
1753+
@Cached PRaiseNode raise) {
17731754
Object v = plib.getDelegatedValue(self);
17741755
Object iterMethod = iterMethodProfile.profile(plib.lookupAttributeOnType(self, __ITER__));
17751756
if (iterMethod != PNone.NONE) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/PBytes.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131

3232
import com.oracle.graal.python.builtins.objects.buffer.BufferFlags;
3333
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAcquireLibrary;
34-
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
35-
import com.oracle.graal.python.builtins.objects.function.PArguments.ThreadState;
36-
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
3734
import com.oracle.graal.python.nodes.ErrorMessages;
3835
import com.oracle.graal.python.nodes.PRaiseNode;
3936
import com.oracle.graal.python.runtime.sequence.PSequence;
@@ -47,7 +44,6 @@
4744
import com.oracle.truffle.api.library.ExportMessage.Ignore;
4845
import com.oracle.truffle.api.object.Shape;
4946

50-
@ExportLibrary(PythonObjectLibrary.class)
5147
@ExportLibrary(InteropLibrary.class)
5248
@ExportLibrary(PythonBufferAcquireLibrary.class)
5349
public final class PBytes extends PBytesLike {
@@ -103,12 +99,6 @@ public final int hashCode() {
10399
return store.hashCode();
104100
}
105101

106-
@ExportMessage
107-
public String asPathWithState(@SuppressWarnings("unused") ThreadState state,
108-
@Cached SequenceStorageNodes.ToByteArrayNode toBytes) {
109-
return BytesUtils.createASCIIString(toBytes.execute(getSequenceStorage()));
110-
}
111-
112102
@ExportMessage
113103
@SuppressWarnings("unused")
114104
public static boolean isArrayElementModifiable(PBytes self, long index) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/memoryview/MemoryViewBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,8 @@ static Object eq(Object self, Object other) {
323323
}
324324

325325
private boolean recursive(VirtualFrame frame, PyObjectRichCompareBool.EqNode eqNode, PMemoryView self, PMemoryView other,
326-
MemoryViewNodes.ReadItemAtNode readSelf, MemoryViewNodes.ReadItemAtNode readOther,
327-
int dim, int ndim, Object selfPtr, int initialSelfOffset, Object otherPtr, int initialOtherOffset) {
326+
MemoryViewNodes.ReadItemAtNode readSelf, MemoryViewNodes.ReadItemAtNode readOther,
327+
int dim, int ndim, Object selfPtr, int initialSelfOffset, Object otherPtr, int initialOtherOffset) {
328328
int selfOffset = initialSelfOffset;
329329
int otherOffset = initialOtherOffset;
330330
for (int i = 0; i < self.getBufferShape()[dim]; i++) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/DefaultPythonStringExports.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,6 @@
6060

6161
@ExportLibrary(value = PythonObjectLibrary.class, receiverType = String.class)
6262
final class DefaultPythonStringExports {
63-
@ExportMessage
64-
static String asPathWithState(String value, @SuppressWarnings("unused") ThreadState state) {
65-
return value;
66-
}
67-
6863
@ExportMessage
6964
static Object lookupAttributeInternal(String receiver, ThreadState state, String name, boolean strict,
7065
@Cached ConditionProfile gotState,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/PythonObjectLibrary.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -281,22 +281,6 @@ private boolean profileHasFrame(VirtualFrame frame) {
281281
}
282282
}
283283

284-
/**
285-
* Return the file system path representation of the object. If the object is str or bytes, then
286-
* allow it to pass through. If the object defines __fspath__(), then return the result of that
287-
* method. All other types raise a TypeError.
288-
*/
289-
public String asPathWithState(Object receiver, @SuppressWarnings("unused") ThreadState threadState) {
290-
throw getDefaultNodes().getRaiseNode().raise(PythonBuiltinClassType.TypeError, ErrorMessages.EXPECTED_STR_BYTE_OSPATHLIKE_OBJ, receiver);
291-
}
292-
293-
/**
294-
* @see #asPathWithState
295-
*/
296-
public final String asPath(Object receiver) {
297-
return asPathWithState(receiver, null);
298-
}
299-
300284
/**
301285
* Looks up an attribute for the given receiver like {@code PyObject_LookupAttr}.
302286
*

0 commit comments

Comments
 (0)