summaryrefslogtreecommitdiff
path: root/modules/language/python/module/python.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-04-12 16:04:20 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-04-12 16:04:20 +0200
commitacec233857e89fd5b64a8bf935ae87df40e3a11c (patch)
tree5f359ad72ccf42dd3a31bc220aa3b64e701b3d48 /modules/language/python/module/python.scm
parent3cc8afbebe959aa7c43689258c160c8fe6e60574 (diff)
decimal
Diffstat (limited to 'modules/language/python/module/python.scm')
-rw-r--r--modules/language/python/module/python.scm77
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)