mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30: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());
|
||||
});
|
||||
|
||||
_vm->bindMethod<1>("list", "__getitem__", [](VM* vm, const pkpy::ArgList& args) {
|
||||
const PyVarList& _self = vm->PyList_AS_C(args[0]);
|
||||
_vm->bindMethodMulti<1>({"list", "tuple"}, "__getitem__", [](VM* vm, const pkpy::ArgList& args) {
|
||||
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)){
|
||||
_Slice s = vm->PySlice_AS_C(args[1]);
|
||||
s.normalize(_self.size());
|
||||
PyVarList _new_list;
|
||||
for(size_t i = s.start; i < s.stop; i++)
|
||||
_new_list.push_back(_self[i]);
|
||||
return vm->PyList(_new_list);
|
||||
for(size_t i = s.start; i < s.stop; i++) _new_list.push_back(_self[i]);
|
||||
return list ? vm->PyList(_new_list) : vm->PyTuple(_new_list);
|
||||
}
|
||||
|
||||
int _index = (int)vm->PyInt_AS_C(args[1]);
|
||||
@ -469,13 +469,6 @@ void __initializeBuiltinFunctions(VM* _vm) {
|
||||
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 ************/
|
||||
_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[-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]
|
||||
assert l2[1] == 2
|
||||
|
Loading…
x
Reference in New Issue
Block a user