progressively imporoving the conformance with python3
[software/python-on-guile.git] / modules / language / python / module / python.scm
index 96b0aa73dfc8601a7951c0829542de1c2f6e67e1..ef42cc6a63ec00612376a2574c8773ac80e66b48 100644 (file)
@@ -29,7 +29,7 @@
   #:use-module (language python eval             )
   #:use-module (language python bool             )
 
-  #:replace (list abs min max hash round format)
+  #:replace (list abs min max hash round format map)
   
   #:re-export (StopIteration GeneratorExit RuntimeError
                              Exception ValueError TypeError
@@ -47,7 +47,7 @@
                   chr classmethod staticmethod objectmethod
                   divmod enumerate filter
                   getattr hasattr setattr hex isinstance issubclass
-                  iter map sum id input oct ord pow super
+                  iter sum id input oct ord pow super
                   sorted zip
                  ClassMethod StaticMethod Funcobj))
 
           #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
 (define (id x) (object-address x))
 
 (define (input str)
-  (format #t str)
+  ((@ (guile) format) #t str)
   (readline))
 
 (define (idx x) x)