mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-21 14:50:44 +01:00
Upgrade to MicroPython 1.9.3
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* This file is part of the Micro Python project, http://micropython.org/
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
@@ -28,11 +28,9 @@
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "py/nlr.h"
|
||||
#include "py/unicode.h"
|
||||
#include "py/objstr.h"
|
||||
#include "py/objlist.h"
|
||||
#include "py/runtime0.h"
|
||||
#include "py/runtime.h"
|
||||
#include "py/stackctrl.h"
|
||||
|
||||
@@ -161,6 +159,11 @@ mp_obj_t mp_obj_str_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_
|
||||
if (str_hash == 0) {
|
||||
str_hash = qstr_compute_hash(str_data, str_len);
|
||||
}
|
||||
#if MICROPY_PY_BUILTINS_STR_UNICODE_CHECK
|
||||
if (!utf8_check(str_data, str_len)) {
|
||||
mp_raise_msg(&mp_type_UnicodeError, NULL);
|
||||
}
|
||||
#endif
|
||||
mp_obj_str_t *o = MP_OBJ_TO_PTR(mp_obj_new_str_of_type(type, NULL, str_len));
|
||||
o->data = str_data;
|
||||
o->hash = str_hash;
|
||||
@@ -168,6 +171,11 @@ mp_obj_t mp_obj_str_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_
|
||||
} else {
|
||||
mp_buffer_info_t bufinfo;
|
||||
mp_get_buffer_raise(args[0], &bufinfo, MP_BUFFER_READ);
|
||||
#if MICROPY_PY_BUILTINS_STR_UNICODE_CHECK
|
||||
if (!utf8_check(bufinfo.buf, bufinfo.len)) {
|
||||
mp_raise_msg(&mp_type_UnicodeError, NULL);
|
||||
}
|
||||
#endif
|
||||
return mp_obj_new_str(bufinfo.buf, bufinfo.len, false);
|
||||
}
|
||||
}
|
||||
@@ -280,7 +288,7 @@ const byte *find_subbytes(const byte *haystack, size_t hlen, const byte *needle,
|
||||
// Note: this function is used to check if an object is a str or bytes, which
|
||||
// works because both those types use it as their binary_op method. Revisit
|
||||
// MP_OBJ_IS_STR_OR_BYTES if this fact changes.
|
||||
mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||
mp_obj_t mp_obj_str_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||
// check for modulo
|
||||
if (op == MP_BINARY_OP_MODULO) {
|
||||
mp_obj_t *args = &rhs_in;
|
||||
@@ -347,8 +355,9 @@ mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||
rhs_data = bufinfo.buf;
|
||||
rhs_len = bufinfo.len;
|
||||
} else {
|
||||
// incompatible types
|
||||
return MP_OBJ_NULL; // op not supported
|
||||
// LHS is str and RHS has an incompatible type
|
||||
// (except if operation is EQUAL, but that's handled by mp_obj_equal)
|
||||
bad_implicit_conversion(rhs_in);
|
||||
}
|
||||
|
||||
switch (op) {
|
||||
@@ -379,9 +388,10 @@ mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||
case MP_BINARY_OP_MORE:
|
||||
case MP_BINARY_OP_MORE_EQUAL:
|
||||
return mp_obj_new_bool(mp_seq_cmp_bytes(op, lhs_data, lhs_len, rhs_data, rhs_len));
|
||||
}
|
||||
|
||||
return MP_OBJ_NULL; // op not supported
|
||||
default:
|
||||
return MP_OBJ_NULL; // op not supported
|
||||
}
|
||||
}
|
||||
|
||||
#if !MICROPY_PY_BUILTINS_STR_UNICODE
|
||||
@@ -403,7 +413,7 @@ STATIC mp_obj_t bytes_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
|
||||
mp_bound_slice_t slice;
|
||||
if (!mp_seq_get_fast_slice_indexes(self_len, index, &slice)) {
|
||||
mp_not_implemented("only slices with step=1 (aka None) are supported");
|
||||
mp_raise_NotImplementedError("only slices with step=1 (aka None) are supported");
|
||||
}
|
||||
return mp_obj_new_str_of_type(type, self_data + slice.start, slice.stop - slice.start);
|
||||
}
|
||||
@@ -617,7 +627,7 @@ STATIC mp_obj_t str_rsplit(size_t n_args, const mp_obj_t *args) {
|
||||
mp_int_t idx = splits;
|
||||
|
||||
if (sep == mp_const_none) {
|
||||
mp_not_implemented("rsplit(None,n)");
|
||||
mp_raise_NotImplementedError("rsplit(None,n)");
|
||||
} else {
|
||||
size_t sep_len;
|
||||
const char *sep_str = mp_obj_str_get_data(sep, &sep_len);
|
||||
@@ -725,7 +735,8 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(str_rindex_obj, 2, 4, str_rindex);
|
||||
STATIC mp_obj_t str_startswith(size_t n_args, const mp_obj_t *args) {
|
||||
const mp_obj_type_t *self_type = mp_obj_get_type(args[0]);
|
||||
GET_STR_DATA_LEN(args[0], str, str_len);
|
||||
GET_STR_DATA_LEN(args[1], prefix, prefix_len);
|
||||
size_t prefix_len;
|
||||
const char *prefix = mp_obj_str_get_data(args[1], &prefix_len);
|
||||
const byte *start = str;
|
||||
if (n_args > 2) {
|
||||
start = str_index_to_ptr(self_type, str, str_len, args[2], true);
|
||||
@@ -739,9 +750,10 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(str_startswith_obj, 2, 3, str_startswith);
|
||||
|
||||
STATIC mp_obj_t str_endswith(size_t n_args, const mp_obj_t *args) {
|
||||
GET_STR_DATA_LEN(args[0], str, str_len);
|
||||
GET_STR_DATA_LEN(args[1], suffix, suffix_len);
|
||||
size_t suffix_len;
|
||||
const char *suffix = mp_obj_str_get_data(args[1], &suffix_len);
|
||||
if (n_args > 2) {
|
||||
mp_not_implemented("start/end indices");
|
||||
mp_raise_NotImplementedError("start/end indices");
|
||||
}
|
||||
|
||||
if (suffix_len > str_len) {
|
||||
@@ -763,7 +775,7 @@ STATIC mp_obj_t str_uni_strip(int type, size_t n_args, const mp_obj_t *args) {
|
||||
|
||||
if (n_args == 1) {
|
||||
chars_to_del = whitespace;
|
||||
chars_to_del_len = sizeof(whitespace);
|
||||
chars_to_del_len = sizeof(whitespace) - 1;
|
||||
} else {
|
||||
if (mp_obj_get_type(args[1]) != self_type) {
|
||||
bad_implicit_conversion(args[1]);
|
||||
@@ -1043,7 +1055,7 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
|
||||
arg = key_elem->value;
|
||||
}
|
||||
if (field_name < field_name_top) {
|
||||
mp_not_implemented("attributes not supported yet");
|
||||
mp_raise_NotImplementedError("attributes not supported yet");
|
||||
}
|
||||
} else {
|
||||
if (*arg_i < 0) {
|
||||
@@ -1961,8 +1973,8 @@ const mp_obj_type_t mp_type_bytes = {
|
||||
.locals_dict = (mp_obj_dict_t*)&str8_locals_dict,
|
||||
};
|
||||
|
||||
// the zero-length bytes
|
||||
const mp_obj_str_t mp_const_empty_bytes_obj = {{&mp_type_bytes}, 0, 0, NULL};
|
||||
// The zero-length bytes object, with data that includes a null-terminating byte
|
||||
const mp_obj_str_t mp_const_empty_bytes_obj = {{&mp_type_bytes}, 0, 0, (const byte*)""};
|
||||
|
||||
// Create a str/bytes object using the given data. New memory is allocated and
|
||||
// the data is copied across.
|
||||
|
||||
Reference in New Issue
Block a user