summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2019-10-15 09:03:24 -0400
committerDan Halbert <halbert@halwitz.org>2019-10-15 09:03:24 -0400
commiteca73436c9901d54384bd8aa445b0dd70dfae52a (patch)
treedc20675e7540a4cda6c76c10f5f125b1e72f8b1b /py
parentfdd7ebef2dc89b606aca52ac4cec4dd722a94288 (diff)
parent9de155a1325bdba9873bfaa106c0638b296636b0 (diff)
Merge remote-tracking branch 'adafruit/master' into cpu-voltage
Diffstat (limited to 'py')
-rw-r--r--py/nlr.h49
-rw-r--r--py/objstr.c16
2 files changed, 39 insertions, 26 deletions
diff --git a/py/nlr.h b/py/nlr.h
index 802f5f39a..b442aaf8a 100644
--- a/py/nlr.h
+++ b/py/nlr.h
@@ -36,33 +36,38 @@
// If MICROPY_NLR_SETJMP is not enabled then auto-detect the machine arch
#if !defined(MICROPY_NLR_SETJMP) || !MICROPY_NLR_SETJMP
-#define MICROPY_NLR_SETJMP (0)
// A lot of nlr-related things need different treatment on Windows
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define MICROPY_NLR_OS_WINDOWS 1
-#else
-#define MICROPY_NLR_OS_WINDOWS 0
-#endif
-#if defined(__i386__)
- #define MICROPY_NLR_X86 (1)
- #define MICROPY_NLR_NUM_REGS (6)
-#elif defined(__x86_64__)
- #define MICROPY_NLR_X64 (1)
- #if MICROPY_NLR_OS_WINDOWS
- #define MICROPY_NLR_NUM_REGS (10)
+ #if defined(_WIN32) || defined(__CYGWIN__)
+ #define MICROPY_NLR_OS_WINDOWS 1
#else
- #define MICROPY_NLR_NUM_REGS (8)
+ #define MICROPY_NLR_OS_WINDOWS 0
#endif
-#elif defined(__thumb2__) || defined(__thumb__) || defined(__arm__)
- #define MICROPY_NLR_THUMB (1)
- #define MICROPY_NLR_NUM_REGS (10)
-#elif defined(__xtensa__)
- #define MICROPY_NLR_XTENSA (1)
- #define MICROPY_NLR_NUM_REGS (10)
-#else
- #define MICROPY_NLR_SETJMP (1)
+ #if defined(__i386__)
+ #define MICROPY_NLR_X86 (1)
+ #define MICROPY_NLR_NUM_REGS (6)
+ #elif defined(__x86_64__)
+ #define MICROPY_NLR_X64 (1)
+ #if MICROPY_NLR_OS_WINDOWS
+ #define MICROPY_NLR_NUM_REGS (10)
+ #else
+ #define MICROPY_NLR_NUM_REGS (8)
+ #endif
+ #elif defined(__thumb2__) || defined(__thumb__) || defined(__arm__)
+ #define MICROPY_NLR_THUMB (1)
+ #define MICROPY_NLR_NUM_REGS (10)
+ #elif defined(__xtensa__)
+ #define MICROPY_NLR_XTENSA (1)
+ #define MICROPY_NLR_NUM_REGS (10)
+ #else
+ #define MICROPY_NLR_SETJMP (1)
//#warning "No native NLR support for this arch, using setjmp implementation"
+ #endif
#endif
+
+// If MICROPY_NLR_SETJMP is not defined above - define/disable it here
+
+#if !defined(MICROPY_NLR_SETJMP)
+ #define MICROPY_NLR_SETJMP (0)
#endif
#if MICROPY_NLR_SETJMP
diff --git a/py/objstr.c b/py/objstr.c
index 6ef9a15b5..fde264681 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -31,6 +31,7 @@
#include "py/unicode.h"
#include "py/objstr.h"
#include "py/objlist.h"
+#include "py/objtype.h"
#include "py/runtime.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);
}
- if (n_args > 1) {
- goto wrong_args;
- }
-
if (MP_OBJ_IS_SMALL_INT(args[0])) {
mp_int_t len = MP_OBJ_SMALL_INT_VALUE(args[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);
}
+ 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
mp_buffer_info_t bufinfo;
if (mp_get_buffer(args[0], &bufinfo, MP_BUFFER_READ)) {