blueloveTH 2 лет назад
Родитель
Сommit
de7c1dc94b
2 измененных файлов с 14 добавлено и 0 удалено
  1. 6 0
      python/collections.py
  2. 8 0
      src/pocketpy.h

+ 6 - 0
python/collections.py

@@ -106,6 +106,12 @@ class defaultdict:
             return False
         return self._a == __o._a
     
+    def __iter__(self):
+        return iter(self._a)
+
+    def __contains__(self, key):
+        return key in self._a
+    
     def __len__(self):
         return len(self._a)
 

+ 8 - 0
src/pocketpy.h

@@ -1021,6 +1021,14 @@ inline void init_builtins(VM* _vm) {
         return VAR(self.contains(key));
     });
 
+    _vm->bind__iter__(_vm->tp_dict, [](VM* vm, PyObject* obj) {
+        Dict& self = _CAST(Dict&, obj);
+        auto items = self.items();
+        Tuple t(items.size());
+        for(int i=0; i<items.size(); i++) t[i] = items[i].first;
+        return vm->py_iter(VAR(std::move(t)));
+    });
+
     _vm->bind_method<-1>("dict", "get", [](VM* vm, ArgsView args) {
         Dict& self = _CAST(Dict&, args[0]);
         if(args.size() == 1+1){