Skip to content

Commit f72f347

Browse files
committed
Make iterate create the iterator itself
1 parent 2cb6be9 commit f72f347

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

‎py/internal.go‎

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,9 @@ func Next(self Object) Object{
298298
panic(ExceptionNewf(TypeError, "'%s' object is not iterable", self.Type().Name))
299299
}
300300

301-
// Iterate the iterator until finished calling the function passed in on each object
302-
funcIterate(iteratorObject, fnfunc(Object)){
301+
// Create an iterator from obj and iterate the iterator until finished
302+
// calling the function passed in on each object
303+
funcIterate(objObject, fnfunc(Object)){
303304
deferfunc(){
304305
ifr:=recover(); r!=nil{
305306
ifIsException(StopIteration, r){
@@ -309,9 +310,30 @@ func Iterate(iterator Object, fn func(Object)){
309310
}
310311
}
311312
}()
312-
for{
313-
item:=Next(iterator)
314-
fn(item)
313+
// Some easy cases
314+
switchx:=obj.(type){
315+
caseTuple:
316+
for_, item:=rangex{
317+
fn(item)
318+
}
319+
case*List:
320+
for_, item:=rangex.Items{
321+
fn(item)
322+
}
323+
caseString:
324+
for_, item:=rangex{
325+
fn(String(item))
326+
}
327+
caseBytes:
328+
for_, item:=rangex{
329+
fn(Int(item))
330+
}
331+
default:
332+
iterator:=Iter(obj)
333+
for{
334+
item:=Next(iterator)
335+
fn(item)
336+
}
315337
}
316338
}
317339

‎py/sequence.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ func SequenceTuple(v Object) Tuple{
1111
returnTuple(x.Items).Copy()
1212
default:
1313
t:=Tuple{}
14-
Iterate(Iter(v), func(itemObject){
14+
Iterate(v, func(itemObject){
1515
t=append(t, item)
1616
})
1717
returnt
@@ -27,7 +27,7 @@ func SequenceList(v Object) *List{
2727
returnx.Copy()
2828
default:
2929
l:=NewList()
30-
Iterate(Iter(v), func(itemObject){
30+
Iterate(v, func(itemObject){
3131
l.Append(item)
3232
})
3333
returnl

0 commit comments

Comments
(0)