diff --git a/src/compiler.h b/src/compiler.h index 67e22a72..77602acb 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -839,12 +839,13 @@ __SUBSCR_END: EXPR(false); consume(TK("as")); consume(TK("@id")); - StrName name(prev().str()); - ctx()->emit(OP_STORE_NAME, name.index, prev().line); - ctx()->emit(OP_LOAD_NAME, name.index, prev().line); + Expr_ e = make_expr(prev().str(), name_scope()); + bool ok = e->emit_store(ctx()); + if(!ok) SyntaxError(); + e->emit(ctx()); ctx()->emit(OP_WITH_ENTER, BC_NOARG, prev().line); compile_block_body(); - ctx()->emit(OP_LOAD_NAME, name.index, prev().line); + e->emit(ctx()); ctx()->emit(OP_WITH_EXIT, BC_NOARG, prev().line); } break; /*************************************************/ diff --git a/tests/70_file.py b/tests/70_file.py index 0662ac5a..094503f8 100644 --- a/tests/70_file.py +++ b/tests/70_file.py @@ -27,10 +27,13 @@ with open('123.bin', 'wb') as f: f.write('123'.encode()) f.write('测试'.encode()) -with open('123.bin', 'rb') as f: - b = f.read() - assert isinstance(b, bytes) - assert b == '123测试'.encode() +def f(): + with open('123.bin', 'rb') as f: + b = f.read() + assert isinstance(b, bytes) + assert b == '123测试'.encode() + +f() assert os.path.exists('123.bin') os.remove('123.bin')