mirror of
https://github.com/pocketpy/pocketpy
synced 2025-12-07 18:50:19 +00:00
make array iter smaller
This commit is contained in:
parent
4c15f278d0
commit
2d77622476
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user