Browse Source

fix a bug

blueloveTH 3 years ago
parent
commit
e5da206ded
2 changed files with 3 additions and 2 deletions
  1. 1 1
      src/ceval.h
  2. 2 1
      src/compiler.h

+ 1 - 1
src/ceval.h

@@ -66,7 +66,7 @@ PyVar VM::run_frame(Frame* frame){
             frame->_pop();
             continue;
         case OP_BUILD_TUPLE: {
-            pkpy::Args items = frame->pop_n_reversed(byte.arg);
+            pkpy::Args items = frame->pop_n_values_reversed(this, byte.arg);
             frame->push(PyTuple(std::move(items)));
         } continue;
         case OP_BUILD_TUPLE_REF: {

+ 2 - 1
src/compiler.h

@@ -938,7 +938,7 @@ __LISTCOMP:
             emit(OP_RAISE, dummy_t);
             consume_end_stmt();
         } else if(match(TK("del"))){
-            EXPR();
+            EXPR_TUPLE();
             emit(OP_DELETE_REF);
             consume_end_stmt();
         } else if(match(TK("global"))){
@@ -955,6 +955,7 @@ __LISTCOMP:
             // If last op is not an assignment, pop the result.
             uint8_t last_op = co()->codes.back().op;
             if( last_op!=OP_STORE_NAME && last_op!=OP_STORE_REF && last_op!=OP_INPLACE_BINARY_OP && last_op!=OP_INPLACE_BITWISE_OP){
+                if(last_op == OP_BUILD_TUPLE_REF) co()->codes.back().op = OP_BUILD_TUPLE;
                 if(mode()==REPL_MODE && name_scope() == NAME_GLOBAL) emit(OP_PRINT_EXPR, -1, true);
                 emit(OP_POP_TOP, -1, true);
             }