allow next to be compatible with cpython (#241)

* add `itertools`

* Update _generated.h

* allow `next` to be compatible with cpython
This commit is contained in:
BLUELOVETH 2024-04-14 00:08:41 +08:00 committed by GitHub
parent cacc7274f7
commit 4d2af4b83d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 1 deletions

View File

@ -729,7 +729,7 @@ void VM::init_builtin_types(){
this->Ellipsis = heap._new<Dummy>(_new_type_object("ellipsis")); this->Ellipsis = heap._new<Dummy>(_new_type_object("ellipsis"));
this->True = heap._new<Dummy>(tp_bool); this->True = heap._new<Dummy>(tp_bool);
this->False = 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"); this->builtins = new_module("builtins");

View File

@ -36,3 +36,21 @@ assert next(i) == 4
assert next(i) == 5 assert next(i) == 5
assert next(i) == StopIteration assert next(i) == StopIteration
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