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 be1f00e686..48a21c9caf 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 587b9f8880..95c606e058 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 2a5f255971..d67c5f2b17 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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

+-7Ut1 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 literal 0 HcmV?d00001 diff --git a/logo/vector-logo-inkscape_master.svg b/logo/vector-logo-inkscape_master.svg index bbfca47803..ddcf741178 100644 --- a/logo/vector-logo-inkscape_master.svg +++ b/logo/vector-logo-inkscape_master.svg @@ -15,8 +15,8 @@ height="779.328" id="svg2" inkscape:version="0.48.4 r9939" - sodipodi:docname="vector-logo-inkscape_master.svg" - inkscape:export-filename="R:\Mark_Sector\!!Projects-2\microPython\Logo\vector-logo-4.png" + sodipodi:docname="vector-logo-inkscape_master-2.svg" + inkscape:export-filename="C:\Users\user3\Documents\GitHub\micropython\logo\vector-logo-2.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> + 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 afac3889fd..b8ebce7a39 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 078f4b49c3..389274f319 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 db7d517a06..0198d63bfd 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 90a0fc3394..33576e3f0e 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 ada4aa2ea4..5d8c57692e 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 26d3c0e337..84c35c508e 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 be1f00e686..f48bde6001 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 2af86b6abd..766a321bc4 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 c0fa82e1b0..732e834526 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 b8ebce7a39..ba3ce6279f 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 a1c35bad3b..f48bde6001 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 766a321bc4..f43e804b40 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 ac53e14110..32cb47684f 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 34adefbcd6..e2aa32b9fc 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 70d1a26423..82e42b779d 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 cdc4432c09..2085182c29 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 09d642d9c8..91d71a652b 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 2605d4b4bc..c665a461d0 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 84c35c508e..c0bf756f1b 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 0000000000..14cf977be0 --- /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 2759437fd7..206bf7a24a 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;