@@ -44,7 +44,7 @@ func init() {
44
44
// py.MustNewMethod("input", builtin_input, 0, input_doc),
45
45
// py.MustNewMethod("isinstance", builtin_isinstance, 0, isinstance_doc),
46
46
// py.MustNewMethod("issubclass", builtin_issubclass, 0, issubclass_doc),
47
- // py.MustNewMethod("iter", builtin_iter, 0, iter_doc),
47
+ py .MustNewMethod ("iter" , builtin_iter , 0 , iter_doc ),
48
48
py .MustNewMethod ("len" , builtin_len , 0 , len_doc ),
49
49
py .MustNewMethod ("locals" , py .InternalMethodLocals , 0 , locals_doc ),
50
50
py .MustNewMethod ("max" , builtin_max , 0 , max_doc ),
@@ -762,6 +762,39 @@ object.
762
762
The globals and locals are dictionaries, defaulting to the current
763
763
globals and locals. If only globals is given, locals defaults to it.`
764
764
765
+ const iter_doc = `iter(iterable) -> iterator
766
+ iter(callable, sentinel) -> iterator
767
+
768
+ Get an iterator from an object. In the first form, the argument must
769
+ supply its own iterator, or be a sequence.
770
+ In the second form, the callable is called until it returns the sentinel.
771
+ `
772
+
773
+ func builtin_iter (self py.Object , args py.Tuple ) (py.Object , error ) {
774
+ nArgs := len (args )
775
+ if nArgs < 1 {
776
+ return nil , py .ExceptionNewf (py .TypeError ,
777
+ "iter expected at least 1 arguments, got %d" ,
778
+ nArgs )
779
+ } else if nArgs > 2 {
780
+ return nil , py .ExceptionNewf (py .TypeError ,
781
+ "iter expected at most 2 arguments, got %d" ,
782
+ nArgs )
783
+ }
784
+
785
+ v := args [0 ]
786
+ if nArgs == 1 {
787
+ return py .Iter (v )
788
+ }
789
+ _ , ok := v .(* py.Function )
790
+ if ok != true {
791
+ return nil , py .ExceptionNewf (py .TypeError ,
792
+ "iter(v, w): v must be callable" )
793
+ }
794
+ return nil , py .ExceptionNewf (py .NotImplementedError ,
795
+ "Not implemented yet" )
796
+ }
797
+
765
798
// For code see vm/builtin.go
766
799
767
800
const len_doc = `len(object) -> integer
0 commit comments