blueloveTH 3 роки тому
батько
коміт
2cd5d46ee9
3 змінених файлів з 16 додано та 14 видалено
  1. 4 4
      src/codeobject.h
  2. 1 1
      src/obj.h
  3. 11 9
      src/vm.h

+ 4 - 4
src/codeobject.h

@@ -41,7 +41,7 @@ struct CodeObject {
 
 
     std::vector<ByteCode> co_code;
     std::vector<ByteCode> co_code;
     PyVarList co_consts;
     PyVarList co_consts;
-    std::vector<std::shared_ptr<NamePointer>> co_names;
+    std::vector<NamePointer> co_names;
     std::vector<_Str> co_global_names;
     std::vector<_Str> co_global_names;
 
 
     // for goto use
     // 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()){
         if(scope == NAME_LOCAL && std::find(co_global_names.begin(), co_global_names.end(), name) != co_global_names.end()){
             scope = NAME_GLOBAL;
             scope = NAME_GLOBAL;
         }
         }
-        auto p = std::make_shared<NamePointer>(name, scope);
+        auto p = NamePointer(name, scope);
         for(int i=0; i<co_names.size(); i++){
         for(int i=0; i<co_names.size(); i++){
-            if(*co_names[i] == *p) return i;
+            if(co_names[i] == p) return i;
         }
         }
         co_names.push_back(p);
         co_names.push_back(p);
         return co_names.size() - 1;
         return co_names.size() - 1;
@@ -108,7 +108,7 @@ struct CodeObject {
         _StrStream names;
         _StrStream names;
         names << "co_names: ";
         names << "co_names: ";
         for(int i=0; i<co_names.size(); i++){
         for(int i=0; i<co_names.size(); i++){
-            names << co_names[i]->name;
+            names << co_names[i].name;
             if(i != co_names.size() - 1) names << ", ";
             if(i != co_names.size() - 1) names << ", ";
         }
         }
         ss << '\n' << consts.str() << '\n' << names.str() << '\n';
         ss << '\n' << consts.str() << '\n' << names.str() << '\n';

+ 1 - 1
src/obj.h

@@ -10,7 +10,7 @@ struct BasePointer;
 class VM;
 class VM;
 class Frame;
 class Frame;
 
 
-typedef std::shared_ptr<const BasePointer> _Pointer;
+typedef pkpy::shared_ptr<const BasePointer> _Pointer;
 typedef PyVar (*_CppFunc)(VM*, const pkpy::ArgList&);
 typedef PyVar (*_CppFunc)(VM*, const pkpy::ArgList&);
 typedef std::shared_ptr<CodeObject> _Code;
 typedef std::shared_ptr<CodeObject> _Code;
 
 

+ 11 - 9
src/vm.h

@@ -55,28 +55,30 @@ protected:
                 frame->push(obj);
                 frame->push(obj);
             } break;
             } break;
             case OP_LOAD_NAME_PTR: {
             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;
             } break;
             case OP_STORE_NAME_PTR: {
             case OP_STORE_NAME_PTR: {
                 const auto& p = frame->code->co_names[byte.arg];
                 const auto& p = frame->code->co_names[byte.arg];
-                p->set(this, frame, frame->popValue(this));
+                p.set(this, frame, frame->popValue(this));
             } break;
             } break;
             case OP_BUILD_ATTR_PTR: {
             case OP_BUILD_ATTR_PTR: {
                 const auto& attr = frame->code->co_names[byte.arg];
                 const auto& attr = frame->code->co_names[byte.arg];
                 PyVar obj = frame->popValue(this);
                 PyVar obj = frame->popValue(this);
-                frame->push(PyPointer(std::make_shared<AttrPointer>(obj, attr.get())));
+                const BasePointer* p = new AttrPointer(obj, &attr);
+                frame->push(PyPointer(_Pointer(p)));
             } break;
             } break;
             case OP_BUILD_ATTR_PTR_PTR: {
             case OP_BUILD_ATTR_PTR_PTR: {
                 const auto& attr = frame->code->co_names[byte.arg];
                 const auto& attr = frame->code->co_names[byte.arg];
                 PyVar obj = frame->popValue(this);
                 PyVar obj = frame->popValue(this);
                 __checkType(obj, _tp_user_pointer);
                 __checkType(obj, _tp_user_pointer);
                 const _Pointer& p = std::get<_Pointer>(obj->_native);
                 const _Pointer& p = std::get<_Pointer>(obj->_native);
-                frame->push(PyPointer(std::make_shared<AttrPointer>(p->get(this, frame), attr.get())));
+                frame->push(PyPointer(_Pointer(new AttrPointer(p->get(this, frame), &attr))));
             } break;
             } break;
             case OP_BUILD_INDEX_PTR: {
             case OP_BUILD_INDEX_PTR: {
                 PyVar index = frame->popValue(this);
                 PyVar index = frame->popValue(this);
                 PyVar obj = frame->popValue(this);
                 PyVar obj = frame->popValue(this);
-                frame->push(PyPointer(std::make_shared<IndexPointer>(obj, index)));
+                frame->push(PyPointer(_Pointer(new IndexPointer(obj, index))));
             } break;
             } break;
             case OP_STORE_PTR: {
             case OP_STORE_PTR: {
                 PyVar obj = frame->popValue(this);
                 PyVar obj = frame->popValue(this);
@@ -106,7 +108,7 @@ protected:
                 std::vector<_Pointer> pointers(items.size());
                 std::vector<_Pointer> pointers(items.size());
                 for(int i=0; i<items.size(); i++)
                 for(int i=0; i<items.size(); i++)
                     pointers[i] = PyPointer_AS_C(items[i]);
                     pointers[i] = PyPointer_AS_C(items[i]);
-                frame->push(PyPointer(std::make_shared<CompoundPointer>(pointers)));
+                frame->push(PyPointer(_Pointer(new CompoundPointer(pointers))));
             } break;
             } break;
             case OP_BUILD_STRING:
             case OP_BUILD_STRING:
             {
             {
@@ -133,7 +135,7 @@ protected:
                 } break;
                 } break;
             case OP_BUILD_CLASS:
             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);
                     PyVar clsBase = frame->popValue(this);
                     if(clsBase == None) clsBase = _tp_object;
                     if(clsBase == None) clsBase = _tp_object;
                     __checkType(clsBase, _tp_type);
                     __checkType(clsBase, _tp_type);
@@ -209,7 +211,7 @@ protected:
                 {
                 {
                     // _pointer to pointer
                     // _pointer to pointer
                     const _Pointer p = PyPointer_AS_C(frame->__pop());
                     const _Pointer p = PyPointer_AS_C(frame->__pop());
-                    _Pointer up = std::make_shared<UserPointer>(p, frame->id);
+                    _Pointer up(new UserPointer(p, frame->id));
                     frame->push(newObject(_tp_user_pointer, std::move(up)));
                     frame->push(newObject(_tp_user_pointer, std::move(up)));
                 } break;
                 } break;
             case OP_UNARY_DEREF:
             case OP_UNARY_DEREF:
@@ -318,7 +320,7 @@ protected:
                 } break;
                 } break;
             case OP_IMPORT_NAME:
             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);
                     auto it = _modules.find(name);
                     if(it == _modules.end()){
                     if(it == _modules.end()){
                         auto it2 = _lazyModules.find(name);
                         auto it2 = _lazyModules.find(name);