Skip to content

Commit 5681c6c

Browse files
committed
Use POL to access memoryview in more places
1 parent fcb2f7a commit 5681c6c

File tree

4 files changed

+54
-47
lines changed

4 files changed

+54
-47
lines changed

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

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@
4646
import com.oracle.graal.python.builtins.modules.MarshalModuleBuiltinsClinicProviders.DumpsNodeClinicProviderGen;
4747
import com.oracle.graal.python.builtins.objects.PNone;
4848
import com.oracle.graal.python.builtins.objects.array.PArray;
49-
import com.oracle.graal.python.builtins.objects.bytes.BytesNodes;
5049
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
51-
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
5250
import com.oracle.graal.python.builtins.objects.code.CodeNodes;
5351
import com.oracle.graal.python.builtins.objects.code.CodeNodes.CreateCodeNode;
5452
import com.oracle.graal.python.builtins.objects.code.PCode;
@@ -65,7 +63,6 @@
6563
import com.oracle.graal.python.builtins.objects.function.PArguments;
6664
import com.oracle.graal.python.builtins.objects.ints.PInt;
6765
import com.oracle.graal.python.builtins.objects.list.PList;
68-
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
6966
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
7067
import com.oracle.graal.python.builtins.objects.set.PFrozenSet;
7168
import com.oracle.graal.python.builtins.objects.set.PSet;
@@ -93,6 +90,7 @@
9390
import com.oracle.truffle.api.dsl.NodeFactory;
9491
import com.oracle.truffle.api.dsl.Specialization;
9592
import com.oracle.truffle.api.frame.VirtualFrame;
93+
import com.oracle.truffle.api.interop.UnsupportedMessageException;
9694
import com.oracle.truffle.api.library.CachedLibrary;
9795
import com.oracle.truffle.api.profiles.ConditionProfile;
9896
import com.oracle.truffle.api.source.SourceSection;
@@ -166,19 +164,15 @@ Object doit(Object file) {
166164
@Builtin(name = "loads", minNumOfPositionalArgs = 1)
167165
@GenerateNodeFactory
168166
abstract static class LoadsNode extends PythonBuiltinNode {
169-
170-
@Child private UnmarshallerNode marshaller = UnmarshallerNode.create();
171-
172-
@Specialization
173-
Object doit(VirtualFrame frame, PBytesLike bytes,
174-
@Cached("create()") BytesNodes.ToBytesNode toBytesNode) {
175-
return marshaller.execute(frame, toBytesNode.execute(frame, bytes), CURRENT_VERSION);
176-
}
177-
178-
@Specialization
179-
Object doit(VirtualFrame frame, PMemoryView bytes,
180-
@Cached("create()") BytesNodes.ToBytesNode toBytesNode) {
181-
return marshaller.execute(frame, toBytesNode.execute(frame, bytes), CURRENT_VERSION);
167+
@Specialization(guards = "bufferLib.isBuffer(buffer)", limit = "3")
168+
static Object doit(VirtualFrame frame, Object buffer,
169+
@Cached UnmarshallerNode unmarshallerNode,
170+
@CachedLibrary("buffer") PythonObjectLibrary bufferLib) {
171+
try {
172+
return unmarshallerNode.execute(frame, bufferLib.getBufferBytes(buffer), CURRENT_VERSION);
173+
} catch (UnsupportedMessageException e) {
174+
throw CompilerDirectives.shouldNotReachHere();
175+
}
182176
}
183177
}
184178

@@ -372,18 +366,15 @@ void handleInternedString(InternedString v, int version, DataOutputStream buffer
372366
writeString(v.string, version, buffer);
373367
}
374368

375-
@Specialization
376-
void handleBytesLike(VirtualFrame frame, PBytesLike v, int version, DataOutputStream buffer,
377-
@Cached("create()") BytesNodes.ToBytesNode toBytesNode) {
378-
writeByte(TYPE_BYTESLIKE, version, buffer);
379-
writeBytes(toBytesNode.execute(frame, v), version, buffer);
380-
}
381-
382-
@Specialization
383-
void handleMemoryView(VirtualFrame frame, PMemoryView v, int version, DataOutputStream buffer,
384-
@Cached("create()") BytesNodes.ToBytesNode toBytesNode) {
385-
writeByte(TYPE_BYTESLIKE, version, buffer);
386-
writeBytes(toBytesNode.execute(frame, v), version, buffer);
369+
@Specialization(guards = "bufferLib.isBuffer(buffer)", limit = "3")
370+
void handleBuffer(Object buffer, int version, DataOutputStream out,
371+
@CachedLibrary("buffer") PythonObjectLibrary bufferLib) {
372+
writeByte(TYPE_BYTESLIKE, version, out);
373+
try {
374+
writeBytes(bufferLib.getBufferBytes(buffer), version, out);
375+
} catch (UnsupportedMessageException e) {
376+
throw CompilerDirectives.shouldNotReachHere();
377+
}
387378
}
388379

389380
@Specialization

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
5757
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
5858
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.ToByteArrayNodeGen;
59-
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
59+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
6060
import com.oracle.graal.python.builtins.objects.str.PString;
6161
import com.oracle.graal.python.nodes.ErrorMessages;
6262
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
@@ -156,9 +156,15 @@ Object run(PBytesLike str) {
156156
return factory().createByteArray(bytes);
157157
}
158158

159-
@Specialization
160-
Object run(VirtualFrame frame, PMemoryView memoryView) {
161-
byte[] bytes = doBytes(getToBytesNode().execute(frame, memoryView));
159+
@Specialization(guards = "bufferLib.isBuffer(buffer)", limit = "3")
160+
Object run(Object buffer,
161+
@CachedLibrary("buffer") PythonObjectLibrary bufferLib) {
162+
byte[] bytes;
163+
try {
164+
bytes = bufferLib.getBufferBytes(buffer);
165+
} catch (UnsupportedMessageException e) {
166+
throw CompilerDirectives.shouldNotReachHere();
167+
}
162168
return factory().createByteArray(bytes);
163169
}
164170

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@
7474
import com.oracle.graal.python.builtins.objects.function.PArguments;
7575
import com.oracle.graal.python.builtins.objects.ints.IntBuiltinsClinicProviders.FormatNodeClinicProviderGen;
7676
import com.oracle.graal.python.builtins.objects.list.PList;
77-
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
7877
import com.oracle.graal.python.builtins.objects.object.PythonObject;
7978
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
8079
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
@@ -116,6 +115,7 @@
116115
import com.oracle.truffle.api.dsl.Specialization;
117116
import com.oracle.truffle.api.dsl.TypeSystemReference;
118117
import com.oracle.truffle.api.frame.VirtualFrame;
118+
import com.oracle.truffle.api.interop.UnsupportedMessageException;
119119
import com.oracle.truffle.api.library.CachedLibrary;
120120
import com.oracle.truffle.api.profiles.BranchProfile;
121121
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -2412,15 +2412,21 @@ Object fromPArray(VirtualFrame frame, Object cl, PArray array, String byteorder,
24122412
return fromPArray(frame, cl, array, byteorder, false, fromSequenceStorageNode);
24132413
}
24142414

2415-
// from PMemoryView
2416-
@Specialization
2417-
Object fromPMemoryView(VirtualFrame frame, Object cl, PMemoryView view, String byteorder, boolean signed) {
2418-
return compute(cl, getToBytesNode().execute(frame, view), byteorder, signed);
2415+
// from buffer
2416+
@Specialization(guards = "bufferLib.isBuffer(buffer)", limit = "3")
2417+
Object fromBuffer(Object cl, Object buffer, String byteorder, boolean signed,
2418+
@CachedLibrary("buffer") PythonObjectLibrary bufferLib) {
2419+
try {
2420+
return compute(cl, bufferLib.getBufferBytes(buffer), byteorder, signed);
2421+
} catch (UnsupportedMessageException e) {
2422+
throw CompilerDirectives.shouldNotReachHere();
2423+
}
24192424
}
24202425

2421-
@Specialization
2422-
Object fromPMemoryView(VirtualFrame frame, Object cl, PMemoryView view, String byteorder, @SuppressWarnings("unused") PNone signed) {
2423-
return fromPMemoryView(frame, cl, view, byteorder, false);
2426+
@Specialization(guards = "bufferLib.isBuffer(buffer)", limit = "3")
2427+
Object fromBuffer(Object cl, Object buffer, String byteorder, @SuppressWarnings("unused") PNone signed,
2428+
@CachedLibrary("buffer") PythonObjectLibrary bufferLib) {
2429+
return fromBuffer(cl, buffer, byteorder, false, bufferLib);
24242430
}
24252431

24262432
// from PList, only if it is not extended

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/mmap/MMapBuiltins.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,12 @@
6868
import com.oracle.graal.python.builtins.PythonBuiltins;
6969
import com.oracle.graal.python.builtins.objects.PNone;
7070
import com.oracle.graal.python.builtins.objects.bytes.BytesBuiltins.BytesLikeNoGeneralizationNode;
71-
import com.oracle.graal.python.builtins.objects.bytes.BytesNodes;
7271
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
7372
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
7473
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
7574
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum;
7675
import com.oracle.graal.python.builtins.objects.function.PArguments;
7776
import com.oracle.graal.python.builtins.objects.ints.PInt;
78-
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
7977
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
8078
import com.oracle.graal.python.builtins.objects.range.RangeNodes.LenOfRangeNode;
8179
import com.oracle.graal.python.builtins.objects.slice.PSlice;
@@ -113,6 +111,7 @@
113111
import com.oracle.truffle.api.dsl.Specialization;
114112
import com.oracle.truffle.api.dsl.TypeSystemReference;
115113
import com.oracle.truffle.api.frame.VirtualFrame;
114+
import com.oracle.truffle.api.interop.UnsupportedMessageException;
116115
import com.oracle.truffle.api.library.CachedLibrary;
117116
import com.oracle.truffle.api.profiles.BranchProfile;
118117
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -553,11 +552,16 @@ static int writeBytesLike(PMMap self, PBytesLike bytesLike,
553552
return writeNode.execute(channel, bytesLike.getSequenceStorage(), Integer.MAX_VALUE);
554553
}
555554

556-
@Specialization
557-
static int writeMemoryview(VirtualFrame frame, PMMap self, PMemoryView memoryView,
558-
@Cached("create()") WriteToChannelNode writeNode,
559-
@Cached("create()") BytesNodes.ToBytesNode toBytesNode) {
560-
byte[] data = toBytesNode.execute(frame, memoryView);
555+
@Specialization(guards = "bufferLib.isBuffer(buffer)", limit = "3")
556+
static int writeBuffer(PMMap self, Object buffer,
557+
@CachedLibrary("buffer") PythonObjectLibrary bufferLib,
558+
@Cached("create()") WriteToChannelNode writeNode) {
559+
byte[] data;
560+
try {
561+
data = bufferLib.getBufferBytes(buffer);
562+
} catch (UnsupportedMessageException e) {
563+
throw CompilerDirectives.shouldNotReachHere();
564+
}
561565
return writeNode.execute(self.getChannel(), new ByteSequenceStorage(data), Integer.MAX_VALUE);
562566
}
563567
}

0 commit comments

Comments
 (0)