@@ -208,6 +208,17 @@ STATIC mp_obj_t bytearray_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t
208208#endif
209209
210210#if MICROPY_PY_BUILTINS_MEMORYVIEW
211+
212+ mp_obj_t mp_obj_new_memoryview (byte typecode , mp_uint_t nitems , void * items ) {
213+ mp_obj_array_t * self = m_new_obj (mp_obj_array_t );
214+ self -> base .type = & mp_type_memoryview ;
215+ self -> typecode = typecode ;
216+ self -> free = 0 ;
217+ self -> len = nitems ;
218+ self -> items = items ;
219+ return self ;
220+ }
221+
211222STATIC mp_obj_t memoryview_make_new (mp_obj_t type_in , mp_uint_t n_args , mp_uint_t n_kw , const mp_obj_t * args ) {
212223 // TODO possibly allow memoryview constructor to take start/stop so that one
213224 // can do memoryview(b, 4, 8) instead of memoryview(b)[4:8] (uses less RAM)
@@ -217,12 +228,9 @@ STATIC mp_obj_t memoryview_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_
217228 mp_buffer_info_t bufinfo ;
218229 mp_get_buffer_raise (args [0 ], & bufinfo , MP_BUFFER_READ );
219230
220- mp_obj_array_t * self = m_new_obj (mp_obj_array_t );
221- self -> base .type = type_in ;
222- self -> typecode = bufinfo .typecode ;
223- self -> free = 0 ;
224- self -> len = bufinfo .len / mp_binary_get_size ('@' , bufinfo .typecode , NULL ); // element len
225- self -> items = bufinfo .buf ;
231+ mp_obj_array_t * self = mp_obj_new_memoryview (bufinfo .typecode ,
232+ bufinfo .len / mp_binary_get_size ('@' , bufinfo .typecode , NULL ),
233+ bufinfo .buf );
226234
227235 // test if the object can be written to
228236 if (mp_get_buffer (args [0 ], & bufinfo , MP_BUFFER_RW )) {
0 commit comments