Commit 9e215fa4 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

py: Make unichar_charlen() accept/return machine_uint_t.

parent a62da515
...@@ -372,7 +372,7 @@ STATIC mp_obj_t mp_builtin_ord(mp_obj_t o_in) { ...@@ -372,7 +372,7 @@ STATIC mp_obj_t mp_builtin_ord(mp_obj_t o_in) {
uint len; uint len;
const char *str = mp_obj_str_get_data(o_in, &len); const char *str = mp_obj_str_get_data(o_in, &len);
#if MICROPY_PY_BUILTINS_STR_UNICODE #if MICROPY_PY_BUILTINS_STR_UNICODE
uint charlen = unichar_charlen(str, len); machine_uint_t charlen = unichar_charlen(str, len);
if (charlen == 1) { if (charlen == 1) {
if (MP_OBJ_IS_STR(o_in) && UTF8_IS_NONASCII(*str)) { if (MP_OBJ_IS_STR(o_in) && UTF8_IS_NONASCII(*str)) {
machine_int_t ord = *str++ & 0x7F; machine_int_t ord = *str++ & 0x7F;
......
...@@ -100,7 +100,7 @@ bool unichar_isupper(unichar c); ...@@ -100,7 +100,7 @@ bool unichar_isupper(unichar c);
bool unichar_islower(unichar c); bool unichar_islower(unichar c);
unichar unichar_tolower(unichar c); unichar unichar_tolower(unichar c);
unichar unichar_toupper(unichar c); unichar unichar_toupper(unichar c);
uint unichar_charlen(const char *str, uint len); // TODO this should return machine_uint_t machine_uint_t unichar_charlen(const char *str, machine_uint_t len);
#define UTF8_IS_NONASCII(ch) ((ch) & 0x80) #define UTF8_IS_NONASCII(ch) ((ch) & 0x80)
#define UTF8_IS_CONT(ch) (((ch) & 0xC0) == 0x80) #define UTF8_IS_CONT(ch) (((ch) & 0xC0) == 0x80)
......
...@@ -1448,7 +1448,7 @@ STATIC mp_obj_t str_count(uint n_args, const mp_obj_t *args) { ...@@ -1448,7 +1448,7 @@ STATIC mp_obj_t str_count(uint n_args, const mp_obj_t *args) {
// if needle_len is zero then we count each gap between characters as an occurrence // if needle_len is zero then we count each gap between characters as an occurrence
if (needle_len == 0) { if (needle_len == 0) {
return MP_OBJ_NEW_SMALL_INT((machine_uint_t)unichar_charlen((const char*)start, end - start) + 1); return MP_OBJ_NEW_SMALL_INT(unichar_charlen((const char*)start, end - start) + 1);
} }
// count the occurrences // count the occurrences
......
...@@ -106,7 +106,7 @@ STATIC mp_obj_t uni_unary_op(int op, mp_obj_t self_in) { ...@@ -106,7 +106,7 @@ STATIC mp_obj_t uni_unary_op(int op, mp_obj_t self_in) {
case MP_UNARY_OP_BOOL: case MP_UNARY_OP_BOOL:
return MP_BOOL(str_len != 0); return MP_BOOL(str_len != 0);
case MP_UNARY_OP_LEN: case MP_UNARY_OP_LEN:
return MP_OBJ_NEW_SMALL_INT((machine_int_t)unichar_charlen((const char *)str_data, str_len)); return MP_OBJ_NEW_SMALL_INT(unichar_charlen((const char *)str_data, str_len));
default: default:
return MP_OBJ_NULL; // op not supported return MP_OBJ_NULL; // op not supported
} }
......
...@@ -107,11 +107,11 @@ machine_uint_t utf8_ptr_to_index(const char *s, const char *ptr) { ...@@ -107,11 +107,11 @@ machine_uint_t utf8_ptr_to_index(const char *s, const char *ptr) {
return i; return i;
} }
// TODO: Rename to str_charlen; return machine_uint_t // TODO: Rename to str_charlen
uint unichar_charlen(const char *str, uint len) machine_uint_t unichar_charlen(const char *str, machine_uint_t len)
{ {
#if MICROPY_PY_BUILTINS_STR_UNICODE #if MICROPY_PY_BUILTINS_STR_UNICODE
uint charlen = 0; machine_uint_t charlen = 0;
for (const char *top = str + len; str < top; ++str) { for (const char *top = str + len; str < top; ++str) {
if (!UTF8_IS_CONT(*str)) { if (!UTF8_IS_CONT(*str)) {
++charlen; ++charlen;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment