summaryrefslogtreecommitdiff
path: root/modules/language/python/number.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/number.scm')
-rw-r--r--modules/language/python/number.scm25
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)