summaryrefslogtreecommitdiff
path: root/modules/language/python/list.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r--modules/language/python/list.scm26
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm
new file mode 100644
index 0000000..64ff6e4
--- /dev/null
+++ b/modules/language/python/list.scm
@@ -0,0 +1,26 @@
+(define-module (language python list)
+ #:use-module (oop pf-objects)
+ #:use-module (oop goops)
+ #:use-module (language python yield)
+ #:use-module (language python for)
+ #:use-module (language python exceptions)
+ #:export (to-list))
+
+
+(define-method (to-list x)
+ (if (vector? x)
+ (vector->list x)
+ x))
+
+(define-method (to-list (x <p>))
+ ((ref x '__tolist__ (lambda () (error "missing __tolist__ in object")))))
+
+(define-method (to-list (x <yield>))
+ (define l '())
+ (catch StopIteration
+ (lambda ()
+ (let lp ()
+ (set! l (cons (next x) l))
+ (lp)))
+ (lambda x
+ (reverse l))))