Skip to content

Commit a6cd7c0

Browse files
committed
Allow acquiring buffer of a memoryview of mmap
1 parent 852653d commit a6cd7c0

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,13 @@
6060
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.SetSequenceStorageNode;
6161
import com.oracle.graal.python.builtins.objects.ints.PInt;
6262
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
63+
import com.oracle.graal.python.builtins.objects.mmap.PMMap;
6364
import com.oracle.graal.python.builtins.objects.object.PythonObject;
6465
import com.oracle.graal.python.nodes.ErrorMessages;
6566
import com.oracle.graal.python.nodes.PRaiseNode;
6667
import com.oracle.graal.python.nodes.object.GetClassNode;
68+
import com.oracle.graal.python.runtime.PosixSupportLibrary;
69+
import com.oracle.graal.python.runtime.PythonContext;
6770
import com.oracle.graal.python.runtime.sequence.PSequence;
6871
import com.oracle.graal.python.runtime.sequence.storage.NativeSequenceStorage;
6972
import com.oracle.truffle.api.CompilerDirectives;
@@ -114,17 +117,20 @@ private static Object allocate(PMemoryView object) {
114117

115118
Object buf;
116119
if (object.getBufferPointer() == null) {
117-
NativeSequenceStorage nativeStorage;
120+
Object pointer;
118121
if (object.getOwner() instanceof PSequence owner) {
119-
nativeStorage = ToNativeStorageNode.executeUncached(GetSequenceStorageNode.executeUncached(owner), owner instanceof PBytesLike);
122+
NativeSequenceStorage nativeStorage = ToNativeStorageNode.executeUncached(GetSequenceStorageNode.executeUncached(owner), owner instanceof PBytesLike);
120123
SetSequenceStorageNode.executeUncached(owner, nativeStorage);
124+
pointer = nativeStorage.getPtr();
121125
} else if (object.getOwner() instanceof PArray owner) {
122-
nativeStorage = ToNativeStorageNode.executeUncached(owner.getSequenceStorage(), true);
126+
NativeSequenceStorage nativeStorage = ToNativeStorageNode.executeUncached(owner.getSequenceStorage(), true);
123127
owner.setSequenceStorage(nativeStorage);
128+
pointer = nativeStorage.getPtr();
129+
} else if (object.getOwner() instanceof PMMap owner) {
130+
pointer = PosixSupportLibrary.getUncached().mmapGetPointer(PythonContext.get(null).getPosixSupport(), owner.getPosixSupportHandle());
124131
} else {
125132
throw shouldNotReachHere("Cannot convert managed object to native storage");
126133
}
127-
Object pointer = nativeStorage.getPtr();
128134
if (object.getOffset() == 0) {
129135
buf = pointer;
130136
} else {

0 commit comments

Comments
 (0)