debuggings
[software/python-on-guile.git] / modules / language / python / number.scm
index 6e45fd21e22c4b4d85631bee4c2ef6835da4244a..eb0d0d5f8a7c7dc7adfff3007a736d1c33f4ec41 100644 (file)
   (apply write (slot-ref o 'x) l))
 
 (define-python-class int (<py> <py-int>)
-  (define __init__
-    (letrec ((__init__
+  (define __new__
+    (letrec ((__new__
               (case-lambda
                 ((self)
-                 (__init__ self 0))
+                 0)
                 
                 ((self n)
                  (let lp ((n n))
                    (cond
                     ((and (number? n) (integer? n))
-                     (slot-set! self 'x n))
+                     n)
+                   ((boolean? n)
+                    (if n 1 0))
                     ((number? n)
                      (lp (py-floor n)))
                     ((string? n)
                      (lp (string->number n)))
                     (else
-                     (aif it (slot-ref n '__int__)
-                          (slot-set! self 'x it)
-                          (raise ValueError "could not make int from " n))))))
+                    (catch #t
+                      (lambda ()
+                        (aif it (slot-ref n '__int__)
+                             it
+                             (raise (ValueError (py-mod "could not make int from %r"
+                                                        (list n))))))
+                      (lambda z (raise (ValueError (py-mod "could not make int from %r"
+                                                           (list n))))))))))
       
                 ((self n k)
-                 (__init__ self (string->number n k))))))
-      __init__)))
+                 (__new__ self (string->number n k))))))
+      __new__)))
 
 (name-object int)