From c8effff937442be01d36d56c77054bbdee3f3aff Mon Sep 17 00:00:00 2001 From: Dave Hylands Date: Sun, 12 Jan 2014 22:34:58 -0800 Subject: [PATCH 1/7] Added public domain implementations of strchr and strstr. --- py/objstr.c | 1 + stm/std.h | 2 ++ stm/string0.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/py/objstr.c b/py/objstr.c index be1f00e68..48a21c9ca 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "nlr.h" #include "misc.h" diff --git a/stm/std.h b/stm/std.h index 587b9f888..95c606e05 100644 --- a/stm/std.h +++ b/stm/std.h @@ -17,6 +17,8 @@ int strncmp(const char *s1, const char *s2, size_t n); char *strndup(const char *s, size_t n); char *strcpy(char *dest, const char *src); char *strcat(char *dest, const char *src); +char *strchr(const char *s, int c); +char *strstr(const char *haystack, const char *needle); int printf(const char *fmt, ...); int snprintf(char *str, size_t size, const char *fmt, ...); diff --git a/stm/string0.c b/stm/string0.c index 2a5f25597..d67c5f2b1 100644 --- a/stm/string0.c +++ b/stm/string0.c @@ -108,3 +108,31 @@ char *strcat(char *dest, const char *src) { *d = '\0'; return dest; } + +// Public Domain implementation of strchr from: +// http://en.wikibooks.org/wiki/C_Programming/Strings#The_strchr_function +char *strchr(const char *s, int c) +{ + /* Scan s for the character. When this loop is finished, + s will either point to the end of the string or the + character we were looking for. */ + while (*s != '\0' && *s != (char)c) + s++; + return ((*s == c) ? (char *) s : 0); +} + + +// Public Domain implementation of strstr from: +// http://en.wikibooks.org/wiki/C_Programming/Strings#The_strstr_function +char *strstr(const char *haystack, const char *needle) +{ + size_t needlelen; + /* Check for the null needle case. */ + if (*needle == '\0') + return (char *) haystack; + needlelen = strlen(needle); + for (; (haystack = strchr(haystack, *needle)) != 0; haystack++) + if (strncmp(haystack, needle, needlelen) == 0) + return (char *) haystack; + return 0; +} From a23a24f89c4b7e05d269aafb54a3d539dd1caa03 Mon Sep 17 00:00:00 2001 From: Mark Schafer Date: Tue, 14 Jan 2014 01:48:59 +1300 Subject: [PATCH 2/7] logo gradients in master SVG, png Also new vector_log png with alpha --- logo/vector-logo-3.png | Bin 0 -> 114034 bytes logo/vector-logo-inkscape_master.svg | 2163 ++++++++++++++++++++++++-- 2 files changed, 2024 insertions(+), 139 deletions(-) create mode 100644 logo/vector-logo-3.png diff --git a/logo/vector-logo-3.png b/logo/vector-logo-3.png new file mode 100644 index 0000000000000000000000000000000000000000..ba75b0562416f5e1ad79d49715862cd724acf275 GIT binary patch literal 114034 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 + inkscape:current-layer="layer3" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -373,7 +2243,7 @@ image/svg+xml - + @@ -736,176 +2606,191 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccscccccccccccccccscsccsscccsccccscsccscccccsscssscsssscsscscssscssssscssscscccsssscscccccsccssccssssscccccccccccccccccccccccsccssscsscccsssccsscsccscccccccsscssccssccsssccssccccccsssscsssscssssccscscsccscscscsccsscsccscccccccccccccccccccccccccccssccssccscssccssscccccccccccccscsssscssssscsscsssssssscsccssccscccccsssssssssccscc" /> + id="g5271" + transform="translate(-18.659191,-7.4636765)"> - + d="m 92.180672,637.64386 -22.366085,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5323);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-4" + d="m 108.64278,643.66805 -22.366085,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5325);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-5" + d="m 124.83462,649.62094 -22.36609,12.91306 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5327);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-0" + d="m 141.26457,655.81193 -22.36608,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5329);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-9" + d="m 157.69453,662.00293 -22.36608,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5331);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-7" + d="m 173.64825,667.9558 -22.36608,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5333);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-41" + d="m 190.07821,673.67057 -22.36608,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5335);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-2" + d="m 207.22251,679.38534 -22.36609,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5337);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-21" + d="m 223.17623,685.33822 -22.36609,12.91306 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5339);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-6" + d="m 239.8443,691.2911 -22.36609,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5341);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-59" + d="m 256.27425,697.4821 -22.36609,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5343);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-1" + d="m 272.70421,702.95875 -22.36609,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5345);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-42" + d="m 288.89604,709.38786 -22.36609,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5347);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-73" + d="m 304.84977,715.57886 -22.36609,12.91307 0,30.03328" /> + style="fill:none;stroke:url(#linearGradient5349);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-72" + d="m 321.75595,720.57928 -22.36609,12.91307 0,30.03328" /> - - - - - - - - - - - - - - - + style="fill:none;stroke:url(#linearGradient5351);stroke-width:9.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" + id="path3292-8-3" + d="m 338.18591,726.77028 -22.36609,12.91307 0,30.03328" /> + + + + + + + + + + + + + + + + + + + + Date: Mon, 13 Jan 2014 08:42:43 -0800 Subject: [PATCH 3/7] Initialize is_kw for dynamically allocated mp_obj_fun_native_t ojects. This should fix issue #171 --- py/objfun.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/py/objfun.c b/py/objfun.c index afac3889f..b8ebce7a3 100644 --- a/py/objfun.c +++ b/py/objfun.c @@ -101,6 +101,7 @@ const mp_obj_type_t fun_native_type = { mp_obj_t rt_make_function_0(mp_fun_0_t fun) { mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); o->base.type = &fun_native_type; + o->is_kw = false; o->n_args_min = 0; o->n_args_max = 0; o->fun = fun; @@ -110,6 +111,7 @@ mp_obj_t rt_make_function_0(mp_fun_0_t fun) { mp_obj_t rt_make_function_1(mp_fun_1_t fun) { mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); o->base.type = &fun_native_type; + o->is_kw = false; o->n_args_min = 1; o->n_args_max = 1; o->fun = fun; @@ -119,6 +121,7 @@ mp_obj_t rt_make_function_1(mp_fun_1_t fun) { mp_obj_t rt_make_function_2(mp_fun_2_t fun) { mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); o->base.type = &fun_native_type; + o->is_kw = false; o->n_args_min = 2; o->n_args_max = 2; o->fun = fun; @@ -128,6 +131,7 @@ mp_obj_t rt_make_function_2(mp_fun_2_t fun) { mp_obj_t rt_make_function_3(mp_fun_3_t fun) { mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); o->base.type = &fun_native_type; + o->is_kw = false; o->n_args_min = 3; o->n_args_max = 3; o->fun = fun; @@ -137,6 +141,7 @@ mp_obj_t rt_make_function_3(mp_fun_3_t fun) { mp_obj_t rt_make_function_var(int n_args_min, mp_fun_var_t fun) { mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); o->base.type = &fun_native_type; + o->is_kw = false; o->n_args_min = n_args_min; o->n_args_max = ~((machine_uint_t)0); o->fun = fun; @@ -147,6 +152,7 @@ mp_obj_t rt_make_function_var(int n_args_min, mp_fun_var_t fun) { mp_obj_t rt_make_function_var_between(int n_args_min, int n_args_max, mp_fun_var_t fun) { mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); o->base.type = &fun_native_type; + o->is_kw = false; o->n_args_min = n_args_min; o->n_args_max = n_args_max; o->fun = fun; From 2300537c79dd642a7187018334a1a697a415f589 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 13 Jan 2014 19:39:01 +0000 Subject: [PATCH 4/7] Cleanup built-ins, and fix some compiler warnings/errors. --- py/builtin.c | 72 ++++++++++++++++++++++++++++++++-------------- py/builtin.h | 35 +++++++++++----------- py/builtinimport.c | 2 +- py/mpconfig.h | 2 +- py/objint.c | 4 +++ py/objstr.c | 15 ++++++---- py/runtime.c | 32 ++++++++++----------- stm/printf.c | 4 +-- 8 files changed, 101 insertions(+), 65 deletions(-) diff --git a/py/builtin.c b/py/builtin.c index 078f4b49c..389274f31 100644 --- a/py/builtin.c +++ b/py/builtin.c @@ -18,7 +18,7 @@ // args[0] is function from class body // args[1] is class name // args[2:] are base objects -mp_obj_t mp_builtin___build_class__(int n_args, const mp_obj_t *args) { +static mp_obj_t mp_builtin___build_class__(int n_args, const mp_obj_t *args) { assert(2 <= n_args); // we differ from CPython: we set the new __locals__ object here @@ -62,7 +62,7 @@ mp_obj_t mp_builtin___build_class__(int n_args, const mp_obj_t *args) { MP_DEFINE_CONST_FUN_OBJ_VAR(mp_builtin___build_class___obj, 2, mp_builtin___build_class__); -mp_obj_t mp_builtin___repl_print__(mp_obj_t o) { +static mp_obj_t mp_builtin___repl_print__(mp_obj_t o) { if (o != mp_const_none) { mp_obj_print(o); printf("\n"); @@ -70,6 +70,8 @@ mp_obj_t mp_builtin___repl_print__(mp_obj_t o) { return mp_const_none; } +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin___repl_print___obj, mp_builtin___repl_print__); + mp_obj_t mp_builtin_abs(mp_obj_t o_in) { if (MP_OBJ_IS_SMALL_INT(o_in)) { mp_small_int_t val = MP_OBJ_SMALL_INT_VALUE(o_in); @@ -97,7 +99,9 @@ mp_obj_t mp_builtin_abs(mp_obj_t o_in) { } } -mp_obj_t mp_builtin_all(mp_obj_t o_in) { +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_abs_obj, mp_builtin_abs); + +static mp_obj_t mp_builtin_all(mp_obj_t o_in) { mp_obj_t iterable = rt_getiter(o_in); mp_obj_t item; while ((item = rt_iternext(iterable)) != mp_const_stop_iteration) { @@ -108,7 +112,9 @@ mp_obj_t mp_builtin_all(mp_obj_t o_in) { return mp_const_true; } -mp_obj_t mp_builtin_any(mp_obj_t o_in) { +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_all_obj, mp_builtin_all); + +static mp_obj_t mp_builtin_any(mp_obj_t o_in) { mp_obj_t iterable = rt_getiter(o_in); mp_obj_t item; while ((item = rt_iternext(iterable)) != mp_const_stop_iteration) { @@ -119,7 +125,9 @@ mp_obj_t mp_builtin_any(mp_obj_t o_in) { return mp_const_false; } -mp_obj_t mp_builtin_callable(mp_obj_t o_in) { +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_any_obj, mp_builtin_any); + +static mp_obj_t mp_builtin_callable(mp_obj_t o_in) { if (mp_obj_is_callable(o_in)) { return mp_const_true; } else { @@ -127,7 +135,9 @@ mp_obj_t mp_builtin_callable(mp_obj_t o_in) { } } -mp_obj_t mp_builtin_chr(mp_obj_t o_in) { +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_callable_obj, mp_builtin_callable); + +static mp_obj_t mp_builtin_chr(mp_obj_t o_in) { int ord = mp_obj_get_int(o_in); if (0 <= ord && ord <= 0x10ffff) { char *str = m_new(char, 2); @@ -139,7 +149,9 @@ mp_obj_t mp_builtin_chr(mp_obj_t o_in) { } } -mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in) { +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_chr_obj, mp_builtin_chr); + +static mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in) { if (MP_OBJ_IS_SMALL_INT(o1_in) && MP_OBJ_IS_SMALL_INT(o2_in)) { mp_small_int_t i1 = MP_OBJ_SMALL_INT_VALUE(o1_in); mp_small_int_t i2 = MP_OBJ_SMALL_INT_VALUE(o2_in); @@ -152,6 +164,8 @@ mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in) { } } +MP_DEFINE_CONST_FUN_OBJ_2(mp_builtin_divmod_obj, mp_builtin_divmod); + static mp_obj_t mp_builtin_hash(mp_obj_t o_in) { // TODO hash will generally overflow small integer; can we safely truncate it? return mp_obj_new_int(mp_obj_hash(o_in)); @@ -165,7 +179,7 @@ static mp_obj_t mp_builtin_iter(mp_obj_t o_in) { MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_iter_obj, mp_builtin_iter); -mp_obj_t mp_builtin_len(mp_obj_t o_in) { +static mp_obj_t mp_builtin_len(mp_obj_t o_in) { mp_obj_t len = mp_obj_len_maybe(o_in); if (len == NULL) { nlr_jump(mp_obj_new_exception_msg_varg(MP_QSTR_TypeError, "object of type '%s' has no len()", mp_obj_get_type_str(o_in))); @@ -174,7 +188,9 @@ mp_obj_t mp_builtin_len(mp_obj_t o_in) { } } -mp_obj_t mp_builtin_max(int n_args, const mp_obj_t *args) { +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_len_obj, mp_builtin_len); + +static mp_obj_t mp_builtin_max(int n_args, const mp_obj_t *args) { if (n_args == 1) { // given an iterable mp_obj_t iterable = rt_getiter(args[0]); @@ -201,7 +217,9 @@ mp_obj_t mp_builtin_max(int n_args, const mp_obj_t *args) { } } -mp_obj_t mp_builtin_min(int n_args, const mp_obj_t *args) { +MP_DEFINE_CONST_FUN_OBJ_VAR(mp_builtin_max_obj, 1, mp_builtin_max); + +static mp_obj_t mp_builtin_min(int n_args, const mp_obj_t *args) { if (n_args == 1) { // given an iterable mp_obj_t iterable = rt_getiter(args[0]); @@ -228,6 +246,8 @@ mp_obj_t mp_builtin_min(int n_args, const mp_obj_t *args) { } } +MP_DEFINE_CONST_FUN_OBJ_VAR(mp_builtin_min_obj, 1, mp_builtin_min); + static mp_obj_t mp_builtin_next(mp_obj_t o) { mp_obj_t ret = rt_iternext(o); if (ret == mp_const_stop_iteration) { @@ -239,7 +259,7 @@ static mp_obj_t mp_builtin_next(mp_obj_t o) { MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_next_obj, mp_builtin_next); -mp_obj_t mp_builtin_ord(mp_obj_t o_in) { +static mp_obj_t mp_builtin_ord(mp_obj_t o_in) { const char *str = qstr_str(mp_obj_get_qstr(o_in)); if (strlen(str) == 1) { return mp_obj_new_int(str[0]); @@ -248,15 +268,19 @@ mp_obj_t mp_builtin_ord(mp_obj_t o_in) { } } -mp_obj_t mp_builtin_pow(int n_args, const mp_obj_t *args) { +MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_ord_obj, mp_builtin_ord); + +static mp_obj_t mp_builtin_pow(int n_args, const mp_obj_t *args) { + assert(2 <= n_args && n_args <= 3); switch (n_args) { case 2: return rt_binary_op(RT_BINARY_OP_POWER, args[0], args[1]); - case 3: return rt_binary_op(RT_BINARY_OP_MODULO, rt_binary_op(RT_BINARY_OP_POWER, args[0], args[1]), args[2]); // TODO optimise... - default: nlr_jump(mp_obj_new_exception_msg_varg(MP_QSTR_TypeError, "pow expected at most 3 arguments, got %d", n_args)); + default: return rt_binary_op(RT_BINARY_OP_MODULO, rt_binary_op(RT_BINARY_OP_POWER, args[0], args[1]), args[2]); // TODO optimise... } } -mp_obj_t mp_builtin_print(int n_args, const mp_obj_t *args) { +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_pow_obj, 2, 3, mp_builtin_pow); + +static mp_obj_t mp_builtin_print(int n_args, const mp_obj_t *args) { for (int i = 0; i < n_args; i++) { if (i > 0) { printf(" "); @@ -273,21 +297,25 @@ mp_obj_t mp_builtin_print(int n_args, const mp_obj_t *args) { return mp_const_none; } -mp_obj_t mp_builtin_range(int n_args, const mp_obj_t *args) { +MP_DEFINE_CONST_FUN_OBJ_VAR(mp_builtin_print_obj, 0, mp_builtin_print); + +static mp_obj_t mp_builtin_range(int n_args, const mp_obj_t *args) { + assert(1 <= n_args && n_args <= 3); switch (n_args) { case 1: return mp_obj_new_range(0, mp_obj_get_int(args[0]), 1); case 2: return mp_obj_new_range(mp_obj_get_int(args[0]), mp_obj_get_int(args[1]), 1); - case 3: return mp_obj_new_range(mp_obj_get_int(args[0]), mp_obj_get_int(args[1]), mp_obj_get_int(args[2])); - default: nlr_jump(mp_obj_new_exception_msg_varg(MP_QSTR_TypeError, "range expected at most 3 arguments, got %d", n_args)); + default: return mp_obj_new_range(mp_obj_get_int(args[0]), mp_obj_get_int(args[1]), mp_obj_get_int(args[2])); } } -mp_obj_t mp_builtin_sum(int n_args, const mp_obj_t *args) { +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_range_obj, 1, 3, mp_builtin_range); + +static mp_obj_t mp_builtin_sum(int n_args, const mp_obj_t *args) { + assert(1 <= n_args && n_args <= 2); mp_obj_t value; switch (n_args) { case 1: value = mp_obj_new_int(0); break; - case 2: value = args[1]; break; - default: nlr_jump(mp_obj_new_exception_msg_varg(MP_QSTR_TypeError, "sum expected at most 2 arguments, got %d", n_args)); + default: value = args[1]; break; } mp_obj_t iterable = rt_getiter(args[0]); mp_obj_t item; @@ -296,3 +324,5 @@ mp_obj_t mp_builtin_sum(int n_args, const mp_obj_t *args) { } return value; } + +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_sum_obj, 1, 2, mp_builtin_sum); diff --git a/py/builtin.h b/py/builtin.h index db7d517a0..0198d63bf 100644 --- a/py/builtin.h +++ b/py/builtin.h @@ -1,25 +1,24 @@ -// TODO convert all these to objects using MP_DECLARE and MP_DEFINE +mp_obj_t mp_builtin___import__(int n_args, mp_obj_t *args); MP_DECLARE_CONST_FUN_OBJ(mp_builtin___build_class___obj); -mp_obj_t mp_builtin___import__(int n, mp_obj_t *args); -mp_obj_t mp_builtin___repl_print__(mp_obj_t o); -mp_obj_t mp_builtin_abs(mp_obj_t o_in); -mp_obj_t mp_builtin_all(mp_obj_t o_in); -mp_obj_t mp_builtin_any(mp_obj_t o_in); -mp_obj_t mp_builtin_callable(mp_obj_t o_in); -mp_obj_t mp_builtin_chr(mp_obj_t o_in); -mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin___repl_print___obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_abs_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_all_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_any_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_callable_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_chr_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_divmod_obj); MP_DECLARE_CONST_FUN_OBJ(mp_builtin_hash_obj); MP_DECLARE_CONST_FUN_OBJ(mp_builtin_isinstance_obj); MP_DECLARE_CONST_FUN_OBJ(mp_builtin_issubclass_obj); MP_DECLARE_CONST_FUN_OBJ(mp_builtin_iter_obj); -mp_obj_t mp_builtin_len(mp_obj_t o_in); -mp_obj_t mp_builtin_list(int n_args, const mp_obj_t *args); -mp_obj_t mp_builtin_max(int n_args, const mp_obj_t *args); -mp_obj_t mp_builtin_min(int n_args, const mp_obj_t *args); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_len_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_list_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_max_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_min_obj); MP_DECLARE_CONST_FUN_OBJ(mp_builtin_next_obj); -mp_obj_t mp_builtin_ord(mp_obj_t o_in); -mp_obj_t mp_builtin_pow(int n_args, const mp_obj_t *args); -mp_obj_t mp_builtin_print(int n_args, const mp_obj_t *args); -mp_obj_t mp_builtin_range(int n_args, const mp_obj_t *args); -mp_obj_t mp_builtin_sum(int n_args, const mp_obj_t *args); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_ord_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_pow_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_print_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_range_obj); +MP_DECLARE_CONST_FUN_OBJ(mp_builtin_sum_obj); diff --git a/py/builtinimport.c b/py/builtinimport.c index 90a0fc339..33576e3f0 100644 --- a/py/builtinimport.c +++ b/py/builtinimport.c @@ -18,7 +18,7 @@ #include "map.h" #include "builtin.h" -mp_obj_t mp_builtin___import__(int n, mp_obj_t *args) { +mp_obj_t mp_builtin___import__(int n_args, mp_obj_t *args) { /* printf("import:\n"); for (int i = 0; i < n; i++) { diff --git a/py/mpconfig.h b/py/mpconfig.h index ada4aa2ea..5d8c57692 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -91,7 +91,7 @@ typedef long long mp_longint_impl_t; #define BITS_PER_BYTE (8) #define BITS_PER_WORD (BITS_PER_BYTE * BYTES_PER_WORD) // machine_int_t value with most significant bit set -#define WORD_MSBIT_HIGH (1 << (BYTES_PER_WORD * 8 - 1)) +#define WORD_MSBIT_HIGH (((machine_uint_t)1) << (BYTES_PER_WORD * 8 - 1)) // printf format spec to use for machine_int_t and friends #ifndef INT_FMT diff --git a/py/objint.c b/py/objint.c index 26d3c0e33..84c35c508 100644 --- a/py/objint.c +++ b/py/objint.c @@ -54,11 +54,13 @@ void int_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj // This is called only for non-SMALL_INT mp_obj_t int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { assert(0); + return mp_const_none; } // This is called only with strings whose value doesn't fit in SMALL_INT mp_obj_t mp_obj_new_int_from_long_str(const char *s) { assert(0); + return mp_const_none; } mp_obj_t mp_obj_new_int_from_uint(machine_uint_t value) { @@ -69,6 +71,7 @@ mp_obj_t mp_obj_new_int_from_uint(machine_uint_t value) { } // TODO: Raise exception assert(0); + return mp_const_none; } mp_obj_t mp_obj_new_int(machine_int_t value) { @@ -77,5 +80,6 @@ mp_obj_t mp_obj_new_int(machine_int_t value) { } // TODO: Raise exception assert(0); + return mp_const_none; } #endif diff --git a/py/objstr.c b/py/objstr.c index be1f00e68..f48bde600 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -169,8 +169,8 @@ static mp_obj_t str_find(int n_args, const mp_obj_t *args) { const char* haystack = qstr_str(((mp_obj_str_t*)args[0])->qstr); const char* needle = qstr_str(((mp_obj_str_t*)args[1])->qstr); - ssize_t haystack_len = strlen(haystack); - ssize_t needle_len = strlen(needle); + size_t haystack_len = strlen(haystack); + size_t needle_len = strlen(needle); size_t start = 0; size_t end = haystack_len; @@ -183,14 +183,17 @@ static mp_obj_t str_find(int n_args, const mp_obj_t *args) { } char *p = strstr(haystack + start, needle); - ssize_t pos = -1; - if (p) { - pos = p - haystack; + if (p == NULL) { + // not found + return MP_OBJ_NEW_SMALL_INT(-1); + } else { + // found + machine_int_t pos = p - haystack; if (pos + needle_len > end) { pos = -1; } + return MP_OBJ_NEW_SMALL_INT(pos); } - return MP_OBJ_NEW_SMALL_INT(pos); } mp_obj_t str_strip(int n_args, const mp_obj_t *args) { diff --git a/py/runtime.c b/py/runtime.c index 2af86b6ab..766a321bc 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -97,7 +97,7 @@ void rt_init(void) { // built-in core functions mp_map_add_qstr(&map_builtins, MP_QSTR___build_class__, (mp_obj_t)&mp_builtin___build_class___obj); - mp_map_add_qstr(&map_builtins, MP_QSTR___repl_print__, rt_make_function_1(mp_builtin___repl_print__)); + mp_map_add_qstr(&map_builtins, MP_QSTR___repl_print__, (mp_obj_t)&mp_builtin___repl_print___obj); // built-in types mp_map_add_qstr(&map_builtins, MP_QSTR_bool, (mp_obj_t)&bool_type); @@ -114,26 +114,26 @@ void rt_init(void) { mp_map_add_qstr(&map_builtins, MP_QSTR_tuple, (mp_obj_t)&tuple_type); mp_map_add_qstr(&map_builtins, MP_QSTR_type, (mp_obj_t)&mp_const_type); - // built-in user functions; TODO covert all to &mp_builtin_xxx's - mp_map_add_qstr(&map_builtins, MP_QSTR_abs, rt_make_function_1(mp_builtin_abs)); - mp_map_add_qstr(&map_builtins, MP_QSTR_all, rt_make_function_1(mp_builtin_all)); - mp_map_add_qstr(&map_builtins, MP_QSTR_any, rt_make_function_1(mp_builtin_any)); - mp_map_add_qstr(&map_builtins, MP_QSTR_callable, rt_make_function_1(mp_builtin_callable)); - mp_map_add_qstr(&map_builtins, MP_QSTR_chr, rt_make_function_1(mp_builtin_chr)); - mp_map_add_qstr(&map_builtins, MP_QSTR_divmod, rt_make_function_2(mp_builtin_divmod)); + // built-in user functions + mp_map_add_qstr(&map_builtins, MP_QSTR_abs, (mp_obj_t)&mp_builtin_abs_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_all, (mp_obj_t)&mp_builtin_all_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_any, (mp_obj_t)&mp_builtin_any_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_callable, (mp_obj_t)&mp_builtin_callable_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_chr, (mp_obj_t)&mp_builtin_chr_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_divmod, (mp_obj_t)&mp_builtin_divmod_obj); mp_map_add_qstr(&map_builtins, MP_QSTR_hash, (mp_obj_t)&mp_builtin_hash_obj); mp_map_add_qstr(&map_builtins, MP_QSTR_isinstance, (mp_obj_t)&mp_builtin_isinstance_obj); mp_map_add_qstr(&map_builtins, MP_QSTR_issubclass, (mp_obj_t)&mp_builtin_issubclass_obj); mp_map_add_qstr(&map_builtins, MP_QSTR_iter, (mp_obj_t)&mp_builtin_iter_obj); - mp_map_add_qstr(&map_builtins, MP_QSTR_len, rt_make_function_1(mp_builtin_len)); - mp_map_add_qstr(&map_builtins, MP_QSTR_max, rt_make_function_var(1, mp_builtin_max)); - mp_map_add_qstr(&map_builtins, MP_QSTR_min, rt_make_function_var(1, mp_builtin_min)); + mp_map_add_qstr(&map_builtins, MP_QSTR_len, (mp_obj_t)&mp_builtin_len_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_max, (mp_obj_t)&mp_builtin_max_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_min, (mp_obj_t)&mp_builtin_min_obj); mp_map_add_qstr(&map_builtins, MP_QSTR_next, (mp_obj_t)&mp_builtin_next_obj); - mp_map_add_qstr(&map_builtins, MP_QSTR_ord, rt_make_function_1(mp_builtin_ord)); - mp_map_add_qstr(&map_builtins, MP_QSTR_pow, rt_make_function_var(2, mp_builtin_pow)); - mp_map_add_qstr(&map_builtins, MP_QSTR_print, rt_make_function_var(0, mp_builtin_print)); - mp_map_add_qstr(&map_builtins, MP_QSTR_range, rt_make_function_var(1, mp_builtin_range)); - mp_map_add_qstr(&map_builtins, MP_QSTR_sum, rt_make_function_var(1, mp_builtin_sum)); + mp_map_add_qstr(&map_builtins, MP_QSTR_ord, (mp_obj_t)&mp_builtin_ord_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_pow, (mp_obj_t)&mp_builtin_pow_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_print, (mp_obj_t)&mp_builtin_print_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_range, (mp_obj_t)&mp_builtin_range_obj); + mp_map_add_qstr(&map_builtins, MP_QSTR_sum, (mp_obj_t)&mp_builtin_sum_obj); next_unique_code_id = 1; // 0 indicates "no code" unique_codes_alloc = 0; diff --git a/stm/printf.c b/stm/printf.c index c0fa82e1b..732e83452 100644 --- a/stm/printf.c +++ b/stm/printf.c @@ -213,9 +213,9 @@ int pfenv_printf(const pfenv_t *pfenv, const char *fmt, va_list args) { // usable. I expect that this will be replaced with something // more appropriate. char dot = '.'; - double d = va_arg(args, double); + mp_float_t d = va_arg(args, double); int left = (int)d; - int right = (int)((d - (double)(int)d) * 1000000.0); + int right = (int)((d - (mp_float_t)(int)d) * 1000000.0); chrs += pfenv_print_int(pfenv, left, 1, 10, 'a', flags, width); chrs += pfenv_print_strn(pfenv, &dot, 1, flags, width); chrs += pfenv_print_int(pfenv, right, 0, 10, 'a', PF_FLAG_ZERO_PAD, 6); From f62d33aa1dc5afad9abbaf257531bdc4b0fbfdc0 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 13 Jan 2014 19:50:05 +0000 Subject: [PATCH 5/7] Consolidate rt_make_function_[0123] to rt_make_function_n. --- py/objfun.c | 37 ++++--------------------------------- py/objstr.c | 1 - py/runtime.c | 7 +------ py/runtime.h | 6 ++---- stm/audio.c | 6 +++--- stm/lcd.c | 14 +++++++------- stm/main.c | 42 +++++++++++++++++++++--------------------- stm/pybwlan.c | 10 +++++----- stm/timer.c | 8 ++++---- 9 files changed, 47 insertions(+), 84 deletions(-) diff --git a/py/objfun.c b/py/objfun.c index b8ebce7a3..ba3ce6279 100644 --- a/py/objfun.c +++ b/py/objfun.c @@ -98,42 +98,13 @@ const mp_obj_type_t fun_native_type = { .call_n_kw = fun_native_call_n_kw, }; -mp_obj_t rt_make_function_0(mp_fun_0_t fun) { +// fun must have the correct signature for n_args fixed arguments +mp_obj_t rt_make_function_n(int n_args, void *fun) { mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); o->base.type = &fun_native_type; o->is_kw = false; - o->n_args_min = 0; - o->n_args_max = 0; - o->fun = fun; - return o; -} - -mp_obj_t rt_make_function_1(mp_fun_1_t fun) { - mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); - o->base.type = &fun_native_type; - o->is_kw = false; - o->n_args_min = 1; - o->n_args_max = 1; - o->fun = fun; - return o; -} - -mp_obj_t rt_make_function_2(mp_fun_2_t fun) { - mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); - o->base.type = &fun_native_type; - o->is_kw = false; - o->n_args_min = 2; - o->n_args_max = 2; - o->fun = fun; - return o; -} - -mp_obj_t rt_make_function_3(mp_fun_3_t fun) { - mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t); - o->base.type = &fun_native_type; - o->is_kw = false; - o->n_args_min = 3; - o->n_args_max = 3; + o->n_args_min = n_args; + o->n_args_max = n_args; o->fun = fun; return o; } diff --git a/py/objstr.c b/py/objstr.c index a1c35bad3..f48bde600 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -3,7 +3,6 @@ #include #include #include -#include #include "nlr.h" #include "misc.h" diff --git a/py/runtime.c b/py/runtime.c index 766a321bc..f43e804b4 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -587,12 +587,7 @@ mp_obj_t rt_make_function_from_id(int unique_code_id) { fun = mp_obj_new_fun_bc(c->n_args, c->n_locals + c->n_stack, c->u_byte.code); break; case MP_CODE_NATIVE: - switch (c->n_args) { - case 0: fun = rt_make_function_0(c->u_native.fun); break; - case 1: fun = rt_make_function_1((mp_fun_1_t)c->u_native.fun); break; - case 2: fun = rt_make_function_2((mp_fun_2_t)c->u_native.fun); break; - default: assert(0); fun = mp_const_none; - } + fun = rt_make_function_n(c->n_args, c->u_native.fun); break; case MP_CODE_INLINE_ASM: fun = mp_obj_new_fun_asm(c->n_args, c->u_inline_asm.fun); diff --git a/py/runtime.h b/py/runtime.h index ac53e1411..32cb47684 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -12,10 +12,8 @@ void rt_store_global(qstr qstr, mp_obj_t obj); mp_obj_t rt_unary_op(int op, mp_obj_t arg); mp_obj_t rt_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs); mp_obj_t rt_make_function_from_id(int unique_code_id); -mp_obj_t rt_make_function_0(mp_fun_0_t f); -mp_obj_t rt_make_function_1(mp_fun_1_t f); -mp_obj_t rt_make_function_2(mp_fun_2_t f); -mp_obj_t rt_make_function_var(int n_args_min, mp_fun_var_t f); +mp_obj_t rt_make_function_n(int n_args, void *fun); // fun must have the correct signature for n_args fixed arguments +mp_obj_t rt_make_function_var(int n_args_min, mp_fun_var_t fun); mp_obj_t rt_make_function_var_between(int n_args_min, int n_args_max, mp_fun_var_t fun); // min and max are inclusive mp_obj_t rt_make_closure_from_id(int unique_code_id, mp_obj_t closure_tuple); mp_obj_t rt_call_function_0(mp_obj_t fun); diff --git a/stm/audio.c b/stm/audio.c index 34adefbcd..e2aa32b9f 100644 --- a/stm/audio.c +++ b/stm/audio.c @@ -91,8 +91,8 @@ void audio_init(void) { // Python interface mp_obj_t m = mp_obj_new_module(qstr_from_str_static("audio")); - rt_store_attr(m, qstr_from_str_static("dac"), rt_make_function_1(pyb_audio_dac)); - rt_store_attr(m, qstr_from_str_static("is_full"), rt_make_function_0(pyb_audio_is_full)); - rt_store_attr(m, qstr_from_str_static("fill"), rt_make_function_1(pyb_audio_fill)); + rt_store_attr(m, qstr_from_str_static("dac"), rt_make_function_n(1, pyb_audio_dac)); + rt_store_attr(m, qstr_from_str_static("is_full"), rt_make_function_n(0, pyb_audio_is_full)); + rt_store_attr(m, qstr_from_str_static("fill"), rt_make_function_n(1, pyb_audio_fill)); rt_store_name(qstr_from_str_static("audio"), m); } diff --git a/stm/lcd.c b/stm/lcd.c index 70d1a2642..82e42b779 100644 --- a/stm/lcd.c +++ b/stm/lcd.c @@ -220,13 +220,13 @@ void lcd_init(void) { // Python interface mp_obj_t m = mp_obj_new_module(qstr_from_str_static("lcd")); - rt_store_attr(m, qstr_from_str_static("lcd8"), rt_make_function_2(lcd_draw_pixel_8)); - rt_store_attr(m, qstr_from_str_static("clear"), rt_make_function_0(lcd_pix_clear)); - rt_store_attr(m, qstr_from_str_static("get"), rt_make_function_2(lcd_pix_get)); - rt_store_attr(m, qstr_from_str_static("set"), rt_make_function_2(lcd_pix_set)); - rt_store_attr(m, qstr_from_str_static("reset"), rt_make_function_2(lcd_pix_reset)); - rt_store_attr(m, qstr_from_str_static("show"), rt_make_function_0(lcd_pix_show)); - rt_store_attr(m, qstr_from_str_static("text"), rt_make_function_1(lcd_print)); + rt_store_attr(m, qstr_from_str_static("lcd8"), rt_make_function_n(2, lcd_draw_pixel_8)); + rt_store_attr(m, qstr_from_str_static("clear"), rt_make_function_n(0, lcd_pix_clear)); + rt_store_attr(m, qstr_from_str_static("get"), rt_make_function_n(2, lcd_pix_get)); + rt_store_attr(m, qstr_from_str_static("set"), rt_make_function_n(2, lcd_pix_set)); + rt_store_attr(m, qstr_from_str_static("reset"), rt_make_function_n(2, lcd_pix_reset)); + rt_store_attr(m, qstr_from_str_static("show"), rt_make_function_n(0, lcd_pix_show)); + rt_store_attr(m, qstr_from_str_static("text"), rt_make_function_n(1, lcd_print)); rt_store_name(qstr_from_str_static("lcd"), m); } diff --git a/stm/main.c b/stm/main.c index cdc4432c0..2085182c2 100644 --- a/stm/main.c +++ b/stm/main.c @@ -812,36 +812,36 @@ soft_reset: // add some functions to the python namespace { - rt_store_name(qstr_from_str_static("help"), rt_make_function_0(pyb_help)); + rt_store_name(qstr_from_str_static("help"), rt_make_function_n(0, pyb_help)); mp_obj_t m = mp_obj_new_module(qstr_from_str_static("pyb")); - rt_store_attr(m, qstr_from_str_static("info"), rt_make_function_0(pyb_info)); - rt_store_attr(m, qstr_from_str_static("sd_test"), rt_make_function_0(pyb_sd_test)); - rt_store_attr(m, qstr_from_str_static("stop"), rt_make_function_0(pyb_stop)); - rt_store_attr(m, qstr_from_str_static("standby"), rt_make_function_0(pyb_standby)); - rt_store_attr(m, qstr_from_str_static("source_dir"), rt_make_function_1(pyb_source_dir)); - rt_store_attr(m, qstr_from_str_static("main"), rt_make_function_1(pyb_main)); - rt_store_attr(m, qstr_from_str_static("sync"), rt_make_function_0(pyb_sync)); - rt_store_attr(m, qstr_from_str_static("gc"), rt_make_function_0(pyb_gc)); - rt_store_attr(m, qstr_from_str_static("delay"), rt_make_function_1(pyb_delay)); - rt_store_attr(m, qstr_from_str_static("led"), rt_make_function_1(pyb_led)); + rt_store_attr(m, qstr_from_str_static("info"), rt_make_function_n(0, pyb_info)); + rt_store_attr(m, qstr_from_str_static("sd_test"), rt_make_function_n(0, pyb_sd_test)); + rt_store_attr(m, qstr_from_str_static("stop"), rt_make_function_n(0, pyb_stop)); + rt_store_attr(m, qstr_from_str_static("standby"), rt_make_function_n(0, pyb_standby)); + rt_store_attr(m, qstr_from_str_static("source_dir"), rt_make_function_n(1, pyb_source_dir)); + rt_store_attr(m, qstr_from_str_static("main"), rt_make_function_n(1, pyb_main)); + rt_store_attr(m, qstr_from_str_static("sync"), rt_make_function_n(0, pyb_sync)); + rt_store_attr(m, qstr_from_str_static("gc"), rt_make_function_n(0, pyb_gc)); + rt_store_attr(m, qstr_from_str_static("delay"), rt_make_function_n(1, pyb_delay)); + rt_store_attr(m, qstr_from_str_static("led"), rt_make_function_n(1, pyb_led)); rt_store_attr(m, qstr_from_str_static("switch"), (mp_obj_t)&pyb_switch_obj); - rt_store_attr(m, qstr_from_str_static("servo"), rt_make_function_2(pyb_servo_set)); - rt_store_attr(m, qstr_from_str_static("pwm"), rt_make_function_2(pyb_pwm_set)); + rt_store_attr(m, qstr_from_str_static("servo"), rt_make_function_n(2, pyb_servo_set)); + rt_store_attr(m, qstr_from_str_static("pwm"), rt_make_function_n(2, pyb_pwm_set)); rt_store_attr(m, qstr_from_str_static("accel"), (mp_obj_t)&pyb_mma_read_obj); rt_store_attr(m, qstr_from_str_static("mma_read"), (mp_obj_t)&pyb_mma_read_all_obj); rt_store_attr(m, qstr_from_str_static("mma_mode"), (mp_obj_t)&pyb_mma_write_mode_obj); - rt_store_attr(m, qstr_from_str_static("hid"), rt_make_function_1(pyb_hid_send_report)); - rt_store_attr(m, qstr_from_str_static("time"), rt_make_function_0(pyb_rtc_read)); - rt_store_attr(m, qstr_from_str_static("rand"), rt_make_function_0(pyb_rng_get)); - rt_store_attr(m, qstr_from_str_static("Led"), rt_make_function_1(pyb_Led)); - rt_store_attr(m, qstr_from_str_static("Servo"), rt_make_function_1(pyb_Servo)); - rt_store_attr(m, qstr_from_str_static("I2C"), rt_make_function_2(pyb_I2C)); + rt_store_attr(m, qstr_from_str_static("hid"), rt_make_function_n(1, pyb_hid_send_report)); + rt_store_attr(m, qstr_from_str_static("time"), rt_make_function_n(0, pyb_rtc_read)); + rt_store_attr(m, qstr_from_str_static("rand"), rt_make_function_n(0, pyb_rng_get)); + rt_store_attr(m, qstr_from_str_static("Led"), rt_make_function_n(1, pyb_Led)); + rt_store_attr(m, qstr_from_str_static("Servo"), rt_make_function_n(1, pyb_Servo)); + rt_store_attr(m, qstr_from_str_static("I2C"), rt_make_function_n(2, pyb_I2C)); rt_store_attr(m, qstr_from_str_static("gpio"), (mp_obj_t)&pyb_gpio_obj); - rt_store_attr(m, qstr_from_str_static("Usart"), rt_make_function_2(pyb_Usart)); + rt_store_attr(m, qstr_from_str_static("Usart"), rt_make_function_n(2, pyb_Usart)); rt_store_name(qstr_from_str_static("pyb"), m); - rt_store_name(qstr_from_str_static("open"), rt_make_function_2(pyb_io_open)); + rt_store_name(qstr_from_str_static("open"), rt_make_function_n(2, pyb_io_open)); } // print a message to the LCD diff --git a/stm/pybwlan.c b/stm/pybwlan.c index 09d642d9c..91d71a652 100644 --- a/stm/pybwlan.c +++ b/stm/pybwlan.c @@ -357,11 +357,11 @@ void pyb_wlan_init(void) { mp_obj_t m = mp_obj_new_module(qstr_from_str_static("wlan")); rt_store_attr(m, qstr_from_str_static("connect"), rt_make_function_var(0, pyb_wlan_connect)); - rt_store_attr(m, qstr_from_str_static("disconnect"), rt_make_function_0(pyb_wlan_disconnect)); - rt_store_attr(m, qstr_from_str_static("ip"), rt_make_function_0(pyb_wlan_get_ip)); - rt_store_attr(m, qstr_from_str_static("get_host"), rt_make_function_1(pyb_wlan_get_host)); - rt_store_attr(m, qstr_from_str_static("http_get"), rt_make_function_2(pyb_wlan_http_get)); - rt_store_attr(m, qstr_from_str_static("serve"), rt_make_function_0(pyb_wlan_serve)); + rt_store_attr(m, qstr_from_str_static("disconnect"), rt_make_function_n(0, pyb_wlan_disconnect)); + rt_store_attr(m, qstr_from_str_static("ip"), rt_make_function_n(0, pyb_wlan_get_ip)); + rt_store_attr(m, qstr_from_str_static("get_host"), rt_make_function_n(1, pyb_wlan_get_host)); + rt_store_attr(m, qstr_from_str_static("http_get"), rt_make_function_n(2, pyb_wlan_http_get)); + rt_store_attr(m, qstr_from_str_static("serve"), rt_make_function_n(0, pyb_wlan_serve)); rt_store_name(qstr_from_str_static("wlan"), m); } diff --git a/stm/timer.c b/stm/timer.c index 2605d4b4b..c665a461d 100644 --- a/stm/timer.c +++ b/stm/timer.c @@ -72,10 +72,10 @@ void timer_init(void) { // Python interface mp_obj_t m = mp_obj_new_module(qstr_from_str_static("timer")); - rt_store_attr(m, qstr_from_str_static("callback"), rt_make_function_1(timer_py_set_callback)); - rt_store_attr(m, qstr_from_str_static("period"), rt_make_function_1(timer_py_set_period)); - rt_store_attr(m, qstr_from_str_static("prescaler"), rt_make_function_1(timer_py_set_prescaler)); - rt_store_attr(m, qstr_from_str_static("value"), rt_make_function_0(timer_py_get_value)); + rt_store_attr(m, qstr_from_str_static("callback"), rt_make_function_n(1, timer_py_set_callback)); + rt_store_attr(m, qstr_from_str_static("period"), rt_make_function_n(1, timer_py_set_period)); + rt_store_attr(m, qstr_from_str_static("prescaler"), rt_make_function_n(1, timer_py_set_prescaler)); + rt_store_attr(m, qstr_from_str_static("value"), rt_make_function_n(0, timer_py_get_value)); rt_store_name(qstr_from_str_static("timer"), m); } From 76a90f2f6035a8b3c2c2064fbee658c6015d7cfe Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 13 Jan 2014 22:31:01 +0200 Subject: [PATCH 6/7] Move mp_obj_int_t definition to objint.h, to reuse in long int impls. --- py/objint.c | 11 +---------- py/objint.h | 9 +++++++++ 2 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 py/objint.h diff --git a/py/objint.c b/py/objint.c index 84c35c508..c0bf756f1 100644 --- a/py/objint.c +++ b/py/objint.c @@ -8,16 +8,7 @@ #include "mpconfig.h" #include "mpqstr.h" #include "obj.h" - -typedef struct _mp_obj_int_t { - mp_obj_base_t base; -#if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE - mp_longint_impl_t val; -#endif -} mp_obj_int_t; - -void int_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in); -mp_obj_t int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in); +#include "objint.h" // This dispatcher function is expected to be independent of the implementation // of long int diff --git a/py/objint.h b/py/objint.h new file mode 100644 index 000000000..14cf977be --- /dev/null +++ b/py/objint.h @@ -0,0 +1,9 @@ +typedef struct _mp_obj_int_t { + mp_obj_base_t base; +#if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE + mp_longint_impl_t val; +#endif +} mp_obj_int_t; + +void int_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in); +mp_obj_t int_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in); From ca318bba0d97c66d8fb14a089d8fa269a0e1b424 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 13 Jan 2014 16:29:14 +0200 Subject: [PATCH 7/7] mp_obj_equal(): Compare small and long ints properly. By dispatching to long int methods. --- py/obj.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/py/obj.c b/py/obj.c index 2759437fd..206bf7a24 100644 --- a/py/obj.c +++ b/py/obj.c @@ -108,9 +108,15 @@ bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2) { return val == 0; } else if (o2 == mp_const_true) { return val == 1; - } else { - return false; + } else if (MP_OBJ_IS_TYPE(o2, &int_type)) { + // If o2 is long int, dispatch to its virtual methods + mp_obj_base_t *o = o2; + if (o->type->binary_op != NULL) { + mp_obj_t r = o->type->binary_op(RT_COMPARE_OP_EQUAL, o2, o1); + return r == mp_const_true ? true : false; + } } + return false; } } else if (MP_OBJ_IS_QSTR(o1) || MP_OBJ_IS_QSTR(o2)) { return false;