Merge pull request #2220 from tannewt/support_dunder_bytes
Support __bytes__
This commit is contained in:
commit
9de155a132
16
py/objstr.c
16
py/objstr.c
|
@ -31,6 +31,7 @@
|
||||||
#include "py/unicode.h"
|
#include "py/unicode.h"
|
||||||
#include "py/objstr.h"
|
#include "py/objstr.h"
|
||||||
#include "py/objlist.h"
|
#include "py/objlist.h"
|
||||||
|
#include "py/objtype.h"
|
||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
#include "py/stackctrl.h"
|
#include "py/stackctrl.h"
|
||||||
|
|
||||||
|
@ -226,10 +227,6 @@ STATIC mp_obj_t bytes_make_new(const mp_obj_type_t *type_in, size_t n_args, cons
|
||||||
return MP_OBJ_FROM_PTR(o);
|
return MP_OBJ_FROM_PTR(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n_args > 1) {
|
|
||||||
goto wrong_args;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (MP_OBJ_IS_SMALL_INT(args[0])) {
|
if (MP_OBJ_IS_SMALL_INT(args[0])) {
|
||||||
mp_int_t len = MP_OBJ_SMALL_INT_VALUE(args[0]);
|
mp_int_t len = MP_OBJ_SMALL_INT_VALUE(args[0]);
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
|
@ -241,6 +238,17 @@ STATIC mp_obj_t bytes_make_new(const mp_obj_type_t *type_in, size_t n_args, cons
|
||||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (n_args > 1) {
|
||||||
|
goto wrong_args;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if __bytes__ exists, and if so delegate to it
|
||||||
|
mp_obj_t dest[2];
|
||||||
|
mp_load_method_maybe(args[0], MP_QSTR___bytes__, dest);
|
||||||
|
if (dest[0] != MP_OBJ_NULL) {
|
||||||
|
return mp_call_method_n_kw(0, 0, dest);
|
||||||
|
}
|
||||||
|
|
||||||
// check if argument has the buffer protocol
|
// check if argument has the buffer protocol
|
||||||
mp_buffer_info_t bufinfo;
|
mp_buffer_info_t bufinfo;
|
||||||
if (mp_get_buffer(args[0], &bufinfo, MP_BUFFER_READ)) {
|
if (mp_get_buffer(args[0], &bufinfo, MP_BUFFER_READ)) {
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
class C1:
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
|
||||||
|
def __bytes__(self):
|
||||||
|
return self.value
|
||||||
|
|
||||||
|
c1 = C1(b"class 1")
|
||||||
|
print(bytes(c1))
|
Loading…
Reference in New Issue