summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-10 05:39:38 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-10 05:39:38 +0300
commit978607aeffb5b1deca3a4ad4b0ab0d0e15b5e271 (patch)
treeccd331a9bb2d4114775b3bc200c637162c37d2a5
parent41e2dea4ca1147a989bbf3651506b2082f45cb0f (diff)
downloadmicropython-978607aeffb5b1deca3a4ad4b0ab0d0e15b5e271.tar.gz
micropython-978607aeffb5b1deca3a4ad4b0ab0d0e15b5e271.zip
objfun: Fix default arguments filling loop, was broken in presense of kwargs.
-rw-r--r--py/objfun.c4
-rw-r--r--tests/basics/fun-defargs2.py6
2 files changed, 8 insertions, 2 deletions
diff --git a/py/objfun.c b/py/objfun.c
index 4071432f97..adf05ce404 100644
--- a/py/objfun.c
+++ b/py/objfun.c
@@ -299,9 +299,9 @@ continue2:;
// Now fill in defaults
mp_obj_t *d = &flat_args[self->n_args - 1];
mp_obj_t *s = &self->extra_args[self->n_def_args - 1];
- for (int i = self->n_def_args; i > 0; i--) {
+ for (int i = self->n_def_args; i > 0; i--, d--, s--) {
if (*d == MP_OBJ_NULL) {
- *d-- = *s--;
+ *d = *s;
}
}
DEBUG_printf("Args after filling defaults: ");
diff --git a/tests/basics/fun-defargs2.py b/tests/basics/fun-defargs2.py
index c9090a3cd2..8b72ed8b15 100644
--- a/tests/basics/fun-defargs2.py
+++ b/tests/basics/fun-defargs2.py
@@ -11,3 +11,9 @@ foo(1, b=333)
# override with keyword
foo(a=2, b=333)
+
+def foo2(a=1, b=2):
+ print(a, b)
+
+# default and keyword
+foo2(b='two')