diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-04-15 22:29:50 +0200 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-04-15 22:29:50 +0200 |
commit | 77e4e51a919c50e2847527aaffe67e8e19b970ae (patch) | |
tree | 61a261e5b053da07493610b947fd8b51e1a8c2f4 /modules/language/python/number.scm | |
parent | 7c0c098b89dc33ad1018b6542def4e2d34ddd2a8 (diff) |
progressively imporoving the conformance with python3
Diffstat (limited to 'modules/language/python/number.scm')
-rw-r--r-- | modules/language/python/number.scm | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/modules/language/python/number.scm b/modules/language/python/number.scm index 6d93435..845a155 100644 --- a/modules/language/python/number.scm +++ b/modules/language/python/number.scm @@ -74,7 +74,7 @@ (define-syntax-rule (mk-biop1 mk-biop0 op r1) (begin (mk-biop0 op) - (define-method (op v (o <p>)) + (define-method (op (o <p>) v) (aif it (ref o 'r1) (it v) (next-method))))) @@ -95,6 +95,7 @@ (define-method (op o2 (o1 <py-int>)) (op o2 (slot-ref o1 'x))))) + (mk-biop2 b0 r+ + __add__ __radd__) (mk-biop2 b0 r- - __sub__ __rsub__) (mk-biop2 b0 r* * __mul__ __rmul__) @@ -106,6 +107,7 @@ (mk-biop2 b0 rexpt expt __pow__ __rpow__) (b0 py-equal?) + (define-method (py-lshift (o1 <integer>) (o2 <integer>)) (ash o1 o2)) (define-method (py-rshift (o1 <integer>) (o2 <integer>)) @@ -123,6 +125,62 @@ (define-method (py-lognot (o1 <integer>)) (lognot o1)) +(define-method (py-logand o1 (o2 <py-int>)) + (py-logand o1 (slot-ref o2 'x))) + +(define-method (py-logand (o1 <py-int>) o2) + (py-logand (slot-ref o1 'x) o2)) + +(define-method (py-logior o1 (o2 <py-int>)) + (py-logior o1 (slot-ref o2 'x))) + +(define-method (py-logior (o1 <py-int>) o2) + (py-logior (slot-ref o1 'x) o2)) + +(define-method (py-logxor o1 (o2 <py-int>)) + (py-logxor o1 (slot-ref o2 'x))) + +(define-method (py-logxor (o1 <py-int>) o2) + (py-logxor (slot-ref o1 'x) o2)) + +(define-method (py-lognot (o1 <py-int>)) + (lognot (slot-ref o1 'x))) + +(define-method (py-logand (o1 <p>) o2) + (aif it (ref o1 '__and__) + (it o2) + (next-method))) + +(define-method (py-logand o1 (o2 <p>)) + (aif it (ref o1 '__rand__) + (it o2) + (next-method))) + +(define-method (py-logior (o1 <p>) o2) + (aif it (ref o1 '__or__) + (it o2) + (next-method))) + +(define-method (py-logior o1 (o2 <p>)) + (aif it (ref o1 '__ror__) + (it o2) + (next-method))) + +(define-method (py-logxor (o1 <p>) o2) + (aif it (ref o1 '__xor__) + (it o2) + (next-method))) + +(define-method (py-logxor o1 (o2 <p>)) + (aif it (ref o1 '__rxor__) + (it o2) + (next-method))) + +(define-method (py-lognot (o1 <p>)) + (aif it (ref o1 '__not__) + (it) + (next-method))) + (define-method (py-/ (o1 <number>) (o2 <integer>)) (/ o1 (exact->inexact o2))) |