summaryrefslogtreecommitdiff
path: root/modules/language/python/number.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-04-15 22:29:50 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-04-15 22:29:50 +0200
commit77e4e51a919c50e2847527aaffe67e8e19b970ae (patch)
tree61a261e5b053da07493610b947fd8b51e1a8c2f4 /modules/language/python/number.scm
parent7c0c098b89dc33ad1018b6542def4e2d34ddd2a8 (diff)
progressively imporoving the conformance with python3
Diffstat (limited to 'modules/language/python/number.scm')
-rw-r--r--modules/language/python/number.scm60
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)))