Skip to content

Commit

Permalink
Merge f2dbc91 into a60ad33
Browse files Browse the repository at this point in the history
  • Loading branch information
dpgeorge committed May 30, 2021
2 parents a60ad33 + f2dbc91 commit 67c76b1
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
22 changes: 16 additions & 6 deletions py/compile.c
Expand Up @@ -1970,13 +1970,23 @@ STATIC void compile_async_stmt(compiler_t *comp, mp_parse_node_struct_t *pns) {
compile_funcdef(comp, pns0);
scope_t *fscope = (scope_t *)pns0->nodes[4];
fscope->scope_flags |= MP_SCOPE_FLAG_GENERATOR;
} else if (MP_PARSE_NODE_STRUCT_KIND(pns0) == PN_for_stmt) {
// async for
compile_async_for_stmt(comp, pns0);
} else {
// async with
assert(MP_PARSE_NODE_STRUCT_KIND(pns0) == PN_with_stmt);
compile_async_with_stmt(comp, pns0);
// async for/with; first verify the scope is a generator
int scope_flags = comp->scope_cur->scope_flags;
if (!(scope_flags & MP_SCOPE_FLAG_GENERATOR)) {
compile_syntax_error(comp, (mp_parse_node_t)pns0,
MP_ERROR_TEXT("async for/with outside async function"));
return;
}

if (MP_PARSE_NODE_STRUCT_KIND(pns0) == PN_for_stmt) {
// async for
compile_async_for_stmt(comp, pns0);
} else {
// async with
assert(MP_PARSE_NODE_STRUCT_KIND(pns0) == PN_with_stmt);
compile_async_with_stmt(comp, pns0);
}
}
}
#endif
Expand Down
19 changes: 19 additions & 0 deletions tests/basics/async_syntaxerror.py
@@ -0,0 +1,19 @@
# test syntax errors using async

try:
exec
except NameError:
print("SKIP")
raise SystemExit


def test_syntax(code):
try:
exec(code)
print("no SyntaxError")
except SyntaxError:
print("SyntaxError")


test_syntax("async for x in (): x")
test_syntax("async with x: x")
2 changes: 2 additions & 0 deletions tests/basics/async_syntaxerror.py.exp
@@ -0,0 +1,2 @@
SyntaxError
SyntaxError

0 comments on commit 67c76b1

Please sign in to comment.