|
50 | 50 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectTransfer;
|
51 | 51 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectWrapper;
|
52 | 52 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyThreadState;
|
| 53 | +import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyVarObject; |
53 | 54 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_hash_t;
|
54 | 55 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_ssize_t;
|
55 | 56 | import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.VA_LIST_PTR;
|
|
94 | 95 | import com.oracle.graal.python.builtins.objects.cext.common.GetNextVaArgNode;
|
95 | 96 | import com.oracle.graal.python.builtins.objects.cext.structs.CFields;
|
96 | 97 | import com.oracle.graal.python.builtins.objects.cext.structs.CStructAccess;
|
| 98 | +import com.oracle.graal.python.builtins.objects.common.SequenceNodes; |
97 | 99 | import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
|
98 | 100 | import com.oracle.graal.python.builtins.objects.dict.PDict;
|
99 | 101 | import com.oracle.graal.python.builtins.objects.function.PKeyword;
|
|
132 | 134 | import com.oracle.graal.python.runtime.PythonOptions;
|
133 | 135 | import com.oracle.graal.python.runtime.exception.PException;
|
134 | 136 | import com.oracle.graal.python.runtime.object.PythonObjectFactory;
|
| 137 | +import com.oracle.graal.python.runtime.sequence.PSequence; |
| 138 | +import com.oracle.graal.python.runtime.sequence.storage.BasicSequenceStorage; |
| 139 | +import com.oracle.graal.python.runtime.sequence.storage.EmptySequenceStorage; |
| 140 | +import com.oracle.graal.python.runtime.sequence.storage.NativeSequenceStorage; |
135 | 141 | import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
|
136 | 142 | import com.oracle.graal.python.util.PythonUtils;
|
137 | 143 | import com.oracle.truffle.api.CompilerDirectives;
|
@@ -567,6 +573,29 @@ static PNone doNativeNone() {
|
567 | 573 | }
|
568 | 574 | }
|
569 | 575 |
|
| 576 | + @CApiBuiltin(ret = Void, args = {PyVarObject, Py_ssize_t}, call = Ignored) |
| 577 | + abstract static class _PyTruffle_SET_SIZE extends CApiBinaryBuiltinNode { |
| 578 | + @Specialization |
| 579 | + static PNone set(PSequence obj, long size, |
| 580 | + @Bind("this") Node inliningTarget, |
| 581 | + @Cached SequenceNodes.GetSequenceStorageNode getSequenceStorageNode) { |
| 582 | + SequenceStorage storage = getSequenceStorageNode.execute(inliningTarget, obj); |
| 583 | + // Can't use SetLenNode as that decrefs items for native storages when shrinking |
| 584 | + if (storage instanceof BasicSequenceStorage basicStorage) { |
| 585 | + basicStorage.setNewLength((int) size); |
| 586 | + } else if (storage instanceof NativeSequenceStorage nativeStorage) { |
| 587 | + nativeStorage.setNewLength((int) size); |
| 588 | + } else if (storage instanceof EmptySequenceStorage) { |
| 589 | + if (size > 0) { |
| 590 | + throw CompilerDirectives.shouldNotReachHere("invalid Py_SET_SIZE call"); |
| 591 | + } |
| 592 | + } else { |
| 593 | + throw CompilerDirectives.shouldNotReachHere("unhandled storage type"); |
| 594 | + } |
| 595 | + return PNone.NO_VALUE; |
| 596 | + } |
| 597 | + } |
| 598 | + |
570 | 599 | @CApiBuiltin(ret = Void, args = {PyObjectWrapper}, call = Direct)
|
571 | 600 | abstract static class _PyObject_Dump extends CApiUnaryBuiltinNode {
|
572 | 601 |
|
|
0 commit comments