Skip to content

Commit 0516a34

Browse files
committed
Implement C API function '_PyBytes_Resize'.
1 parent c3c1e62 commit 0516a34

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

graalpython/com.oracle.graal.python.cext/src/bytesobject.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,8 @@ UPCALL_ID(PyBytes_Join);
280280
PyObject *_PyBytes_Join(PyObject *sep, PyObject *x) {
281281
return UPCALL_CEXT_O(_jls_PyBytes_Join, native_to_java(sep), native_to_java(x));
282282
}
283+
284+
UPCALL_ID(_PyBytes_Resize);
285+
int _PyBytes_Resize(PyObject **pv, Py_ssize_t newsize) {
286+
return UPCALL_CEXT_I(_jls__PyBytes_Resize, native_to_java(*pv), newsize);
287+
}

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
107107
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
108108
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
109+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.CastToByteNode;
109110
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.NormalizeIndexNode;
110111
import com.oracle.graal.python.builtins.objects.complex.PComplex;
111112
import com.oracle.graal.python.builtins.objects.dict.PDict;
@@ -162,6 +163,7 @@
162163
import com.oracle.graal.python.runtime.exception.PException;
163164
import com.oracle.graal.python.runtime.exception.PythonErrorType;
164165
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
166+
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
165167
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
166168
import com.oracle.truffle.api.CallTarget;
167169
import com.oracle.truffle.api.CompilerDirectives;
@@ -2431,4 +2433,32 @@ int add(Object self, @SuppressWarnings("unused") Object o) {
24312433

24322434
}
24332435

2436+
@Builtin(name = "_PyBytes_Resize", fixedNumOfPositionalArgs = 2)
2437+
@GenerateNodeFactory
2438+
public abstract static class PyBytes_Resize extends PythonBinaryBuiltinNode {
2439+
2440+
@Specialization
2441+
int resize(PBytes self, long newSizeL,
2442+
@Cached("create()") SequenceStorageNodes.LenNode lenNode,
2443+
@Cached("create()") SequenceStorageNodes.GetItemNode getItemNode,
2444+
@Cached("create()") CastToIndexNode castToIndexNode,
2445+
@Cached("create()") CastToByteNode castToByteNode) {
2446+
2447+
SequenceStorage storage = self.getSequenceStorage();
2448+
int newSize = castToIndexNode.execute(newSizeL);
2449+
int len = lenNode.execute(storage);
2450+
byte[] smaller = new byte[newSize];
2451+
for (int i = 0; i < newSize && i < len; i++) {
2452+
smaller[i] = castToByteNode.execute(getItemNode.execute(storage, i));
2453+
}
2454+
self.setSequenceStorage(new ByteSequenceStorage(smaller));
2455+
return 0;
2456+
}
2457+
2458+
@Fallback
2459+
int add(Object self, @SuppressWarnings("unused") Object o) {
2460+
return NativeBuiltin.raiseNative(this, -1, SystemError, "expected a set object, not %p", self);
2461+
}
2462+
2463+
}
24342464
}

0 commit comments

Comments
 (0)