summaryrefslogtreecommitdiffstatshomepage
path: root/py/compile.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-06-14 18:18:01 +1000
committerDamien George <damien.p.george@gmail.com>2017-06-14 18:18:01 +1000
commit1e70fda69fcb4991eb60ed43e610f664ea1319e6 (patch)
treee63d9f11b8ead307833b8d5c5b08f1c00ae60cfd /py/compile.c
parent696fcde8009b3670e5c4e867600c17a916f9a3b0 (diff)
downloadmicropython-1e70fda69fcb4991eb60ed43e610f664ea1319e6.tar.gz
micropython-1e70fda69fcb4991eb60ed43e610f664ea1319e6.zip
py/compile: Raise SyntaxError if positional args are given after */**.
In CPython 3.4 this raises a SyntaxError. In CPython 3.5+ having a positional after * is allowed but uPy has the wrong semantics and passes the arguments in the incorrect order. To prevent incorrect use of a function going unnoticed it is important to raise the SyntaxError in uPy, until the behaviour is fixed to follow CPython 3.5+.
Diffstat (limited to 'py/compile.c')
-rw-r--r--py/compile.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/py/compile.c b/py/compile.c
index 3b6a264d61..86ec4d3a3c 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -2308,6 +2308,10 @@ STATIC void compile_trailer_paren_helper(compiler_t *comp, mp_parse_node_t pn_ar
}
} else {
normal_argument:
+ if (star_flags) {
+ compile_syntax_error(comp, args[i], "non-keyword arg after */**");
+ return;
+ }
if (n_keyword > 0) {
compile_syntax_error(comp, args[i], "non-keyword arg after keyword arg");
return;