File tree Expand file tree Collapse file tree 2 files changed +29
-7
lines changed
Expand file tree Collapse file tree 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{
298298panic (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- 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 )){
303304defer func (){
304305if r := recover (); r != nil {
305306if IsException (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+ 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+ }
315337 }
316338}
317339
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ func SequenceTuple(v Object) Tuple{
1111return Tuple (x .Items ).Copy ()
1212default :
1313t := Tuple {}
14- Iterate (Iter ( v ) , func (item Object ){
14+ Iterate (v , func (item Object ){
1515t = append (t , item )
1616 })
1717return t
@@ -27,7 +27,7 @@ func SequenceList(v Object) *List{
2727return x .Copy ()
2828default :
2929l := NewList ()
30- Iterate (Iter ( v ) , func (item Object ){
30+ Iterate (v , func (item Object ){
3131l .Append (item )
3232 })
3333return l
You can’t perform that action at this time.
0 commit comments