File tree 2 files changed +29
-7
lines changed
2 files changed +29
-7
lines changed Original file line number Diff line number Diff line change @@ -298,8 +298,9 @@ func Next(self Object) Object {
298
298
panic (ExceptionNewf (TypeError , "'%s' object is not iterable" , self .Type ().Name ))
299
299
}
300
300
301
- // Iterate the iterator until finished calling the function passed in on each object
302
- func Iterate (iterator Object , fn func (Object )) {
301
+ // Create an iterator from obj and iterate the iterator until finished
302
+ // calling the function passed in on each object
303
+ func Iterate (obj Object , fn func (Object )) {
303
304
defer func () {
304
305
if r := recover (); r != nil {
305
306
if IsException (StopIteration , r ) {
@@ -309,9 +310,30 @@ func Iterate(iterator Object, fn func(Object)) {
309
310
}
310
311
}
311
312
}()
312
- for {
313
- item := Next (iterator )
314
- fn (item )
313
+ // Some easy cases
314
+ switch x := obj .(type ) {
315
+ case Tuple :
316
+ for _ , item := range x {
317
+ fn (item )
318
+ }
319
+ case * List :
320
+ for _ , item := range x .Items {
321
+ fn (item )
322
+ }
323
+ case String :
324
+ for _ , item := range x {
325
+ fn (String (item ))
326
+ }
327
+ case Bytes :
328
+ for _ , item := range x {
329
+ fn (Int (item ))
330
+ }
331
+ default :
332
+ iterator := Iter (obj )
333
+ for {
334
+ item := Next (iterator )
335
+ fn (item )
336
+ }
315
337
}
316
338
}
317
339
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ func SequenceTuple(v Object) Tuple {
11
11
return Tuple (x .Items ).Copy ()
12
12
default :
13
13
t := Tuple {}
14
- Iterate (Iter ( v ) , func (item Object ) {
14
+ Iterate (v , func (item Object ) {
15
15
t = append (t , item )
16
16
})
17
17
return t
@@ -27,7 +27,7 @@ func SequenceList(v Object) *List {
27
27
return x .Copy ()
28
28
default :
29
29
l := NewList ()
30
- Iterate (Iter ( v ) , func (item Object ) {
30
+ Iterate (v , func (item Object ) {
31
31
l .Append (item )
32
32
})
33
33
return l
You can’t perform that action at this time.
0 commit comments