diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-04-12 16:04:20 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-04-12 16:04:20 +0200 |
commit | acec233857e89fd5b64a8bf935ae87df40e3a11c (patch) | |
tree | 5f359ad72ccf42dd3a31bc220aa3b64e701b3d48 /modules/language/python/module/python.scm | |
parent | 3cc8afbebe959aa7c43689258c160c8fe6e60574 (diff) |
decimal
Diffstat (limited to 'modules/language/python/module/python.scm')
-rw-r--r-- | modules/language/python/module/python.scm | 77 |
1 files changed, 68 insertions, 9 deletions
diff --git a/modules/language/python/module/python.scm b/modules/language/python/module/python.scm index 30434af..f433360 100644 --- a/modules/language/python/module/python.scm +++ b/modules/language/python/module/python.scm @@ -130,15 +130,74 @@ #t (is-a? (ref sub '__goops__) (ref cls '__goops__))))) -(define-method (isinstance x y) #f) +(define-method (isinstance x y) + (if (null? y) + #f + (if (pair? y) + (or (isinstance x (car y)) + (isinstance x (cdr y))) + (is-a? x y)))) + +(define-method (isinstance (i <integer>) y) + (if (issubclass y int) + #t + (if (pair? y) + (or (isinstance i (car y)) + (isinstance i (cdr y))) + (is-a? i y)))) + +(define-method (isinstance (i <real>) y) + (if (issubclass y float) + #t + (if (pair? y) + (or (isinstance i (car y)) + (isinstance i (cdr y))) + (is-a? i y)))) + +(define-method (isinstance (i <pair>) y) + (if (issubclass y tuple) + #t + (if (pair? y) + (or (isinstance i (car y)) + (isinstance i (cdr y))) + (is-a? i y)))) + +(define-method (isinstance (i <string>) y) + (if (issubclass y str) + #t + (if (pair? y) + (or (isinstance i (car y)) + (isinstance i (cdr y))) + (is-a? i y)))) + +(define-method (isinstance (i <bytevector>) y) + (if (issubclass y bytes) + #t + (if (pair? y) + (or (isinstance i (car y)) + (isinstance i (cdr y))) + (is-a? i y)))) + + +(define-method (isinstance o (cl <p>)) + (cond + ((eq? cl py-list) + (is-a? o <py-list>)) + (else #f))) + (define-method (isinstance (o <p>) (cl <p>)) - (aif it (ref cl '__instancecheck__) - (it o) - (if (pair? cl) - (or - (isinstance o (car cl)) - (isinstance o (cdr cl))) - (is-a? o (ref cl '__goops__))))) + (cond + ((ref cl '__instancecheck__) => + (lambda (it) + (it o))) + ((pair? cl) + (or + (isinstance o (car cl)) + (isinstance o (cdr cl)))) + (else + (is-a? o (ref cl '__goops__))))) + + (define iter (case-lambda @@ -181,7 +240,7 @@ (define (id x) (object-address x)) (define (input str) - (format #t str) + ((@ (guile) format) #t str) (readline)) (define (idx x) x) |