22
33#include <ctype.h>
44#include <errno.h>
5- #include <stdio.h>
65#include <stdlib.h>
7- #include <string.h>
86
97#include "misc.h"
108#include "mpconfig.h"
@@ -21,8 +19,7 @@ long strtonum(const char *restrict s, int base) {
2119
2220 // check radix base
2321 if ((base != 0 && base < 2 ) || base > 36 ) {
24- printf ("ValueError: int() arg 2 must be >=2 and <= 36\n" );
25- return 0 ;
22+ nlr_jump (mp_obj_new_exception_msg (MP_QSTR_ValueError , "ValueError: int() arg 2 must be >=2 and <= 36" ));
2623 }
2724 // skip surrounded whitespace
2825 while (isspace ((c = * (p ++ ))));
@@ -87,75 +84,8 @@ long strtonum(const char *restrict s, int base) {
8784
8885value_error :
8986 nlr_jump (mp_obj_new_exception_msg_2_args (MP_QSTR_ValueError , "invalid literal for int() with base %d: '%s'" , (void * )(machine_uint_t )base , s ));
90- //printf("invalid literal for int() with base %d: '%s'\n", base, s);
91- //return 0;
9287}
9388
94- /*
95- int main(void) {
96- printf(" 0 %ld\n", strtonum("0", 0));
97- printf(" 1 %ld\n", strtonum("1", 0));
98- printf(" 1 %ld\n", strtonum("+1", 0));
99- printf(" -1 %ld\n", strtonum("-1", 0));
100- printf(" 0 %ld\n", strtonum("+0", 0));
101- printf(" 0 %ld\n", strtonum("-0", 0));
102- printf(" 1 %ld\n", strtonum("01", 0));
103- printf(" 9 %ld\n", strtonum("9", 0));
104- printf(" 10 %ld\n", strtonum("10", 0));
105- printf(" 10 %ld\n", strtonum("+10", 0));
106- printf("-10 %ld\n", strtonum("-10", 0));
107- printf(" 12 %ld\n", strtonum("12", 0));
108- printf("-12 %ld\n", strtonum("-12", 0));
109- printf(" 99 %ld\n", strtonum("99", 0));
110- printf("100 %ld\n", strtonum("100", 0));
111- printf("314 %ld\n", strtonum("314", 0));
112- printf("314 %ld\n", strtonum(" 314", 0));
113- printf("314 %ld\n", strtonum("314 ", 0));
114- printf("314 %ld\n", strtonum(" \t\t 314 \t\t ", 0));
115- printf(" 1 %ld\n", strtonum(" 1 ", 0));
116- printf(" -3 %ld\n", strtonum(" -3 ", 0));
117- printf(" 83 %ld\n", strtonum("0o123", 0));
118- printf(" 18 %ld\n", strtonum("0x12", 0));
119- printf(" 10 %ld\n", strtonum("0o12", 0));
120- printf(" 10 %ld\n", strtonum("0o12", 0));
121- printf(" 10 %ld\n", strtonum(" \t 0o12", 0));
122- printf(" 10 %ld\n", strtonum("0o12 \t ", 0));
123- printf(" 10 %ld\n", strtonum("0O12", 0));
124- printf(" 5 %ld\n", strtonum("0b101", 0));
125- printf(" 5 %ld\n", strtonum("0b101", 0));
126-
127- printf(" 0 %ld\n", strtonum("0", 10));
128- printf(" 1 %ld\n", strtonum("1", 10));
129- printf(" 1 %ld\n", strtonum(" \t 1 \t ", 10));
130- printf(" 11 %ld\n", strtonum("11", 10));
131- printf(" 17 %ld\n", strtonum("11", 16));
132- printf(" 9 %ld\n", strtonum("11", 8));
133- printf(" 3 %ld\n", strtonum("11", 2));
134- printf(" 37 %ld\n", strtonum("11", 36));
135- printf("4294967296 %ld\n", strtonum("4294967296", 0));
136-
137- printf("%ld\n", strtonum("x", 0));
138- printf("%ld\n", strtonum("1x", 0));
139- printf("%ld\n", strtonum(" 1x", 0));
140- printf("%ld\n", strtonum(" 1\02 ", 0));
141- printf("%ld\n", strtonum("", 0));
142- printf("%ld\n", strtonum(" ", 0));
143- printf("%ld\n", strtonum(" \t\t ", 0));
144- printf("%ld\n", strtonum("0x", 0));
145- printf("%ld\n", strtonum("0x", 16));
146- printf("%ld\n", strtonum("0o", 0));
147- printf("%ld\n", strtonum("0o", 8));
148- printf("%ld\n", strtonum("0b", 0));
149- printf("%ld\n", strtonum("0b", 2));
150- printf("%ld\n", strtonum("0b2", 2));
151- printf("%ld\n", strtonum("0o8", 8));
152- printf("%ld\n", strtonum("0xg", 16));
153-
154- printf("%ld\n", strtonum("1 1", 0));
155- printf("%ld\n", strtonum("18446744073709551616", 0));
156- }
157- */
158-
15989#else /* defined(UNIX) */
16090
16191long strtonum (const char * restrict s , int base ) {
0 commit comments