@@ -1035,7 +1035,7 @@ def __reduce__(self):
1035
1035
1036
1036
1037
1037
class _tee_dataobject :
1038
- LINKCELLS = 32
1038
+ LINKCELLS = 128
1039
1039
1040
1040
@__graalpython__ .builtin_method
1041
1041
def __init__ (self , it , values = None , nxt = None ):
@@ -1045,12 +1045,14 @@ def __init__(self, it, values=None, nxt=None):
1045
1045
self .numread = len (values )
1046
1046
if self .numread == _tee_dataobject .LINKCELLS :
1047
1047
self .nextlink = nxt
1048
+ if nxt and not isinstance (nxt , _tee_dataobject ):
1049
+ raise ValueError ("_tee_dataobject next link must be a _tee_dataobject" )
1048
1050
elif self .numread > _tee_dataobject .LINKCELLS :
1049
1051
raise ValueError (f"_tee_dataobject should nove have more than { _tee_dataobject .LINKCELLS } links" )
1050
1052
elif nxt is not None :
1051
1053
raise ValueError ("_tee_dataobject shouldn't have a next if not full" )
1052
1054
else :
1053
- self .values = [None ] * _tee_dataobject . LINKCELLS
1055
+ self .values = []
1054
1056
self .numread = 0
1055
1057
self .running = False
1056
1058
self .nextlink = nxt
@@ -1062,10 +1064,12 @@ def _jumplink(self):
1062
1064
return self .nextlink
1063
1065
1064
1066
@__graalpython__ .builtin_method
1065
- def __getitem__ (self , i ):
1067
+ def _getitem (self , i ):
1068
+ assert i < _tee_dataobject .LINKCELLS
1066
1069
if i < self .numread :
1067
1070
return self .values [i ]
1068
1071
else :
1072
+ assert i == self .numread
1069
1073
if self .running :
1070
1074
raise RuntimeError ("cannot re-enter the tee iterator" )
1071
1075
self .running = True
@@ -1074,12 +1078,13 @@ def __getitem__(self, i):
1074
1078
finally :
1075
1079
self .running = False
1076
1080
self .numread += 1
1077
- self .values [ i ] = value
1081
+ self .values . append ( value )
1078
1082
return value
1079
1083
1080
1084
@__graalpython__ .builtin_method
1081
1085
def __reduce__ (self ):
1082
- return type (self ), (self .it , self .values , self .nextlink )
1086
+ values = self .values [:self .numread ]
1087
+ return type (self ), (self .it , values , self .nextlink )
1083
1088
1084
1089
1085
1090
class _tee :
@@ -1108,7 +1113,7 @@ def __next__(self):
1108
1113
if self .index >= _tee_dataobject .LINKCELLS :
1109
1114
self .dataobj = self .dataobj ._jumplink ()
1110
1115
self .index = 0
1111
- value = self .dataobj [ self .index ]
1116
+ value = self .dataobj . _getitem ( self .index )
1112
1117
self .index += 1
1113
1118
return value
1114
1119
0 commit comments