diff options
Diffstat (limited to 'modules/language/python/list.scm')
-rw-r--r-- | modules/language/python/list.scm | 26 |
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)))) |