kopia lustrzana https://github.com/micropython/micropython
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+.pull/3147/head
rodzic
696fcde800
commit
1e70fda69f
|
@ -2308,6 +2308,10 @@ STATIC void compile_trailer_paren_helper(compiler_t *comp, mp_parse_node_t pn_ar
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
normal_argument:
|
normal_argument:
|
||||||
|
if (star_flags) {
|
||||||
|
compile_syntax_error(comp, args[i], "non-keyword arg after */**");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (n_keyword > 0) {
|
if (n_keyword > 0) {
|
||||||
compile_syntax_error(comp, args[i], "non-keyword arg after keyword arg");
|
compile_syntax_error(comp, args[i], "non-keyword arg after keyword arg");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -20,6 +20,8 @@ def test_syntax(code):
|
||||||
print("SyntaxError")
|
print("SyntaxError")
|
||||||
test_syntax("f(*a, *b)") # can't have multiple * (in 3.5 we can)
|
test_syntax("f(*a, *b)") # can't have multiple * (in 3.5 we can)
|
||||||
test_syntax("f(**a, **b)") # can't have multiple ** (in 3.5 we can)
|
test_syntax("f(**a, **b)") # can't have multiple ** (in 3.5 we can)
|
||||||
|
test_syntax("f(*a, b)") # can't have positional after *
|
||||||
|
test_syntax("f(**a, b)") # can't have positional after **
|
||||||
test_syntax("() = []") # can't assign to empty tuple (in 3.6 we can)
|
test_syntax("() = []") # can't assign to empty tuple (in 3.6 we can)
|
||||||
test_syntax("del ()") # can't delete empty tuple (in 3.6 we can)
|
test_syntax("del ()") # can't delete empty tuple (in 3.6 we can)
|
||||||
|
|
||||||
|
|
|
@ -7,5 +7,7 @@ SyntaxError
|
||||||
SyntaxError
|
SyntaxError
|
||||||
SyntaxError
|
SyntaxError
|
||||||
SyntaxError
|
SyntaxError
|
||||||
|
SyntaxError
|
||||||
|
SyntaxError
|
||||||
3.4
|
3.4
|
||||||
3 4
|
3 4
|
||||||
|
|
Ładowanie…
Reference in New Issue