From dddb98db8b7544db0248843ad2450a7177adac4a Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Mon, 14 Mar 2016 22:34:03 +0000
Subject: [PATCH] py/parsenum: Use size_t to count bytes, and int for type of
 base arg.

size_t is the proper type to count number of bytes in a string.  The base
argument does not need to be a full mp_uint_t, int is enough.
---
 py/parsenum.c     | 5 +++--
 py/parsenum.h     | 6 ++----
 py/parsenumbase.c | 2 +-
 py/parsenumbase.h | 8 ++++----
 4 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/py/parsenum.c b/py/parsenum.c
index 57261de40..c73ae54a1 100644
--- a/py/parsenum.c
+++ b/py/parsenum.c
@@ -28,6 +28,7 @@
 #include <stdlib.h>
 
 #include "py/nlr.h"
+#include "py/parsenumbase.h"
 #include "py/parsenum.h"
 #include "py/smallint.h"
 
@@ -45,7 +46,7 @@ STATIC NORETURN void raise_exc(mp_obj_t exc, mp_lexer_t *lex) {
     nlr_raise(exc);
 }
 
-mp_obj_t mp_parse_num_integer(const char *restrict str_, mp_uint_t len, mp_uint_t base, mp_lexer_t *lex) {
+mp_obj_t mp_parse_num_integer(const char *restrict str_, size_t len, int base, mp_lexer_t *lex) {
     const byte *restrict str = (const byte *)str_;
     const byte *restrict top = str + len;
     bool neg = false;
@@ -169,7 +170,7 @@ typedef enum {
     PARSE_DEC_IN_EXP,
 } parse_dec_in_t;
 
-mp_obj_t mp_parse_num_decimal(const char *str, mp_uint_t len, bool allow_imag, bool force_complex, mp_lexer_t *lex) {
+mp_obj_t mp_parse_num_decimal(const char *str, size_t len, bool allow_imag, bool force_complex, mp_lexer_t *lex) {
 #if MICROPY_PY_BUILTINS_FLOAT
     const char *top = str + len;
     mp_float_t dec_val = 0;
diff --git a/py/parsenum.h b/py/parsenum.h
index 26aac49bc..f140cfc85 100644
--- a/py/parsenum.h
+++ b/py/parsenum.h
@@ -30,10 +30,8 @@
 #include "py/lexer.h"
 #include "py/obj.h"
 
-mp_uint_t mp_parse_num_base(const char *str, mp_uint_t len, mp_uint_t *base);
-
 // these functions raise a SyntaxError if lex!=NULL, else a ValueError
-mp_obj_t mp_parse_num_integer(const char *restrict str, mp_uint_t len, mp_uint_t base, mp_lexer_t *lex);
-mp_obj_t mp_parse_num_decimal(const char *str, mp_uint_t len, bool allow_imag, bool force_complex, mp_lexer_t *lex);
+mp_obj_t mp_parse_num_integer(const char *restrict str, size_t len, int base, mp_lexer_t *lex);
+mp_obj_t mp_parse_num_decimal(const char *str, size_t len, bool allow_imag, bool force_complex, mp_lexer_t *lex);
 
 #endif // __MICROPY_INCLUDED_PY_PARSENUM_H__
diff --git a/py/parsenumbase.c b/py/parsenumbase.c
index 31e4a9164..8d057af18 100644
--- a/py/parsenumbase.c
+++ b/py/parsenumbase.c
@@ -28,7 +28,7 @@
 
 // find real radix base, and strip preceding '0x', '0o' and '0b'
 // puts base in *base, and returns number of bytes to skip the prefix
-mp_uint_t mp_parse_num_base(const char *str, mp_uint_t len, mp_uint_t *base) {
+size_t mp_parse_num_base(const char *str, size_t len, int *base) {
     const byte *p = (const byte*)str;
     if (len <= 1) {
         goto no_prefix;
diff --git a/py/parsenumbase.h b/py/parsenumbase.h
index f8953ec83..9da9db841 100644
--- a/py/parsenumbase.h
+++ b/py/parsenumbase.h
@@ -23,11 +23,11 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#ifndef __MICROPY_INCLUDED_PY_PARSENUM_H__
-#define __MICROPY_INCLUDED_PY_PARSENUM_H__
+#ifndef __MICROPY_INCLUDED_PY_PARSENUMBASE_H__
+#define __MICROPY_INCLUDED_PY_PARSENUMBASE_H__
 
 #include "py/mpconfig.h"
 
-mp_uint_t mp_parse_num_base(const char *str, mp_uint_t len, mp_uint_t *base);
+size_t mp_parse_num_base(const char *str, size_t len, int *base);
 
-#endif // __MICROPY_INCLUDED_PY_PARSENUM_H__
+#endif // __MICROPY_INCLUDED_PY_PARSENUMBASE_H__
-- 
GitLab