blueloveTH пре 2 година
родитељ
комит
fc2a80122b
2 измењених фајлова са 12 додато и 8 уклоњено
  1. 5 4
      src/compiler.h
  2. 7 4
      tests/70_file.py

+ 5 - 4
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<NameExpr>(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;
             /*************************************************/

+ 7 - 4
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')