From 2cd5d46ee916d68f253a3e6573b556a6b491d490 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Mon, 5 Dec 2022 02:36:46 +0800 Subject: [PATCH] up --- src/codeobject.h | 8 ++++---- src/obj.h | 2 +- src/vm.h | 20 +++++++++++--------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/codeobject.h b/src/codeobject.h index 3d47ea3c..4691b417 100644 --- a/src/codeobject.h +++ b/src/codeobject.h @@ -41,7 +41,7 @@ struct CodeObject { std::vector co_code; PyVarList co_consts; - std::vector> co_names; + std::vector co_names; std::vector<_Str> co_global_names; // for goto use @@ -61,9 +61,9 @@ struct CodeObject { if(scope == NAME_LOCAL && std::find(co_global_names.begin(), co_global_names.end(), name) != co_global_names.end()){ scope = NAME_GLOBAL; } - auto p = std::make_shared(name, scope); + auto p = NamePointer(name, scope); for(int i=0; iname; + names << co_names[i].name; if(i != co_names.size() - 1) names << ", "; } ss << '\n' << consts.str() << '\n' << names.str() << '\n'; diff --git a/src/obj.h b/src/obj.h index f5397915..b5eed26a 100644 --- a/src/obj.h +++ b/src/obj.h @@ -10,7 +10,7 @@ struct BasePointer; class VM; class Frame; -typedef std::shared_ptr _Pointer; +typedef pkpy::shared_ptr _Pointer; typedef PyVar (*_CppFunc)(VM*, const pkpy::ArgList&); typedef std::shared_ptr _Code; diff --git a/src/vm.h b/src/vm.h index d848d2f9..a4dc3a57 100644 --- a/src/vm.h +++ b/src/vm.h @@ -55,28 +55,30 @@ protected: frame->push(obj); } break; case OP_LOAD_NAME_PTR: { - frame->push(PyPointer(frame->code->co_names[byte.arg])); + const BasePointer* p = new NamePointer(frame->code->co_names[byte.arg]); + frame->push(PyPointer(_Pointer(p))); } break; case OP_STORE_NAME_PTR: { const auto& p = frame->code->co_names[byte.arg]; - p->set(this, frame, frame->popValue(this)); + p.set(this, frame, frame->popValue(this)); } break; case OP_BUILD_ATTR_PTR: { const auto& attr = frame->code->co_names[byte.arg]; PyVar obj = frame->popValue(this); - frame->push(PyPointer(std::make_shared(obj, attr.get()))); + const BasePointer* p = new AttrPointer(obj, &attr); + frame->push(PyPointer(_Pointer(p))); } break; case OP_BUILD_ATTR_PTR_PTR: { const auto& attr = frame->code->co_names[byte.arg]; PyVar obj = frame->popValue(this); __checkType(obj, _tp_user_pointer); const _Pointer& p = std::get<_Pointer>(obj->_native); - frame->push(PyPointer(std::make_shared(p->get(this, frame), attr.get()))); + frame->push(PyPointer(_Pointer(new AttrPointer(p->get(this, frame), &attr)))); } break; case OP_BUILD_INDEX_PTR: { PyVar index = frame->popValue(this); PyVar obj = frame->popValue(this); - frame->push(PyPointer(std::make_shared(obj, index))); + frame->push(PyPointer(_Pointer(new IndexPointer(obj, index)))); } break; case OP_STORE_PTR: { PyVar obj = frame->popValue(this); @@ -106,7 +108,7 @@ protected: std::vector<_Pointer> pointers(items.size()); for(int i=0; ipush(PyPointer(std::make_shared(pointers))); + frame->push(PyPointer(_Pointer(new CompoundPointer(pointers)))); } break; case OP_BUILD_STRING: { @@ -133,7 +135,7 @@ protected: } break; case OP_BUILD_CLASS: { - const _Str& clsName = frame->code->co_names[byte.arg]->name; + const _Str& clsName = frame->code->co_names[byte.arg].name; PyVar clsBase = frame->popValue(this); if(clsBase == None) clsBase = _tp_object; __checkType(clsBase, _tp_type); @@ -209,7 +211,7 @@ protected: { // _pointer to pointer const _Pointer p = PyPointer_AS_C(frame->__pop()); - _Pointer up = std::make_shared(p, frame->id); + _Pointer up(new UserPointer(p, frame->id)); frame->push(newObject(_tp_user_pointer, std::move(up))); } break; case OP_UNARY_DEREF: @@ -318,7 +320,7 @@ protected: } break; case OP_IMPORT_NAME: { - const _Str& name = frame->code->co_names[byte.arg]->name; + const _Str& name = frame->code->co_names[byte.arg].name; auto it = _modules.find(name); if(it == _modules.end()){ auto it2 = _lazyModules.find(name);