|
46 | 46 | import com.oracle.graal.python.builtins.modules.MarshalModuleBuiltinsClinicProviders.DumpsNodeClinicProviderGen;
|
47 | 47 | import com.oracle.graal.python.builtins.objects.PNone;
|
48 | 48 | import com.oracle.graal.python.builtins.objects.array.PArray;
|
49 |
| -import com.oracle.graal.python.builtins.objects.bytes.BytesNodes; |
50 | 49 | import com.oracle.graal.python.builtins.objects.bytes.PBytes;
|
51 |
| -import com.oracle.graal.python.builtins.objects.bytes.PBytesLike; |
52 | 50 | import com.oracle.graal.python.builtins.objects.code.CodeNodes;
|
53 | 51 | import com.oracle.graal.python.builtins.objects.code.CodeNodes.CreateCodeNode;
|
54 | 52 | import com.oracle.graal.python.builtins.objects.code.PCode;
|
|
65 | 63 | import com.oracle.graal.python.builtins.objects.function.PArguments;
|
66 | 64 | import com.oracle.graal.python.builtins.objects.ints.PInt;
|
67 | 65 | import com.oracle.graal.python.builtins.objects.list.PList;
|
68 |
| -import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView; |
69 | 66 | import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
|
70 | 67 | import com.oracle.graal.python.builtins.objects.set.PFrozenSet;
|
71 | 68 | import com.oracle.graal.python.builtins.objects.set.PSet;
|
|
93 | 90 | import com.oracle.truffle.api.dsl.NodeFactory;
|
94 | 91 | import com.oracle.truffle.api.dsl.Specialization;
|
95 | 92 | import com.oracle.truffle.api.frame.VirtualFrame;
|
| 93 | +import com.oracle.truffle.api.interop.UnsupportedMessageException; |
96 | 94 | import com.oracle.truffle.api.library.CachedLibrary;
|
97 | 95 | import com.oracle.truffle.api.profiles.ConditionProfile;
|
98 | 96 | import com.oracle.truffle.api.source.SourceSection;
|
@@ -166,19 +164,15 @@ Object doit(Object file) {
|
166 | 164 | @Builtin(name = "loads", minNumOfPositionalArgs = 1)
|
167 | 165 | @GenerateNodeFactory
|
168 | 166 | 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 | + } |
182 | 176 | }
|
183 | 177 | }
|
184 | 178 |
|
@@ -372,18 +366,15 @@ void handleInternedString(InternedString v, int version, DataOutputStream buffer
|
372 | 366 | writeString(v.string, version, buffer);
|
373 | 367 | }
|
374 | 368 |
|
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 | + } |
387 | 378 | }
|
388 | 379 |
|
389 | 380 | @Specialization
|
|
0 commit comments