summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorJoe Bakalor <jmbakalor@gmail.com>2019-11-05 11:06:18 -0500
committerGitHub <noreply@github.com>2019-11-05 11:06:18 -0500
commitba83a4a2ac815e76cd752db05e3269450021954e (patch)
tree611864e312d825c2abb85df4d3a9cb88aa382faa /py
parent8ab3ef44dddbb82d623dd557461b2b77cf607283 (diff)
parent01bf9321692d00da8628b7b230be3b03665eff82 (diff)
Merge pull request #1 from adafruit/master
Update base
Diffstat (limited to 'py')
-rw-r--r--py/binary.c2
-rw-r--r--py/circuitpy_defns.mk5
-rw-r--r--py/circuitpy_mpconfig.mk13
-rwxr-xr-xpy/gc.c1
-rw-r--r--py/nlr.h49
-rw-r--r--py/objstr.c16
-rw-r--r--py/objtype.c6
-rw-r--r--py/ringbuf.h7
-rw-r--r--py/showbc.c2
-rw-r--r--py/vm.c2
10 files changed, 64 insertions, 39 deletions
diff --git a/py/binary.c b/py/binary.c
index 6b46425cf..2ec12fa93 100644
--- a/py/binary.c
+++ b/py/binary.c
@@ -184,7 +184,7 @@ long long mp_binary_get_int(mp_uint_t size, bool is_signed, bool big_endian, con
val = -1;
}
for (uint i = 0; i < size; i++) {
- val <<= 8;
+ val *= 256;
val |= *src;
src += delta;
}
diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk
index b72d75390..211e85368 100644
--- a/py/circuitpy_defns.mk
+++ b/py/circuitpy_defns.mk
@@ -229,12 +229,10 @@ SRC_COMMON_HAL_ALL = \
_bleio/__init__.c \
_bleio/Adapter.c \
_bleio/Attribute.c \
- _bleio/Central.c \
_bleio/Characteristic.c \
_bleio/CharacteristicBuffer.c \
+ _bleio/Connection.c \
_bleio/Descriptor.c \
- _bleio/Peripheral.c \
- _bleio/Scanner.c \
_bleio/Service.c \
_bleio/UUID.c \
analogio/AnalogIn.c \
@@ -307,6 +305,7 @@ SRC_SHARED_MODULE_ALL = \
_bleio/Address.c \
_bleio/Attribute.c \
_bleio/ScanEntry.c \
+ _bleio/ScanResults.c \
_pixelbuf/PixelBuf.c \
_pixelbuf/__init__.c \
_stage/Layer.c \
diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk
index c5756f488..ac79d32d0 100644
--- a/py/circuitpy_mpconfig.mk
+++ b/py/circuitpy_mpconfig.mk
@@ -52,6 +52,11 @@ ifndef CIRCUITPY_DEFAULT_BUILD
endif
endif
+# Some features have no unique HAL component, and thus there's never
+# a reason to not include them.
+ifndef CIRCUITPY_ALWAYS_BUILD
+ CIRCUITPY_ALWAYS_BUILD = 1
+endif
# All builtin modules are listed below, with default values (0 for off, 1 for on)
@@ -151,7 +156,7 @@ endif
CFLAGS += -DCIRCUITPY_I2CSLAVE=$(CIRCUITPY_I2CSLAVE)
ifndef CIRCUITPY_MATH
-CIRCUITPY_MATH = $(CIRCUITPY_DEFAULT_BUILD)
+CIRCUITPY_MATH = $(CIRCUITPY_ALWAYS_BUILD)
endif
CFLAGS += -DCIRCUITPY_MATH=$(CIRCUITPY_MATH)
@@ -232,17 +237,17 @@ endif
CFLAGS += -DCIRCUITPY_STORAGE=$(CIRCUITPY_STORAGE)
ifndef CIRCUITPY_STRUCT
-CIRCUITPY_STRUCT = $(CIRCUITPY_DEFAULT_BUILD)
+CIRCUITPY_STRUCT = $(CIRCUITPY_ALWAYS_BUILD)
endif
CFLAGS += -DCIRCUITPY_STRUCT=$(CIRCUITPY_STRUCT)
ifndef CIRCUITPY_SUPERVISOR
-CIRCUITPY_SUPERVISOR = $(CIRCUITPY_DEFAULT_BUILD)
+CIRCUITPY_SUPERVISOR = $(CIRCUITPY_ALWAYS_BUILD)
endif
CFLAGS += -DCIRCUITPY_SUPERVISOR=$(CIRCUITPY_SUPERVISOR)
ifndef CIRCUITPY_TIME
-CIRCUITPY_TIME = $(CIRCUITPY_DEFAULT_BUILD)
+CIRCUITPY_TIME = $(CIRCUITPY_ALWAYS_BUILD)
endif
CFLAGS += -DCIRCUITPY_TIME=$(CIRCUITPY_TIME)
diff --git a/py/gc.c b/py/gc.c
index 10b36950c..ac584d5d2 100755
--- a/py/gc.c
+++ b/py/gc.c
@@ -509,7 +509,6 @@ void *gc_alloc(size_t n_bytes, bool has_finaliser, bool long_lived) {
gc_collect();
collected = 1;
GC_ENTER();
- collected = true;
}
#endif
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)) {
diff --git a/py/objtype.c b/py/objtype.c
index 5133d849f..0212a78da 100644
--- a/py/objtype.c
+++ b/py/objtype.c
@@ -336,8 +336,10 @@ mp_obj_t mp_obj_instance_make_new(const mp_obj_type_t *self, size_t n_args, cons
mp_obj_t *args2 = m_new(mp_obj_t, 1 + n_args + 2 * n_kw);
args2[0] = MP_OBJ_FROM_PTR(self);
memcpy(args2 + 1, args, n_args * sizeof(mp_obj_t));
- // copy in kwargs
- memcpy(args2 + 1 + n_args, kw_args->table, 2 * n_kw * sizeof(mp_obj_t));
+ if (kw_args) {
+ // copy in kwargs
+ memcpy(args2 + 1 + n_args, kw_args->table, 2 * n_kw * sizeof(mp_obj_t));
+ }
new_ret = mp_call_function_n_kw(init_fn[0], n_args + 1, n_kw, args2);
m_del(mp_obj_t, args2, 1 + n_args + 2 * n_kw);
}
diff --git a/py/ringbuf.h b/py/ringbuf.h
index 5f82cc096..7fc35d266 100644
--- a/py/ringbuf.h
+++ b/py/ringbuf.h
@@ -99,4 +99,11 @@ static inline void ringbuf_put_n(ringbuf_t* r, uint8_t* buf, uint8_t bufsize)
}
}
}
+
+static inline void ringbuf_get_n(ringbuf_t* r, uint8_t* buf, uint8_t bufsize)
+{
+ for(uint8_t i=0; i < bufsize; i++) {
+ buf[i] = ringbuf_get(r);
+ }
+}
#endif // MICROPY_INCLUDED_PY_RINGBUF_H
diff --git a/py/showbc.c b/py/showbc.c
index 3deb18cd3..e71d8a253 100644
--- a/py/showbc.c
+++ b/py/showbc.c
@@ -185,7 +185,7 @@ const byte *mp_bytecode_print_str(const byte *ip) {
num--;
}
do {
- num = (num << 7) | (*ip & 0x7f);
+ num = (num * 128) | (*ip & 0x7f);
} while ((*ip++ & 0x80) != 0);
printf("LOAD_CONST_SMALL_INT " INT_FMT, num);
break;
diff --git a/py/vm.c b/py/vm.c
index b5f53ee9a..353fc8810 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -758,7 +758,7 @@ unwind_jump:;
} else {
PUSH(value); // push the next iteration value
}
- DISPATCH();
+ DISPATCH_WITH_PEND_EXC_CHECK();
}
// matched against: SETUP_EXCEPT, SETUP_FINALLY, SETUP_WITH