mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 19:40:18 +00:00
add tuple slice
This commit is contained in:
parent
49d57703ff
commit
645320eb2f
@ -421,16 +421,16 @@ void __initializeBuiltinFunctions(VM* _vm) {
|
|||||||
return vm->PyInt(_self.size());
|
return vm->PyInt(_self.size());
|
||||||
});
|
});
|
||||||
|
|
||||||
_vm->bindMethod<1>("list", "__getitem__", [](VM* vm, const pkpy::ArgList& args) {
|
_vm->bindMethodMulti<1>({"list", "tuple"}, "__getitem__", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
const PyVarList& _self = vm->PyList_AS_C(args[0]);
|
bool list = args[0]->is_type(vm->_tp_list);
|
||||||
|
const PyVarList& _self = list ? vm->PyList_AS_C(args[0]) : vm->PyTuple_AS_C(args[0]);
|
||||||
|
|
||||||
if(args[1]->is_type(vm->_tp_slice)){
|
if(args[1]->is_type(vm->_tp_slice)){
|
||||||
_Slice s = vm->PySlice_AS_C(args[1]);
|
_Slice s = vm->PySlice_AS_C(args[1]);
|
||||||
s.normalize(_self.size());
|
s.normalize(_self.size());
|
||||||
PyVarList _new_list;
|
PyVarList _new_list;
|
||||||
for(size_t i = s.start; i < s.stop; i++)
|
for(size_t i = s.start; i < s.stop; i++) _new_list.push_back(_self[i]);
|
||||||
_new_list.push_back(_self[i]);
|
return list ? vm->PyList(_new_list) : vm->PyTuple(_new_list);
|
||||||
return vm->PyList(_new_list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int _index = (int)vm->PyInt_AS_C(args[1]);
|
int _index = (int)vm->PyInt_AS_C(args[1]);
|
||||||
@ -469,13 +469,6 @@ void __initializeBuiltinFunctions(VM* _vm) {
|
|||||||
return vm->PyInt(_self.size());
|
return vm->PyInt(_self.size());
|
||||||
});
|
});
|
||||||
|
|
||||||
_vm->bindMethod<1>("tuple", "__getitem__", [](VM* vm, const pkpy::ArgList& args) {
|
|
||||||
const PyVarList& _self = vm->PyTuple_AS_C(args[0]);
|
|
||||||
int _index = (int)vm->PyInt_AS_C(args[1]);
|
|
||||||
_index = vm->normalized_index(_index, _self.size());
|
|
||||||
return _self[_index];
|
|
||||||
});
|
|
||||||
|
|
||||||
/************ PyBool ************/
|
/************ PyBool ************/
|
||||||
_vm->bindStaticMethod<1>("bool", "__new__", CPP_LAMBDA(vm->asBool(args[0])));
|
_vm->bindStaticMethod<1>("bool", "__new__", CPP_LAMBDA(vm->asBool(args[0])));
|
||||||
|
|
||||||
|
@ -77,6 +77,14 @@ assert l[1:4] == [2,3,4]
|
|||||||
assert l[-1:-3] == []
|
assert l[-1:-3] == []
|
||||||
assert l[-3:-1] == [2,3]
|
assert l[-3:-1] == [2,3]
|
||||||
|
|
||||||
|
l = (1,2,3,4)
|
||||||
|
assert l[2] == 3
|
||||||
|
assert l[-1] == 4
|
||||||
|
assert l[:32] == (1,2,3,4)
|
||||||
|
assert l[32:] == tuple([])
|
||||||
|
assert l[1:4] == (2,3,4)
|
||||||
|
assert l[-1:-3] == tuple([])
|
||||||
|
assert l[-3:-1] == (2,3)
|
||||||
|
|
||||||
l1 = [1];l2 = l1;l1.append(2);l3 = [1,1,2]
|
l1 = [1];l2 = l1;l1.append(2);l3 = [1,1,2]
|
||||||
assert l2[1] == 2
|
assert l2[1] == 2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user