diff --git a/include/pocketpy/iter.h b/include/pocketpy/iter.h index 4288d037..c75e6ed0 100644 --- a/include/pocketpy/iter.h +++ b/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); }; diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index 25108899..31ad678f 100644 --- a/src/pocketpy.cpp +++ b/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(_0, self.begin(), self.end()); + return vm->new_user_object(_0.get(), self.begin(), self.end()); }); _vm->bind__getitem__(VM::tp_list, PyArrayGetItem); _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(_0, self.begin(), self.end()); + return vm->new_user_object(_0.get(), self.begin(), self.end()); }); _vm->bind__getitem__(VM::tp_tuple, PyArrayGetItem); _vm->bind__len__(VM::tp_tuple, [](VM* vm, PyVar obj) {