summaryrefslogtreecommitdiff
path: root/extmod
diff options
context:
space:
mode:
Diffstat (limited to 'extmod')
-rw-r--r--extmod/machine_i2c.c2
-rw-r--r--extmod/machine_mem.c2
-rw-r--r--extmod/machine_pinbase.c7
-rw-r--r--extmod/modbtree.c4
-rw-r--r--extmod/modframebuf.c4
-rw-r--r--extmod/modlwip.c13
-rw-r--r--extmod/modubinascii.c93
-rw-r--r--extmod/moductypes.c9
-rw-r--r--extmod/moduhashlib.c1
-rw-r--r--extmod/moduheapq.c4
-rw-r--r--extmod/modujson.c3
-rw-r--r--extmod/modurandom.c1
-rw-r--r--extmod/modure.c8
-rw-r--r--extmod/modussl_axtls.c3
-rw-r--r--extmod/modussl_mbedtls.c18
-rw-r--r--extmod/modutimeq.c4
-rw-r--r--extmod/moduzlib.c3
-rw-r--r--extmod/modwebrepl.c2
-rw-r--r--extmod/modwebsocket.c2
-rw-r--r--extmod/re1.5/compilecode.c2
-rw-r--r--extmod/re1.5/re1.5.h3
-rw-r--r--extmod/re1.5/recursiveloop.c4
-rw-r--r--extmod/uos_dupterm.c3
-rw-r--r--extmod/vfs.c1
-rw-r--r--extmod/vfs_fat.c3
-rw-r--r--extmod/vfs_fat_file.c1
-rw-r--r--extmod/vfs_fat_misc.c1
27 files changed, 103 insertions, 98 deletions
diff --git a/extmod/machine_i2c.c b/extmod/machine_i2c.c
index c0a51a6e7..5d441b1ba 100644
--- a/extmod/machine_i2c.c
+++ b/extmod/machine_i2c.c
@@ -269,7 +269,7 @@ int mp_machine_soft_i2c_readfrom(mp_obj_base_t *self_in, uint16_t addr, uint8_t
/******************************************************************************/
// MicroPython bindings for I2C
-STATIC void machine_i2c_obj_init_helper(machine_i2c_obj_t *self, mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
+STATIC void machine_i2c_obj_init_helper(machine_i2c_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_scl, ARG_sda, ARG_freq, ARG_timeout };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_scl, MP_ARG_REQUIRED | MP_ARG_OBJ },
diff --git a/extmod/machine_mem.c b/extmod/machine_mem.c
index af987cb7f..b9f16507c 100644
--- a/extmod/machine_mem.c
+++ b/extmod/machine_mem.c
@@ -24,8 +24,8 @@
* THE SOFTWARE.
*/
+#include "py/runtime.h"
#include "extmod/machine_mem.h"
-#include "py/nlr.h"
#if MICROPY_PY_MACHINE
diff --git a/extmod/machine_pinbase.c b/extmod/machine_pinbase.c
index 3c1f09483..070c5cde9 100644
--- a/extmod/machine_pinbase.c
+++ b/extmod/machine_pinbase.c
@@ -30,6 +30,7 @@
#include "py/obj.h"
#include "py/runtime.h"
#include "extmod/virtpin.h"
+#include "extmod/machine_pinbase.h"
// PinBase class
@@ -40,10 +41,8 @@ typedef struct _mp_pinbase_t {
mp_obj_base_t base;
} mp_pinbase_t;
-STATIC const mp_obj_type_t pinbase_type;
-
-STATIC mp_pinbase_t pinbase_singleton = {
- .base = { &pinbase_type },
+STATIC const mp_pinbase_t pinbase_singleton = {
+ .base = { &machine_pinbase_type },
};
STATIC mp_obj_t pinbase_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
diff --git a/extmod/modbtree.c b/extmod/modbtree.c
index 229daaf0f..5c1311532 100644
--- a/extmod/modbtree.c
+++ b/extmod/modbtree.c
@@ -29,9 +29,7 @@
#include <errno.h> // for declaration of global errno variable
#include <fcntl.h>
-#include "py/nlr.h"
#include "py/runtime.h"
-#include "py/runtime0.h"
#include "py/stream.h"
#if MICROPY_PY_BTREE
@@ -281,7 +279,7 @@ STATIC mp_obj_t btree_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
}
}
-STATIC mp_obj_t btree_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
+STATIC mp_obj_t btree_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
mp_obj_btree_t *self = MP_OBJ_TO_PTR(lhs_in);
switch (op) {
case MP_BINARY_OP_IN: {
diff --git a/extmod/modframebuf.c b/extmod/modframebuf.c
index f4e857129..20e40d579 100644
--- a/extmod/modframebuf.c
+++ b/extmod/modframebuf.c
@@ -27,13 +27,11 @@
#include <stdio.h>
#include <string.h>
-#include "py/nlr.h"
-#include "py/obj.h"
#include "py/runtime.h"
#if MICROPY_PY_FRAMEBUF
-#include "stmhal/font_petme128_8x8.h"
+#include "ports/stm32/font_petme128_8x8.h"
typedef struct _mp_obj_framebuf_t {
mp_obj_base_t base;
diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index bde251cca..f7e776af9 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -29,7 +29,6 @@
#include <string.h>
#include <stdio.h>
-#include "py/nlr.h"
#include "py/objlist.h"
#include "py/runtime.h"
#include "py/stream.h"
@@ -129,15 +128,15 @@ STATIC mp_obj_t lwip_slip_make_new(mp_obj_t type_in, size_t n_args, size_t n_kw,
ip_addr_t iplocal, ipremote;
if (!ipaddr_aton(mp_obj_str_get_str(args[1]), &iplocal)) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "not a valid local IP"));
+ mp_raise_ValueError("not a valid local IP");
}
if (!ipaddr_aton(mp_obj_str_get_str(args[2]), &ipremote)) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "not a valid remote IP"));
+ mp_raise_ValueError("not a valid remote IP");
}
struct netif *n = &lwip_slip_obj.lwip_netif;
if (netif_add(n, &iplocal, IP_ADDR_BROADCAST, &ipremote, NULL, slipif_init, ip_input) == NULL) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "out of memory"));
+ mp_raise_ValueError("out of memory");
}
netif_set_up(n);
netif_set_default(n);
@@ -1033,7 +1032,7 @@ STATIC mp_obj_t lwip_socket_sendall(mp_obj_t self_in, mp_obj_t buf_in) {
break;
}
case MOD_NETWORK_SOCK_DGRAM:
- mp_not_implemented("");
+ mp_raise_NotImplementedError("");
break;
}
@@ -1070,7 +1069,7 @@ STATIC mp_obj_t lwip_socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_setblocking_obj, lwip_socket_setblocking);
-STATIC mp_obj_t lwip_socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) {
+STATIC mp_obj_t lwip_socket_setsockopt(size_t n_args, const mp_obj_t *args) {
(void)n_args; // always 4
lwip_socket_obj_t *socket = args[0];
@@ -1120,7 +1119,7 @@ STATIC mp_obj_t lwip_socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(lwip_socket_setsockopt_obj, 4, 4, lwip_socket_setsockopt);
-STATIC mp_obj_t lwip_socket_makefile(mp_uint_t n_args, const mp_obj_t *args) {
+STATIC mp_obj_t lwip_socket_makefile(size_t n_args, const mp_obj_t *args) {
(void)n_args;
return args[0];
}
diff --git a/extmod/modubinascii.c b/extmod/modubinascii.c
index d79191b3e..8256a50cf 100644
--- a/extmod/modubinascii.c
+++ b/extmod/modubinascii.c
@@ -28,13 +28,10 @@
#include <assert.h>
#include <string.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/binary.h"
#include "extmod/modubinascii.h"
-#include "uzlib/tinf.h"
-
mp_obj_t mod_binascii_hexlify(size_t n_args, const mp_obj_t *args) {
// Second argument is for an extension to allow a separator to be used
// between values.
@@ -105,54 +102,64 @@ mp_obj_t mod_binascii_unhexlify(mp_obj_t data) {
}
MP_DEFINE_CONST_FUN_OBJ_1(mod_binascii_unhexlify_obj, mod_binascii_unhexlify);
+// If ch is a character in the base64 alphabet, and is not a pad character, then
+// the corresponding integer between 0 and 63, inclusively, is returned.
+// Otherwise, -1 is returned.
+static int mod_binascii_sextet(byte ch) {
+ if (ch >= 'A' && ch <= 'Z') {
+ return ch - 'A';
+ } else if (ch >= 'a' && ch <= 'z') {
+ return ch - 'a' + 26;
+ } else if (ch >= '0' && ch <= '9') {
+ return ch - '0' + 52;
+ } else if (ch == '+') {
+ return 62;
+ } else if (ch == '/') {
+ return 63;
+ } else {
+ return -1;
+ }
+}
+
mp_obj_t mod_binascii_a2b_base64(mp_obj_t data) {
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(data, &bufinfo, MP_BUFFER_READ);
- if (bufinfo.len % 4 != 0) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "incorrect padding"));
- }
+ byte *in = bufinfo.buf;
vstr_t vstr;
- byte *in = bufinfo.buf;
- if (bufinfo.len == 0) {
- vstr_init_len(&vstr, 0);
- }
- else {
- vstr_init_len(&vstr, ((bufinfo.len / 4) * 3) - ((in[bufinfo.len-1] == '=') ? ((in[bufinfo.len-2] == '=') ? 2 : 1 ) : 0));
- }
- byte *out = (byte*)vstr.buf;
- for (mp_uint_t i = bufinfo.len; i; i -= 4) {
- char hold[4];
- for (int j = 4; j--;) {
- if (in[j] >= 'A' && in[j] <= 'Z') {
- hold[j] = in[j] - 'A';
- } else if (in[j] >= 'a' && in[j] <= 'z') {
- hold[j] = in[j] - 'a' + 26;
- } else if (in[j] >= '0' && in[j] <= '9') {
- hold[j] = in[j] - '0' + 52;
- } else if (in[j] == '+') {
- hold[j] = 62;
- } else if (in[j] == '/') {
- hold[j] = 63;
- } else if (in[j] == '=') {
- if (j < 2 || i > 4) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "incorrect padding"));
- }
- hold[j] = 64;
- } else {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "invalid character"));
+ vstr_init(&vstr, (bufinfo.len / 4) * 3 + 1); // Potentially over-allocate
+ byte *out = (byte *)vstr.buf;
+
+ uint shift = 0;
+ int nbits = 0; // Number of meaningful bits in shift
+ bool hadpad = false; // Had a pad character since last valid character
+ for (size_t i = 0; i < bufinfo.len; i++) {
+ if (in[i] == '=') {
+ if ((nbits == 2) || ((nbits == 4) && hadpad)) {
+ nbits = 0;
+ break;
}
+ hadpad = true;
}
- in += 4;
- *out++ = (hold[0]) << 2 | (hold[1]) >> 4;
- if (hold[2] != 64) {
- *out++ = (hold[1] & 0x0F) << 4 | hold[2] >> 2;
- if (hold[3] != 64) {
- *out++ = (hold[2] & 0x03) << 6 | hold[3];
- }
+ int sextet = mod_binascii_sextet(in[i]);
+ if (sextet == -1) {
+ continue;
+ }
+ hadpad = false;
+ shift = (shift << 6) | sextet;
+ nbits += 6;
+
+ if (nbits >= 8) {
+ nbits -= 8;
+ out[vstr.len++] = (shift >> nbits) & 0xFF;
}
}
+
+ if (nbits) {
+ mp_raise_ValueError("incorrect padding");
+ }
+
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
}
MP_DEFINE_CONST_FUN_OBJ_1(mod_binascii_a2b_base64_obj, mod_binascii_a2b_base64);
@@ -184,7 +191,7 @@ mp_obj_t mod_binascii_b2a_base64(mp_obj_t data) {
*out++ = (in[0] & 0x03) << 4;
*out++ = 64;
}
- *out++ = 64;
+ *out = 64;
}
// Second pass, we convert number base 64 values to actual base64 ascii encoding
@@ -211,6 +218,8 @@ mp_obj_t mod_binascii_b2a_base64(mp_obj_t data) {
MP_DEFINE_CONST_FUN_OBJ_1(mod_binascii_b2a_base64_obj, mod_binascii_b2a_base64);
#if MICROPY_PY_UBINASCII_CRC32
+#include "uzlib/tinf.h"
+
mp_obj_t mod_binascii_crc32(size_t n_args, const mp_obj_t *args) {
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(args[0], &bufinfo, MP_BUFFER_READ);
diff --git a/extmod/moductypes.c b/extmod/moductypes.c
index c2d226562..c3da083cf 100644
--- a/extmod/moductypes.c
+++ b/extmod/moductypes.c
@@ -28,7 +28,6 @@
#include <string.h>
#include <stdint.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/objtuple.h"
#include "py/binary.h"
@@ -118,7 +117,7 @@ typedef struct _mp_obj_uctypes_struct_t {
} mp_obj_uctypes_struct_t;
STATIC NORETURN void syntax_error(void) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "syntax error in uctypes descriptor"));
+ mp_raise_TypeError("syntax error in uctypes descriptor");
}
STATIC mp_obj_t uctypes_struct_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
@@ -215,7 +214,7 @@ STATIC mp_uint_t uctypes_struct_size(mp_obj_t desc_in, int layout_type, mp_uint_
// but scalar structure field is lowered into native Python int, so all
// type info is lost. So, we cannot say if it's scalar type description,
// or such lowered scalar.
- nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "Cannot unambiguously get sizeof scalar"));
+ mp_raise_TypeError("Cannot unambiguously get sizeof scalar");
}
syntax_error();
}
@@ -393,7 +392,7 @@ STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set
// TODO: Support at least OrderedDict in addition
if (!MP_OBJ_IS_TYPE(self->desc, &mp_type_dict)) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "struct: no fields"));
+ mp_raise_TypeError("struct: no fields");
}
mp_obj_t deref = mp_obj_dict_get(self->desc, MP_OBJ_NEW_QSTR(attr));
@@ -526,7 +525,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
} else {
// load / store
if (!MP_OBJ_IS_TYPE(self->desc, &mp_type_tuple)) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "struct: cannot index"));
+ mp_raise_TypeError("struct: cannot index");
}
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(self->desc);
diff --git a/extmod/moduhashlib.c b/extmod/moduhashlib.c
index f3beb3939..3fad69247 100644
--- a/extmod/moduhashlib.c
+++ b/extmod/moduhashlib.c
@@ -27,7 +27,6 @@
#include <assert.h>
#include <string.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#if MICROPY_PY_UHASHLIB
diff --git a/extmod/moduheapq.c b/extmod/moduheapq.c
index e6e417d2b..71c15368b 100644
--- a/extmod/moduheapq.c
+++ b/extmod/moduheapq.c
@@ -24,9 +24,7 @@
* THE SOFTWARE.
*/
-#include "py/nlr.h"
#include "py/objlist.h"
-#include "py/runtime0.h"
#include "py/runtime.h"
#if MICROPY_PY_UHEAPQ
@@ -35,7 +33,7 @@
STATIC mp_obj_list_t *get_heap(mp_obj_t heap_in) {
if (!MP_OBJ_IS_TYPE(heap_in, &mp_type_list)) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "heap must be a list"));
+ mp_raise_TypeError("heap must be a list");
}
return MP_OBJ_TO_PTR(heap_in);
}
diff --git a/extmod/modujson.c b/extmod/modujson.c
index f94ec7db8..f14682d26 100644
--- a/extmod/modujson.c
+++ b/extmod/modujson.c
@@ -26,7 +26,6 @@
#include <stdio.h>
-#include "py/nlr.h"
#include "py/objlist.h"
#include "py/objstringio.h"
#include "py/parsenum.h"
@@ -269,7 +268,7 @@ STATIC mp_obj_t mod_ujson_load(mp_obj_t stream_obj) {
return stack_top;
fail:
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "syntax error in JSON"));
+ mp_raise_ValueError("syntax error in JSON");
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_ujson_load_obj, mod_ujson_load);
diff --git a/extmod/modurandom.c b/extmod/modurandom.c
index 4b63dace4..1512a3fd4 100644
--- a/extmod/modurandom.c
+++ b/extmod/modurandom.c
@@ -27,7 +27,6 @@
#include <assert.h>
#include <string.h>
-//#include "py/nlr.h"
#include "py/runtime.h"
#if MICROPY_PY_URANDOM
diff --git a/extmod/modure.c b/extmod/modure.c
index b85ba2673..78de4706d 100644
--- a/extmod/modure.c
+++ b/extmod/modure.c
@@ -28,13 +28,15 @@
#include <assert.h>
#include <string.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/binary.h"
#include "py/objstr.h"
+#include "py/stackctrl.h"
#if MICROPY_PY_URE
+#define re1_5_stack_chk() MP_STACK_CHECK()
+
#include "re1.5/re1.5.h"
#define FLAG_DEBUG 0x1000
@@ -156,7 +158,7 @@ STATIC mp_obj_t re_split(size_t n_args, const mp_obj_t *args) {
mp_obj_t s = mp_obj_new_str_of_type(str_type, (const byte*)subj.begin, caps[0] - subj.begin);
mp_obj_list_append(retval, s);
if (self->re.sub > 0) {
- mp_not_implemented("Splitting with sub-captures");
+ mp_raise_NotImplementedError("Splitting with sub-captures");
}
subj.begin = caps[1];
if (maxsplit > 0 && --maxsplit == 0) {
@@ -200,7 +202,7 @@ STATIC mp_obj_t mod_re_compile(size_t n_args, const mp_obj_t *args) {
int error = re1_5_compilecode(&o->re, re_str);
if (error != 0) {
error:
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Error in regex"));
+ mp_raise_ValueError("Error in regex");
}
if (flags & FLAG_DEBUG) {
re1_5_dumpcode(&o->re);
diff --git a/extmod/modussl_axtls.c b/extmod/modussl_axtls.c
index 86dd8e29c..88a89a23d 100644
--- a/extmod/modussl_axtls.c
+++ b/extmod/modussl_axtls.c
@@ -27,7 +27,6 @@
#include <stdio.h>
#include <string.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/stream.h"
@@ -153,7 +152,7 @@ STATIC mp_obj_t socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in) {
// Currently supports only blocking mode
(void)self_in;
if (!mp_obj_is_true(flag_in)) {
- mp_not_implemented("");
+ mp_raise_NotImplementedError("");
}
return mp_const_none;
}
diff --git a/extmod/modussl_mbedtls.c b/extmod/modussl_mbedtls.c
index 597eaee73..d7316cb4a 100644
--- a/extmod/modussl_mbedtls.c
+++ b/extmod/modussl_mbedtls.c
@@ -31,7 +31,6 @@
#include <string.h>
#include <errno.h> // needed because mp_is_nonblocking_error uses system error codes
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/stream.h"
@@ -66,7 +65,7 @@ struct ssl_args {
STATIC const mp_obj_type_t ussl_socket_type;
-static void mbedtls_debug(void *ctx, int level, const char *file, int line, const char *str) {
+void mbedtls_debug(void *ctx, int level, const char *file, int line, const char *str) {
printf("DBG:%s:%04d: %s\n", file, line, str);
}
@@ -122,8 +121,10 @@ STATIC mp_obj_ssl_socket_t *socket_new(mp_obj_t sock, struct ssl_args *args) {
mbedtls_x509_crt_init(&o->cert);
mbedtls_pk_init(&o->pkey);
mbedtls_ctr_drbg_init(&o->ctr_drbg);
+ #ifdef MBEDTLS_DEBUG_C
// Debug level (0-4)
mbedtls_debug_set_threshold(0);
+ #endif
mbedtls_entropy_init(&o->entropy);
const byte seed[] = "upy";
@@ -143,7 +144,9 @@ STATIC mp_obj_ssl_socket_t *socket_new(mp_obj_t sock, struct ssl_args *args) {
mbedtls_ssl_conf_authmode(&o->conf, MBEDTLS_SSL_VERIFY_NONE);
mbedtls_ssl_conf_rng(&o->conf, mbedtls_ctr_drbg_random, &o->ctr_drbg);
+ #ifdef MBEDTLS_DEBUG_C
mbedtls_ssl_conf_dbg(&o->conf, mbedtls_debug, NULL);
+ #endif
ret = mbedtls_ssl_setup(&o->ssl, &o->conf);
if (ret != 0) {
@@ -189,6 +192,16 @@ STATIC mp_obj_ssl_socket_t *socket_new(mp_obj_t sock, struct ssl_args *args) {
return o;
}
+STATIC mp_obj_t mod_ssl_getpeercert(mp_obj_t o_in, mp_obj_t binary_form) {
+ mp_obj_ssl_socket_t *o = MP_OBJ_TO_PTR(o_in);
+ if (!mp_obj_is_true(binary_form)) {
+ mp_raise_NotImplementedError(NULL);
+ }
+ const mbedtls_x509_crt* peer_cert = mbedtls_ssl_get_peer_cert(&o->ssl);
+ return mp_obj_new_bytes(peer_cert->raw.p, peer_cert->raw.len);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_ssl_getpeercert_obj, mod_ssl_getpeercert);
+
STATIC void socket_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
(void)kind;
mp_obj_ssl_socket_t *self = MP_OBJ_TO_PTR(self_in);
@@ -259,6 +272,7 @@ STATIC const mp_rom_map_elem_t ussl_socket_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_stream_write_obj) },
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&socket_setblocking_obj) },
{ MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&socket_close_obj) },
+ { MP_ROM_QSTR(MP_QSTR_getpeercert), MP_ROM_PTR(&mod_ssl_getpeercert_obj) },
};
STATIC MP_DEFINE_CONST_DICT(ussl_socket_locals_dict, ussl_socket_locals_dict_table);
diff --git a/extmod/modutimeq.c b/extmod/modutimeq.c
index a19b3fda9..94cbd20d2 100644
--- a/extmod/modutimeq.c
+++ b/extmod/modutimeq.c
@@ -27,9 +27,7 @@
#include <string.h>
-#include "py/nlr.h"
#include "py/objlist.h"
-#include "py/runtime0.h"
#include "py/runtime.h"
#include "py/smallint.h"
@@ -189,7 +187,7 @@ STATIC mp_obj_t mod_utimeq_dump(mp_obj_t heap_in) {
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_utimeq_dump_obj, mod_utimeq_dump);
#endif
-STATIC mp_obj_t utimeq_unary_op(mp_uint_t op, mp_obj_t self_in) {
+STATIC mp_obj_t utimeq_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
mp_obj_utimeq_t *self = MP_OBJ_TO_PTR(self_in);
switch (op) {
case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->len != 0);
diff --git a/extmod/moduzlib.c b/extmod/moduzlib.c
index a05d0f2ed..e9af07370 100644
--- a/extmod/moduzlib.c
+++ b/extmod/moduzlib.c
@@ -27,7 +27,6 @@
#include <stdio.h>
#include <string.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/stream.h"
#include "py/mperrno.h"
@@ -92,7 +91,7 @@ STATIC mp_obj_t decompio_make_new(const mp_obj_type_t *type, size_t n_args, size
dict_opt = uzlib_zlib_parse_header(&o->decomp);
if (dict_opt < 0) {
header_error:
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "compression header"));
+ mp_raise_ValueError("compression header");
}
dict_sz = 1 << dict_opt;
} else {
diff --git a/extmod/modwebrepl.c b/extmod/modwebrepl.c
index d618f5370..4ff282aac 100644
--- a/extmod/modwebrepl.c
+++ b/extmod/modwebrepl.c
@@ -28,8 +28,6 @@
#include <stdint.h>
#include <string.h>
-#include "py/nlr.h"
-#include "py/obj.h"
#include "py/runtime.h"
#include "py/stream.h"
#include "py/builtin.h"
diff --git a/extmod/modwebsocket.c b/extmod/modwebsocket.c
index 6c6e32c1a..a651164b2 100644
--- a/extmod/modwebsocket.c
+++ b/extmod/modwebsocket.c
@@ -28,8 +28,6 @@
#include <stdint.h>
#include <string.h>
-#include "py/nlr.h"
-#include "py/obj.h"
#include "py/runtime.h"
#include "py/stream.h"
#include "extmod/modwebsocket.h"
diff --git a/extmod/re1.5/compilecode.c b/extmod/re1.5/compilecode.c
index e4635f034..3267a4190 100644
--- a/extmod/re1.5/compilecode.c
+++ b/extmod/re1.5/compilecode.c
@@ -55,7 +55,7 @@ static const char *_compilecode(const char *re, ByteProg *prog, int sizecode)
for (cnt = 0; *re != ']'; re++, cnt++) {
if (!*re) return NULL;
EMIT(PC++, *re);
- if (re[1] == '-') {
+ if (re[1] == '-' && re[2] != ']') {
re += 2;
}
EMIT(PC++, *re);
diff --git a/extmod/re1.5/re1.5.h b/extmod/re1.5/re1.5.h
index 815c5d33d..ba6f97b74 100644
--- a/extmod/re1.5/re1.5.h
+++ b/extmod/re1.5/re1.5.h
@@ -48,6 +48,9 @@ void printre(Regexp*);
#ifndef re1_5_fatal
void re1_5_fatal(char*);
#endif
+#ifndef re1_5_stack_chk
+#define re1_5_stack_chk()
+#endif
void *mal(int);
struct Prog
diff --git a/extmod/re1.5/recursiveloop.c b/extmod/re1.5/recursiveloop.c
index e8fef0304..bb337decf 100644
--- a/extmod/re1.5/recursiveloop.c
+++ b/extmod/re1.5/recursiveloop.c
@@ -9,7 +9,9 @@ recursiveloop(char *pc, const char *sp, Subject *input, const char **subp, int n
{
const char *old;
int off;
-
+
+ re1_5_stack_chk();
+
for(;;) {
if(inst_is_consumer(*pc)) {
// If we need to match a character, but there's none left, it's fail
diff --git a/extmod/uos_dupterm.c b/extmod/uos_dupterm.c
index 29a62ab89..1d6f02dce 100644
--- a/extmod/uos_dupterm.c
+++ b/extmod/uos_dupterm.c
@@ -27,7 +27,6 @@
#include <string.h>
#include "py/mpconfig.h"
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/objtuple.h"
#include "py/objarray.h"
@@ -68,7 +67,7 @@ void mp_uos_dupterm_tx_strn(const char *str, size_t len) {
}
}
-STATIC mp_obj_t mp_uos_dupterm(mp_uint_t n_args, const mp_obj_t *args) {
+STATIC mp_obj_t mp_uos_dupterm(size_t n_args, const mp_obj_t *args) {
if (n_args == 0) {
if (MP_STATE_PORT(term_obj) == MP_OBJ_NULL) {
return mp_const_none;
diff --git a/extmod/vfs.c b/extmod/vfs.c
index 3bdce80db..a1cd8d5f6 100644
--- a/extmod/vfs.c
+++ b/extmod/vfs.c
@@ -27,7 +27,6 @@
#include <stdint.h>
#include <string.h>
-#include "py/runtime0.h"
#include "py/runtime.h"
#include "py/objstr.h"
#include "py/mperrno.h"
diff --git a/extmod/vfs_fat.c b/extmod/vfs_fat.c
index 0ec3fe6d2..22346bdf1 100644
--- a/extmod/vfs_fat.c
+++ b/extmod/vfs_fat.c
@@ -33,7 +33,6 @@
#endif
#include <string.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/mperrno.h"
#include "lib/oofatfs/ff.h"
@@ -243,7 +242,7 @@ STATIC mp_obj_t fat_vfs_stat(mp_obj_t vfs_in, mp_obj_t path_in) {
t->items[3] = MP_OBJ_NEW_SMALL_INT(0); // st_nlink
t->items[4] = MP_OBJ_NEW_SMALL_INT(0); // st_uid
t->items[5] = MP_OBJ_NEW_SMALL_INT(0); // st_gid
- t->items[6] = MP_OBJ_NEW_SMALL_INT(fno.fsize); // st_size
+ t->items[6] = mp_obj_new_int_from_uint(fno.fsize); // st_size
t->items[7] = MP_OBJ_NEW_SMALL_INT(seconds); // st_atime
t->items[8] = MP_OBJ_NEW_SMALL_INT(seconds); // st_mtime
t->items[9] = MP_OBJ_NEW_SMALL_INT(seconds); // st_ctime
diff --git a/extmod/vfs_fat_file.c b/extmod/vfs_fat_file.c
index 8fb48f01a..1fcbb253d 100644
--- a/extmod/vfs_fat_file.c
+++ b/extmod/vfs_fat_file.c
@@ -29,7 +29,6 @@
#include <stdio.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "py/stream.h"
#include "py/mperrno.h"
diff --git a/extmod/vfs_fat_misc.c b/extmod/vfs_fat_misc.c
index 7c16db7e5..9a26b4a2f 100644
--- a/extmod/vfs_fat_misc.c
+++ b/extmod/vfs_fat_misc.c
@@ -28,7 +28,6 @@
#if MICROPY_VFS_FAT
#include <string.h>
-#include "py/nlr.h"
#include "py/runtime.h"
#include "lib/oofatfs/ff.h"
#include "extmod/vfs_fat.h"