This commit is contained in:
blueloveTH 2023-09-24 19:44:15 +08:00
parent c0866022fb
commit d8f3a53220
2 changed files with 28 additions and 3 deletions

View File

@ -1188,10 +1188,19 @@ void init_builtins(VM* _vm) {
if(!ok) vm->KeyError(key); if(!ok) vm->KeyError(key);
}); });
_vm->bind_method<1>("dict", "pop", [](VM* vm, ArgsView args) { _vm->bind_method<-1>("dict", "pop", [](VM* vm, ArgsView args) {
if(args.size() != 2 && args.size() != 3){
vm->TypeError("pop() expected 1 or 2 arguments");
return vm->None;
}
Dict& self = _CAST(Dict&, args[0]); Dict& self = _CAST(Dict&, args[0]);
PyObject* value = self.try_get(args[1]); PyObject* value = self.try_get(args[1]);
if(value == nullptr) vm->KeyError(args[1]); if(value == nullptr){
if(args.size() == 2) vm->KeyError(args[1]);
if(args.size() == 3){
return args[2];
}
}
self.erase(args[1]); self.erase(args[1]);
return value; return value;
}); });

View File

@ -125,4 +125,20 @@ for i in range(len(data)):
b.append(z) b.append(z)
if i % 3 == 0: if i % 3 == 0:
y = b.pop() y = b.pop()
del a[y] del a[y]
a = {1: 2, 3: 4}
assert a.pop(1) == 2
try:
a.pop(1)
exit(1)
except KeyError:
pass
assert a.pop(1, None) is None
try:
a.pop(1, 2, 3)
exit(1)
except TypeError:
pass