blueloveTH 2 년 전
부모
커밋
d8f3a53220
2개의 변경된 파일28개의 추가작업 그리고 3개의 파일을 삭제
  1. 11 2
      src/pocketpy.cpp
  2. 17 1
      tests/07_dict.py

+ 11 - 2
src/pocketpy.cpp

@@ -1188,10 +1188,19 @@ void init_builtins(VM* _vm) {
         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]);
         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]);
         return value;
     });

+ 17 - 1
tests/07_dict.py

@@ -125,4 +125,20 @@ for i in range(len(data)):
     b.append(z)
     if i % 3 == 0:
         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