diff --git a/src/ceval.h b/src/ceval.h index 06af350a..3c82a989 100644 --- a/src/ceval.h +++ b/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: { diff --git a/src/compiler.h b/src/compiler.h index 74236444..7b9b3d7c 100644 --- a/src/compiler.h +++ b/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); }