Procházet zdrojové kódy

allow `next` to be compatible with cpython (#241)

* add `itertools`

* Update _generated.h

* allow `next` to be compatible with cpython
BLUELOVETH před 1 rokem
rodič
revize
4d2af4b83d
2 změnil soubory, kde provedl 19 přidání a 1 odebrání
  1. 1 1
      src/vm.cpp
  2. 18 0
      tests/28_iter.py

+ 1 - 1
src/vm.cpp

@@ -729,7 +729,7 @@ void VM::init_builtin_types(){
     this->Ellipsis = heap._new<Dummy>(_new_type_object("ellipsis"));
     this->True = heap._new<Dummy>(tp_bool);
     this->False = heap._new<Dummy>(tp_bool);
-    this->StopIteration = heap._new<Dummy>(_new_type_object("StopIterationType"));
+    this->StopIteration = _all_types[_new_type_object("StopIteration", tp_exception)].obj;
 
     this->builtins = new_module("builtins");
     

+ 18 - 0
tests/28_iter.py

@@ -36,3 +36,21 @@ assert next(i) == 4
 assert next(i) == 5
 assert next(i) == StopIteration
 assert next(i) == StopIteration
+
+import builtins
+
+def next(obj):
+    res = builtins.next(obj)
+    if res is StopIteration:
+        raise StopIteration
+    return res
+    
+a = iter([1])
+assert next(a) == 1
+
+try:
+    next(a)
+    exit(1)
+except StopIteration:
+    pass
+