diff options
Diffstat (limited to 'modules/language/python/number.scm')
-rw-r--r-- | modules/language/python/number.scm | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/modules/language/python/number.scm b/modules/language/python/number.scm index 6e45fd2..eb0d0d5 100644 --- a/modules/language/python/number.scm +++ b/modules/language/python/number.scm @@ -306,29 +306,36 @@ (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) |