make array iter smaller

This commit is contained in:
blueloveTH 2024-05-26 02:14:39 +08:00
parent 4c15f278d0
commit 2d77622476
2 changed files with 6 additions and 7 deletions

View File

@ -23,15 +23,14 @@ struct RangeIterR{ // step < 0
}; };
struct ArrayIter{ struct ArrayIter{
PyVar ref; PyObject* ref;
PyVar* begin;
PyVar* end; PyVar* end;
PyVar* current; PyVar* current;
ArrayIter(PyVar ref, PyVar* begin, PyVar* end) ArrayIter(PyObject* ref, PyVar* begin, PyVar* end)
: ref(ref), begin(begin), end(end), current(begin) {} : 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); static void _register(VM* vm, PyVar mod, PyVar type);
}; };

View File

@ -995,7 +995,7 @@ void __init_builtins(VM* _vm) {
}); });
_vm->bind__iter__(VM::tp_list, [](VM* vm, PyVar _0) { _vm->bind__iter__(VM::tp_list, [](VM* vm, PyVar _0) {
List& self = _CAST(List&, _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__getitem__(VM::tp_list, PyArrayGetItem<List>);
_vm->bind__setitem__(VM::tp_list, [](VM* vm, PyVar _0, PyVar _1, PyVar _2){ _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) { _vm->bind__iter__(VM::tp_tuple, [](VM* vm, PyVar _0) {
Tuple& self = _CAST(Tuple&, _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__getitem__(VM::tp_tuple, PyArrayGetItem<Tuple>);
_vm->bind__len__(VM::tp_tuple, [](VM* vm, PyVar obj) { _vm->bind__len__(VM::tp_tuple, [](VM* vm, PyVar obj) {