@@ -59,8 +59,7 @@ PyObject* PyMemoryView_FromObject(PyObject *v) {
59
59
60
60
/* called back from the above upcall only if the object was native */
61
61
PyObject * PyTruffle_MemoryViewFromObject (PyObject * v ) {
62
- // TODO resource management
63
- Py_buffer buffer ;
62
+ Py_buffer buffer ;
64
63
if (PyObject_CheckBuffer (v )) {
65
64
PyObject * ret ;
66
65
if (PyObject_GetBuffer (v , & buffer , PyBUF_FULL_RO ) < 0 ) {
@@ -92,30 +91,34 @@ PyObject* PyMemoryView_FromBuffer(Py_buffer *buffer) {
92
91
releasefn = pb -> bf_releasebuffer ;
93
92
}
94
93
}
95
- return polyglot_invoke (PY_TRUFFLE_CEXT , "PyTruffle_MemoryViewFromBuffer" ,
96
- buffer ,
97
- native_to_java (buffer -> obj ),
98
- releasefn ,
99
- buffer -> len ,
100
- buffer -> readonly ,
101
- buffer -> itemsize ,
102
- polyglot_from_string (buffer -> format ? buffer -> format : "B" , "ascii" ),
103
- buffer -> ndim ,
104
- polyglot_from_i8_array (buffer -> buf , buffer -> len ),
105
- buffer -> shape ? polyglot_from_size_array (buffer -> shape , ndim ) : NULL ,
106
- buffer -> strides ? polyglot_from_size_array (buffer -> strides , ndim ) : NULL ,
107
- buffer -> suboffsets ? polyglot_from_size_array (buffer -> suboffsets , ndim ) : NULL );
94
+ return polyglot_invoke (PY_TRUFFLE_CEXT , "PyTruffle_MemoryViewFromBuffer" ,
95
+ buffer ,
96
+ native_to_java (buffer -> obj ),
97
+ releasefn ,
98
+ buffer -> len ,
99
+ buffer -> readonly ,
100
+ buffer -> itemsize ,
101
+ polyglot_from_string (buffer -> format ? buffer -> format : "B" , "ascii" ),
102
+ buffer -> ndim ,
103
+ polyglot_from_i8_array (buffer -> buf , buffer -> len ),
104
+ buffer -> shape ? polyglot_from_size_array (buffer -> shape , ndim ) : NULL ,
105
+ buffer -> strides ? polyglot_from_size_array (buffer -> strides , ndim ) : NULL ,
106
+ buffer -> suboffsets ? polyglot_from_size_array (buffer -> suboffsets , ndim ) : NULL );
108
107
}
109
108
110
- PyObject * PyMemoryView_FromMemory (char * mem , Py_ssize_t size , int flags )
111
- {
109
+ PyObject * PyMemoryView_FromMemory (char * mem , Py_ssize_t size , int flags ) {
112
110
assert (mem != NULL );
113
111
assert (flags == PyBUF_READ || flags == PyBUF_WRITE );
114
112
int readonly = (flags == PyBUF_WRITE ) ? 0 : 1 ;
115
113
return polyglot_invoke (PY_TRUFFLE_CEXT , "PyTruffle_MemoryViewFromBuffer" ,
116
114
NULL , NULL , NULL , size , readonly , 1 , polyglot_from_string ("B" , "ascii" ), 1 , polyglot_from_i8_array ((int8_t * )mem , size ), NULL , NULL , NULL );
117
115
}
118
116
117
+ UPCALL_ID (PyMemoryView_GetContiguous )
118
+ PyObject * PyMemoryView_GetContiguous (PyObject * obj , int buffertype , char order ) {
119
+ return UPCALL_CEXT_O (_jls_PyMemoryView_GetContiguous , native_to_java (obj ), buffertype , (int )order );
120
+ }
121
+
119
122
/* Macros taken from CPython */
120
123
/* Memoryview buffer properties */
121
124
#define MV_C_CONTIGUOUS (flags ) (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C))
0 commit comments