Parcourir la source

make array iter smaller

blueloveTH il y a 1 an
Parent
commit
2d77622476
2 fichiers modifiés avec 6 ajouts et 7 suppressions
  1. 4 5
      include/pocketpy/iter.h
  2. 2 2
      src/pocketpy.cpp

+ 4 - 5
include/pocketpy/iter.h

@@ -23,15 +23,14 @@ struct RangeIterR{      // step < 0
 };
 
 struct ArrayIter{
-    PyVar ref;
-    PyVar* begin;
+    PyObject* ref;
     PyVar* end;
     PyVar* current;
 
-    ArrayIter(PyVar ref, PyVar* begin, PyVar* end)
-        : ref(ref), begin(begin), end(end), current(begin) {}
+    ArrayIter(PyObject* ref, PyVar* begin, PyVar* end)
+        : ref(ref), end(end), current(begin) {}
 
-    void _gc_mark(VM* vm) const{ PK_OBJ_MARK(ref); }
+    void _gc_mark(VM* vm) const{ vm->__obj_gc_mark(ref); }
     static void _register(VM* vm, PyVar mod, PyVar type);
 };
 

+ 2 - 2
src/pocketpy.cpp

@@ -995,7 +995,7 @@ void __init_builtins(VM* _vm) {
     });
     _vm->bind__iter__(VM::tp_list, [](VM* vm, PyVar _0) {
         List& self = _CAST(List&, _0);
-        return vm->new_user_object<ArrayIter>(_0, self.begin(), self.end());
+        return vm->new_user_object<ArrayIter>(_0.get(), self.begin(), self.end());
     });
     _vm->bind__getitem__(VM::tp_list, PyArrayGetItem<List>);
     _vm->bind__setitem__(VM::tp_list, [](VM* vm, PyVar _0, PyVar _1, PyVar _2){
@@ -1057,7 +1057,7 @@ void __init_builtins(VM* _vm) {
 
     _vm->bind__iter__(VM::tp_tuple, [](VM* vm, PyVar _0) {
         Tuple& self = _CAST(Tuple&, _0);
-        return vm->new_user_object<ArrayIter>(_0, self.begin(), self.end());
+        return vm->new_user_object<ArrayIter>(_0.get(), self.begin(), self.end());
     });
     _vm->bind__getitem__(VM::tp_tuple, PyArrayGetItem<Tuple>);
     _vm->bind__len__(VM::tp_tuple, [](VM* vm, PyVar obj) {