From 78922a11b1c599786f0ebc0368ec8c20b6892830 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Tue, 31 Jan 2023 23:27:57 +0800 Subject: [PATCH] up --- src/codeobject.h | 5 +++++ src/opcodes.h | 17 ++++++++--------- src/vm.h | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/codeobject.h b/src/codeobject.h index f4bbf2d7..2f7bebc7 100644 --- a/src/codeobject.h +++ b/src/codeobject.h @@ -208,6 +208,11 @@ public: return v; } + inline void __pop(){ + if(s_data.empty()) throw std::runtime_error("s_data.empty() is true"); + s_data.pop_back(); + } + inline void try_deref(VM*, PyVar&); inline PyVar pop_value(VM* vm){ diff --git a/src/opcodes.h b/src/opcodes.h index 69f3df91..6b7b8de0 100644 --- a/src/opcodes.h +++ b/src/opcodes.h @@ -1,8 +1,6 @@ #ifdef OPCODE OPCODE(NO_OP) -OPCODE(IMPORT_NAME) -OPCODE(PRINT_EXPR) OPCODE(POP_TOP) OPCODE(DUP_TOP) OPCODE(CALL) @@ -21,8 +19,13 @@ OPCODE(BUILD_LIST) OPCODE(BUILD_MAP) OPCODE(BUILD_SET) OPCODE(BUILD_SLICE) +OPCODE(BUILD_CLASS) +OPCODE(BUILD_SMART_TUPLE) +OPCODE(BUILD_STRING) OPCODE(LIST_APPEND) +OPCODE(IMPORT_NAME) +OPCODE(PRINT_EXPR) OPCODE(GET_ITER) OPCODE(FOR_ITER) @@ -38,6 +41,8 @@ OPCODE(SAFE_JUMP_ABSOLUTE) OPCODE(JUMP_IF_TRUE_OR_POP) OPCODE(JUMP_IF_FALSE_OR_POP) +OPCODE(GOTO) + OPCODE(LOAD_CONST) OPCODE(LOAD_NONE) OPCODE(LOAD_TRUE) @@ -51,17 +56,11 @@ OPCODE(LOAD_NAME_REF) OPCODE(ASSERT) OPCODE(RAISE_ERROR) -OPCODE(BUILD_CLASS) +OPCODE(BUILD_INDEX_REF) OPCODE(BUILD_ATTR_REF) OPCODE(STORE_NAME) OPCODE(STORE_FUNCTION) -OPCODE(BUILD_INDEX_REF) OPCODE(STORE_REF) OPCODE(DELETE_REF) -OPCODE(BUILD_SMART_TUPLE) -OPCODE(BUILD_STRING) - -OPCODE(GOTO) - #endif \ No newline at end of file diff --git a/src/vm.h b/src/vm.h index 5ba2918d..2d39a4ee 100644 --- a/src/vm.h +++ b/src/vm.h @@ -130,7 +130,7 @@ protected: if(expr == None) break; *_stdout << PyStr_AS_C(asRepr(expr)) << '\n'; } break; - case OP_POP_TOP: frame->pop(); break; + case OP_POP_TOP: frame->__pop(); break; case OP_BINARY_OP: { pkpy::ArgList args(2);