summaryrefslogtreecommitdiff
path: root/modules/language/*.scm
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/*.scm')
-rw-r--r--modules/language/*.scm0
-rw-r--r--modules/language/python/bool.scm35
-rw-r--r--modules/language/python/bytes.scm1464
-rw-r--r--modules/language/python/checksum.scm124
-rw-r--r--modules/language/python/class.scm71
-rw-r--r--modules/language/python/compile.scm3078
-rw-r--r--modules/language/python/completer.scm48
-rw-r--r--modules/language/python/def.scm168
-rw-r--r--modules/language/python/dict.scm795
-rw-r--r--modules/language/python/dir.scm180
-rw-r--r--modules/language/python/eval.scm170
-rw-r--r--modules/language/python/exceptions.scm173
-rw-r--r--modules/language/python/expr.scm106
-rw-r--r--modules/language/python/for.scm182
-rw-r--r--modules/language/python/format2.scm324
-rw-r--r--modules/language/python/guilemod.scm261
-rw-r--r--modules/language/python/hash.scm52
-rw-r--r--modules/language/python/list.scm1002
-rw-r--r--modules/language/python/module.scm356
-rw-r--r--modules/language/python/module/_blake2b.scm10
-rw-r--r--modules/language/python/module/_blake2s.scm10
-rw-r--r--modules/language/python/module/_csv.scm614
-rw-r--r--modules/language/python/number.scm637
-rw-r--r--modules/language/python/parser-tool.scm46
-rw-r--r--modules/language/python/parser.scm849
-rw-r--r--modules/language/python/persist.scm114
-rw-r--r--modules/language/python/procedure.scm165
-rw-r--r--modules/language/python/property.scm48
-rw-r--r--modules/language/python/python.scm265
-rw-r--r--modules/language/python/range.scm204
-rw-r--r--modules/language/python/set.scm295
-rw-r--r--modules/language/python/spec.scm63
-rw-r--r--modules/language/python/string.scm747
-rw-r--r--modules/language/python/try.scm122
-rw-r--r--modules/language/python/tuple.scm49
-rw-r--r--modules/language/python/util.scm2
-rw-r--r--modules/language/python/with.scm53
-rw-r--r--modules/language/python/yield.scm138
38 files changed, 0 insertions, 13020 deletions
diff --git a/modules/language/*.scm b/modules/language/*.scm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/modules/language/*.scm
diff --git a/modules/language/python/bool.scm b/modules/language/python/bool.scm
deleted file mode 100644
index d15c749..0000000
--- a/modules/language/python/bool.scm
+++ /dev/null
@@ -1,35 +0,0 @@
-(define-module (language python bool)
- #:use-module (oop goops)
- #:use-module (language python exceptions)
- #:use-module (oop pf-objects)
- #:export (bool))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-method (bool x)
- (cond
- ((null? x)
- #f)
- ((eq? x None)
- #f)
- (else x)))
-
-(define-method (bool (x <integer>)) (if (= x 0) #f x))
-(define-method (bool (x <p>))
- (aif it (ref x '__bool__)
- (it)
- (next-method)))
-
-
-(define-method (+ (a <boolean>) b)
- (+ (if a 1 0) b))
-(define-method (+ b (a <boolean>))
- (+ (if a 1 0) b))
-(define-method (* (a <boolean>) b)
- (* (if a 1 0) b))
-(define-method (* b (a <boolean>))
- (* (if a 1 0) b))
-(define-method (- (a <boolean>) b)
- (- (if a 1 0) b))
-(define-method (- b (a <boolean>))
- (- b (if a 1 0)))
diff --git a/modules/language/python/bytes.scm b/modules/language/python/bytes.scm
deleted file mode 100644
index 1e3a0cd..0000000
--- a/modules/language/python/bytes.scm
+++ /dev/null
@@ -1,1464 +0,0 @@
-(define-module (language python bytes)
- #:use-module (oop goops)
- #:use-module (oop pf-objects)
- #:use-module (ice-9 match)
- #:use-module (ice-9 iconv)
- #:use-module (rnrs bytevectors)
- #:use-module (system foreign)
- #:use-module (language python string)
- #:use-module (language python for)
- #:use-module (language python def)
- #:use-module (language python try)
- #:use-module (language python exceptions)
- #:use-module (language python list)
- #:use-module (language python hash)
- #:use-module (language python bool)
- #:use-module (language python persist)
- #:export (<py-bytes> bv-scm pybytes-listing bytes bytearray bytes->bytevector
- py-decode make_trans
- <py-bytearray> pybytesarray-listing scm-bytevector))
-
-(define (bv-scm x)
- (slot-ref (bytes x) 'bytes))
-
-(define (scm-bytevector x)
- (slot-ref (bytes x) 'bytes))
-
-(define (bytes->bytevector x) (slot-ref x 'bytes))
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define b-ref bytevector-u8-ref)
-(define b-set! bytevector-u8-set!)
-(define b-make make-bytevector)
-(define b-len bytevector-length)
-(define (b->list x) (bytevector->u8-list (bv-scm x)))
-(define list->b u8-list->bytevector)
-(define-class <py-bytes> () bytes)
-(define-class <py-bytearray> () n vec)
-
-(name-object <py-bytes>)
-(name-object <py-bytearray>)
-
-(cpit <py-bytes> (o (lambda (o n l)
- (slot-set! o 'bytes
- (let lp ((l l) (i 0) (b (b-make n)))
- (if (pair? l)
- (b-set! b i (car l))
- (lp (cdr l) (+ i 1) b)))))
- (let* ((b (slot-ref o 'bytes))
- (n (b-len b)))
- (list
- n
- (let lp ((i 0))
- (if (< i n)
- (cons (b-ref b i) (lp (+ i 1)))
- '()))))))
-
-(cpit <py-bytearray> (o (lambda (o n m l)
- (slot-set! o 'n m)
- (slot-set! o 'vec
- (let lp ((l l) (i 0) (b (b-make n)))
- (if (pair? l)
- (b-set! b i (car l))
- (lp (cdr l) (+ i 1) b)))))
- (let* ((b (slot-ref o 'vec))
- (n (b-len b)))
- (list
- n
- (slot-ref o 'n)
- (let lp ((i 0))
- (if (< i n)
- (cons (b-ref b i) (lp (+ i 1)))
- '()))))))
-
-
-(define-method (b-get (o <bytevector>))
- o)
-(define-method (b-get (o <py-bytes>))
- (slot-ref o 'bytes))
-(define-method (b-get (o <py-bytearray>))
- (slot-ref o 'vec))
-
-(define (b-char x)
- (cond
- ((char? x)
- (ch-find x))
- ((string? x)
- (ch-find (string-ref x 0)))
- (else
- x)))
-
-(define-python-class bytes (<py-bytes>)
- (define maketrans
- (lambda (x y) (make_trans x y)))
-
- (define __init__
- (case-lambda
- ((self)
- (__init__ self ""))
- ((self s)
- (cond
- ((is-a? s <string>)
- (let* ((n (string-length s))
- (bytes (b-make n)))
- (let lp ((i 0))
- (if (< i n)
- (begin
- (b-set! bytes i (ch-find (string-ref s i)))
- (lp (+ i 1)))))
- (slot-set! self 'bytes bytes)))
- ((is-a? s <py-string>)
- (__init__ self (slot-ref s 'str)))
- ((is-a? s <py-bytes>)
- (slot-set! self 'bytes (slot-ref s 'bytes)))
- ((is-a? s <bytevector>)
- (slot-set! self 'bytes s))
- ((is-a? s <py-bytearray>)
- (let* ((n (slot-ref s 'n))
- (b (b-make n)))
- (bytevector-copy! (slot-ref s 'vec) 0 b 0 n)
- (slot-set! self 'bytes b)))
- (else
- (for ((x : s)) ((r '()))
- (cons (b-char x) r)
-
- #:final
- (let* ((n (length r))
- (bytes (b-make n)))
- (let lp ((i (- n 1)) (r r))
- (if (>= i 0)
- (begin
- (b-set! bytes i (car r))
- (lp (- i 1) (cdr r)))
- (slot-set! self 'bytes bytes)))))))))))
-
-(name-object bytes)
-
-(define-python-class bytearray (<py-bytearray>)
- (define __init__
- (case-lambda
- ((self)
- (__init__ self ""))
- ((self s)
- (cond
- ((is-a? s <string>)
- (let* ((n (string-length s))
- (bytes (b-make n)))
- (let lp ((i 0))
- (if (< i n)
- (begin
- (b-set! bytes i (ch-find (string-ref s i)))
- (lp (+ i 1)))))
- (slot-set! self 'vec bytes)
- (slot-set! self 'n n)))
- ((is-a? s <py-string>)
- (__init__ self (slot-ref s 'str)))
- ((is-a? s <py-bytes>)
- (let ((b (slot-ref s 'bytes)))
- (slot-set! self 'vec (bytevector-copy b))
- (slot-set! self 'n (b-len b))))
- ((is-a? s <bytevector>)
- (slot-set! self 'vec (bytevector-copy s))
- (slot-set! self 'n (b-len s)))
- ((is-a? s <py-bytearray>)
- (slot-set! self 'vec (bytevector-copy (slot-ref s 'vec)))
- (slot-set! self 'n (slot-ref s 'n)))
- (else
- (for ((x : s)) ((r '()))
- (cons (b-char x) r)
- #:final
- (let* ((n (length r))
- (bytes (b-make n)))
- (let lp ((i (- n 1)) (r r))
- (if (>= i 0)
- (begin
- (b-set! bytes i (car r))
- (lp (- i 1) (cdr r)))
- (begin
- (slot-set! self 'vec bytes)
- (slot-set! self 'n (b-len bytes)))))))))))))
-
-(name-object bytearray)
-
-(define-syntax-rule (define-py (f o . u) code ...)
- (begin
- (define-method (f (o <bytevector>) . u) code ...)
- (define-method (f (o <py-bytes>) . l) (apply f (slot-ref o 'bytes) l))))
-
-(define-syntax-rule (define-py! (f o . u) code ...)
- (begin
- (define-method (f (o <py-bytearray>) . u) code ...)))
-
-(define (idd x) x)
-(define-syntax-rule (define-py* g (f m o nn . u) code ...)
- (begin
- (define (g m o nn . u) code ...)
- (define-method (f (o <bytevector>) . l)
- (apply g idd o (b-len o) l))
- (define-method (f (o <py-bytes>) . l)
- (let ((b (slot-ref o 'bytes)))
- (apply g bytes b (b-len b) l)))
- (define-method (f (o <py-bytearray>) . l)
- (let ((b (slot-ref o 'vec))
- (n (slot-ref o 'n)))
- (apply g bytearray b n l)))))
-
-(define-syntax-rule (define-py** g (f m o nn . u) code ...)
- (begin
- (define (g m o nn . u) code ...)
- (define-method (f (o <bytevector>) . l)
- (apply g idd o (b-len o) l))
- (define-method (f (o <py-bytes>) . l)
- (let ((b (slot-ref o 'bytes)))
- (apply g bytes b (b-len b) l)))
- (define-method (f (o <py-bytearray>) . l)
- (let ((b (slot-ref o 'vec))
- (n (slot-ref o 'n)))
- (apply g bytearray b n l)))
- (define-method (f (o <p>) . l)
- (aif it (ref o 'g)
- (apply it l)
- (next-method)))))
-
-(define-py* -bool (bool m o nn) (if (= (len o) 0) #f o))
-
-(define-method (write (b <py-bytes>) . l)
- (define port (if (pair? l) (car l) #t))
- (format port "b'")
- (b->string port (slot-ref b 'bytes))
- (format port "'"))
-
-(define-method (write (b <py-bytearray>) . l)
- (define port (if (pair? l) (car l) #t))
- (format port "bytearray(b'")
- (b->string port (pylist-slice (slot-ref b 'vec) 0 (len b) 1))
- (format port "')"))
-
-
-(define dynlink (dynamic-link))
-
-(define stringn
- (pointer->procedure
- '*
- (dynamic-func "scm_from_latin1_stringn" dynlink)
- (list '* size_t)))
-
-(define ch->i (make-hash-table))
-
-(define (re-eval ch)
- (let lp ((i 0))
- (if (< i 256)
- (if (eq? ch (chf i))
- (begin
- (hash-set! ch->i ch i)
- (lp (+ i 1)))
- (lp (+ i 1)))
- (hash-ref ch->i ch))))
-
-(define (ch-find ch)
- (aif it (hash-ref ch->i ch #f)
- (if (eq? ch (chf it))
- it
- (re-eval ch))
- (re-eval ch)))
-
-(define (chf ch)
- (let ((bytes (pointer->scm
- (stringn
- (bytevector->pointer
- (b-make 1 ch))
- 1))))
- (if (= (string-length bytes) 1)
- (string-ref bytes 0)
- (chf 0))))
-
-(define (b->string port b)
- (let ((n (b-len b)))
- (let lp ((i 0))
- (if (< i n)
- (let ((ch (b-ref b i)))
- (cond
- ((equal? ch 0)
- (format port "\\x00"))
- ((equal? (chf ch) #\\)
- (format port "\\\\"))
- ((equal? (chf ch) #\')
- (format port "\\'"))
- ((equal? (chf ch) #\newline)
- (format port "\\n"))
- ((= ch 7)
- (format port "\\a"))
- ((= ch 8)
- (format port "\\b"))
- ((= ch 12)
- (format port "\\f"))
- ((= ch 10)
- (format port "\\n"))
- ((= ch 13)
- (format port "\\r"))
- ((= ch 9)
- (format port "\\t"))
- ((= ch 11)
- (format port "\\v"))
- (else
- (if (< ch 32)
- (format port "\\x~2,'0x" ch)
- (format port "~a" (make-string 1 (chf ch))))))
- (lp (+ i 1)))))))
-
-(define-py (py-hash b) (hash b pyhash-N))
-
-(define-py* pylist (pylist-ref bytes o N nin)
- (define n (if (< nin 0) (+ N nin) nin))
- (if (and (>= n 0) (< n N))
- (if (eq? bytes idd)
- (b-ref o n)
- (bytes (b-make 1 (b-ref o n))))
- (raise IndexError)))
-
-(define-py (len b) (b-len b))
-(define-py! (len b) (slot-ref b 'n))
-
-(define-py* ->list (to-list mk b n)
- (let lp ((i 0) (r '()))
- (if (< i n)
- (lp (+ i 1) (cons (b-ref b i) r))
- (reverse r))))
-
-(define-py* ->pylist (to-pylist mk b n)
- (let* ((m n)
- (o (make <py-list>))
- (v (make-vector m)))
- (slot-set! o 'vec v)
- (slot-set! o 'n n)
- (let lp ((i 0))
- (if (< i n)
- (begin
- (vector-set! v i (if (equal? bytes idd)
- (b-ref b i)
- (bytes (b-make 1 (b-ref b i)))))
- (lp (+ i 1)))
- o))))
-
-
-(define-py! (pylist-set! o nin val)
- (define N (slot-ref o 'n))
- (define n (if (< nin 0) (+ N nin) nin))
- (if (and (>= n 0) (< n (slot-ref o 'n)))
- (b-set! (slot-ref o 'vec) n val)
- (raise IndexError)))
-
-(define-py* slice (pylist-slice bytes o N n1 n2 n3)
- (define (f n) (max 0 (min N (if (< n 0) (+ N n) n))))
-
- (let* ((n1 (f (if (eq? n1 None) 0 n1)))
- (n2 (f (if (eq? n2 None) N n2)))
- (n3 (f (if (eq? n3 None) 1 n3)))
- (n (let lp ((i n1) (j 0))
- (if (< i n2)
- (lp (+ i n3) (+ j 1))
- j)))
- (b (b-make n)))
- (let lp ((i n1) (j 0))
- (if (< j n)
- (begin
- (b-set! b j (b-ref o i))
- (lp (+ i n3) (+ j 1)))
- (bytes b)))))
-
-(define-py! (pylist-subset! o n1 n2 n3 val)
- (define N (slot-ref o 'n))
- (define (f n) (if (< n 0) (+ N n) n))
-
- (let* ((n1 (f (if (eq? n1 None) 0 n1)))
- (n2 (f (if (eq? n2 None) (slot-ref o 'n) n2)))
- (n3 (f (if (eq? n3 None) 1 n3)))
- (vec (slot-ref o 'vec))
- (l2 (to-list val))
- (N2 (length l2)))
- (if (<= n2 N)
- (let lp ((i 0) (l2 l2) (j n1))
- (if (< j n2)
- (if (< i N2)
- (let ((r (car l2)))
- (if (and (number? r) (integer? r) (>= r 0) (< r 256))
- (begin
- (b-set! vec j r)
- (lp (+ i 1) (cdr l2) (+ j n3)))
- (raise TypeError "not a byte")))
- (let lp ((j2 j))
- (if (< j2 n2)
- (lp (+ j2 n3))
- (let lp ((k1 j) (k2 j2))
- (if (< k2 N)
- (begin
- (b-set! vec k1 (b-ref vec k2))
- (lp (+ k1 1) (+ k2 1)))
- (begin
- (let lp ((i k2))
- (if (< i N)
- (begin
- (b-set! vec i #f)
- (lp (+ i 1)))
- (slot-set! o 'n k1)))))))))))
- (raise IndexError))
- (values)))
-
-(define (byte x)
- (or (and (integer? x) (>= x 0) (< x 256) x)
- (and (is-a? x <bytevector>) (b-ref x 0))
- (and (is-a? x <py-bytes>) (b-ref (slot-ref x 'bytes) 0))
- (and (is-a? x <py-bytearray>) (b-ref (slot-ref x 'vec) 0))))
-
-(define-py! (pylist-append! o val)
- (let* ((n (slot-ref o 'n))
- (vec (slot-ref o 'vec))
- (N (b-len vec)))
- (aif v (byte val)
- (begin
- (if (< n N)
- (b-set! vec n v)
- (let* ((N (* 2 N))
- (vec2 (b-make N)))
- (let lp ((i 0))
- (if (< i n)
- (begin
- (b-set! vec2 i (b-ref vec i))
- (lp (+ i 1)))))
- (b-set! vec2 n v)
- (slot-set! o 'vec vec2)))
- (slot-set! o 'n (+ n 1))
- (values))
- (raise TypeError "not a byte" val))))
-
-
-(define (b-concat b1 n1 b2 n2)
- (let* ((n (+ n1 n2))
- (b (b-make n)))
- (let lp ((i 0))
- (if (< i n1)
- (begin
- (b-set! b i (b-ref b1 i))
- (lp (+ i 1)))
- (let lp ((i i) (j 0))
- (if (< j n2)
- (begin
- (b-set! b i (b-ref b2 j))
- (lp (+ i 1) (+ j 1)))
- b))))))
-
-(define-method (+ (o1 <py-bytes>) (b2 <bytevector>))
- (let* ((b1 (slot-ref o1 'bytes))
- (n1 (b-len b1))
- (n2 (b-len b2))
- (o (make <py-bytes>))
- (b (b-concat b1 n1 b2 n2)))
- (slot-set! o 'bytes b)
- o))
-
-(define-method (+ (b2 <bytevector>) (o1 <py-bytes>))
- (let* ((b1 (slot-ref o1 'bytes))
- (n1 (b-len b1))
- (n2 (b-len b2))
- (o (make <py-bytes>))
- (b (b-concat b2 n2 b1 n1)))
- (slot-set! o 'bytes b)
- o))
-
-(define-method (+ (b1 <bytevector>) (b2 <bytevector>))
- (let* ((n1 (b-len b1))
- (n2 (b-len b2)))
- (b-concat b1 n1 b2 n2)))
-
-(define-method (+ (o1 <py-bytes>) (o2 <py-bytes>))
- (let* ((b1 (slot-ref o1 'bytes))
- (b2 (slot-ref o2 'bytes))
- (n1 (b-len b1))
- (n2 (b-len b2))
- (o (make <py-bytes>))
- (b (b-concat b1 n1 b2 n2)))
- (slot-set! o 'bytes b)
- o))
-
-(define-method (+ (o1 <py-bytearray>) (o2 <py-bytes>))
- (let* ((b1 (slot-ref o1 'vec))
- (b2 (slot-ref o2 'bytes))
- (n1 (slot-ref o1 'n))
- (n2 (b-len b2))
- (o (make <py-bytearray>))
- (b (b-concat b1 n1 b2 n2)))
- (slot-set! o 'vec b)
- (slot-set! o 'n (+ n1 n2))
- o))
-
-(define-method (+ (o1 <py-bytearray>) (b2 <bytevector>))
- (let* ((b1 (slot-ref o1 'vec))
- (n1 (slot-ref o1 'n))
- (n2 (b-len b2))
- (o (make <py-bytearray>))
- (b (b-concat b1 n1 b2 n2)))
- (slot-set! o 'vec b)
- (slot-set! o 'n (+ n1 n2))
- o))
-
-(define-method (+ (o2 <py-bytes>) (o1 <py-bytearray>))
- (let* ((b1 (slot-ref o1 'vec))
- (b2 (slot-ref o2 'bytes))
- (n1 (slot-ref o1 'n))
- (n2 (b-len b2))
- (o (make <py-bytearray>))
- (b (b-concat b2 n2 b1 n1)))
- (slot-set! o 'vec b)
- (slot-set! o 'n (+ n1 n2))
- o))
-
-(define-method (+ (b2 <bytevector>) (o1 <py-bytearray>) )
- (let* ((b1 (slot-ref o1 'vec))
- (n1 (slot-ref o1 'n))
- (n2 (b-len b2))
- (o (make <py-bytearray>))
- (b (b-concat b2 n2 b1 n1)))
- (slot-set! o 'vec b)
- (slot-set! o 'n (+ n1 n2))
- o))
-
-(define-method (+ (o1 <py-bytearray>) (o2 <py-bytearray>))
- (let* ((b1 (slot-ref o1 'vec))
- (b2 (slot-ref o2 'vec))
- (n1 (slot-ref o1 'n))
- (n2 (slot-ref o2 'n))
- (o (make <py-bytearray>))
- (b (b-concat b1 n1 b2 n2)))
- (slot-set! o 'vec b)
- (slot-set! o 'n (+ n1 n2))
- o))
-
-(define (b-rep b n m)
- (let* ((N (* n m))
- (r (b-make N)))
- (let lp ((i 0) (j 0))
- (if (< i m)
- (let lp2 ((j j) (k 0))
- (if (< k n)
- (begin
- (b-set! r j (b-ref b k))
- (lp2 (+ j 1) (+ k 1)))
- (lp (+ i 1) j)))
- r))))
-
-(define-method (* (o1 <py-bytearray>) m)
- (let* ((b1 (slot-ref o1 'vec))
- (n1 (slot-ref o1 'n))
- (o (make <py-bytearray>))
- (b (b-rep b1 n1 m)))
- (slot-set! o 'vec b)
- (slot-set! o 'n (* n1 m))
- o))
-
-(define-method (* (b1 <bytevector>) m)
- (let* ((n1 (b-len b1)))
- (b-rep b1 n1 m)))
-
-(define-method (* (o1 <py-bytes>) m)
- (let* ((b1 (slot-ref o1 'bytes))
- (n1 (b-len b1))
- (o (make <py-bytes>))
- (b (b-rep b1 n1 m)))
- (slot-set! o 'bytes b)
- o))
-
-(define-py* cap (py-capitalize bytes s n)
- (let* ((w (b-make n)))
- (let lp ((i 0) (first? #t))
- (if (< i n)
- (let* ((x (b-ref s i))
- (ch (chf x)))
- (define (f first?)
- (b-set! w i x)
- (lp (+ i 1) first?))
-
- (if (and first? (char-alphabetic? ch))
- (aif it (ch-find (char-upcase ch))
- (begin
- (b-set! w i it)
- (lp (+ i 1) #f))
- (f #t))
- (f #f)))
- (bytes w)))))
-
-(define-py* center (py-center bytes o n w . l)
- (let* ((ws (if (pair? l)
- (ch-find (b-ref (car l) 0))
- (ch-find #\space)))
- (w (if (< w n) n w))
- (d (- w n))
- (e (floor-quotient (- w n) 2))
- (s (b-make w (ch-find #\space))))
- (let lp ((i 0) (j e))
- (if (< i n)
- (begin
- (b-set! s j (b-ref o i))
- (lp (+ i 1) (+ j 1)))))
- (bytes s)))
-
-(define-python-class UnicodeDecodeError (Exception))
-
-(define-py** decode (py-decode bytes o n . l)
- (apply
- (lam ((= encoding "UTF-8") (= errors "strict"))
- (set! errors (py-lower (scm-str errors)))
- (set! errors (cond
- ((equal? errors "strict")
- 'error)
- ((equal? errors "escape")
- 'escape)
- ((equal? errors "replace")
- 'substitute)
- ((equal? errors "ignore")
- (warn
- (string-append
- "not possible to use ignore "
- "encodong error strategy "
- "using replace in stead"))
- 'substitute)
- (else
- (warn
- "not a correct encodong error strategy")
- 'error)))
- (set! encoding (py-upper (scm-str encoding)))
-
- (let lp ((i 0) (r '()))
- (if (< i n)
- (lp (+ i 1) (cons (b-ref o i) r))
- (catch #t
- (lambda ()
- (bytevector->string
- (list->b (reverse r))
- encoding
- errors))
- (lambda x
- (raise (UnicodeDecodeError
- (+
- "failed to decode "
- encoding))))))))
- l))
-
-;;;py-encode
-
-(define-py* endswith (py-endswith bytes o n suff . l)
- (let* ((suff (slot-ref (bytes suff) 'bytes))
- (ns (b-len suff))
- (f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (let lp ((i (- n ns)) (j 0))
- (if (< i start)
- (lp (+ i 1) (+ j 1))
- (if (>= i end)
- #t
- (and
- (eq? (b-ref o i) (b-ref suff j))
- (lp (+ i 1) (+ j 1))))))))))
-
-(define-py* startswith (py-startswith bytes o n pre . l)
- (let* ((pre (slot-ref (bytes pre) 'bytes))
- (pre (b-get pre))
- (ns (len pre))
- (f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (let lp ((i 0))
- (cond
- ((or (>= i end)
- (>= i ns))
- #t)
- ((< i start)
- (lp (+ i 1)))
- (else
- (and
- (eq? (b-ref o i) (b-ref pre i))
- (lp (+ i 1))))))))))
-
-
-(define-py* expand (py-expandtabs bytes s n . l)
- (let* ((tabsize (match l (() 8) ((x) x)))
- (ct (ch-find #\tab))
- (cs (ch-find #\space))
- (n (b-len s)))
- (let lp ((i 0) (r '()))
- (if (< i n)
- (let ((x (b-ref s i)))
- (if (eq? x ct)
- (let lp2 ((j 0) (r r))
- (if (< j tabsize)
- (lp2 (+ j 1) (cons cs r))
- (lp (+ i 1) r)))
- (lp (+ i 1) (cons x r))))
- (bytes (reverse r))))))
-
-(define (b-contains s sub nsub start end)
- (define (match i)
- (let lp ((i i) (j 0))
- (if (and (< j nsub) (< i end))
- (if (eq? (b-ref s i) (b-ref sub j))
- (lp (+ i 1) (+ j 1))
- #f)
- #t)))
-
- (let lp ((i (max start 0)))
- (if (< i end)
- (if (match i)
- i
- (lp (+ i 1)))
- #f)))
-
-(define-py* find (py-find bytes s n sub . l)
- (let* ((f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (let ((sub (b-get sub)))
- (aif it (b-contains s sub (len sub) start end)
- it
- -1))))))
-
-(define (b-reverse s n)
- (if (is-a? s (<py-bytes>))
- (b-reverse (slot-ref s 'bytes) n)
- (let* ((r (b-make n)))
- (let lp ((i 0) (j (- n 1)))
- (if (< i n)
- (begin
- (b-set! r j (b-ref s i))
- (lp (+ i 1) (- j 1)))
- r)))))
-
-
-(define-py* rfind (py-rfind bytes s n sub . l)
- (let* ((sub (slot-ref (bytes sub) 'bytes))
- (s (b-reverse s n))
- (nsub (len sub))
- (sub (b-reverse (b-get sub) nsub))
- (f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (aif it (b-contains s sub nsub start end)
- (- n it nsub)
- -1)))))
-
-#|
-(define i (f-list #:i (mk-token (f+ (f-reg! "[0-9]")))))
-(define s (f-list #:s (mk-token (f+ (f-not! (f-tag "}"))))))
-(define e (f-list #:e (f-and (f-tag "}") f-true)))
-(define tagbody (f-or! e i s))
-
-(define tag (f-seq "{" tagbody "}"))
-(define nontag (f-list #:bytes (mk-token (f+ (f-or! (f-tag "{{")
- (f-not! tag))))))
-(define e (ff* (f-or! tag nontag)))
-
-(define (compile x args kwargs)
- (let lp ((l x) (r '()) (u '()) (i 0))
- (match l
- (((#:bytes x) . l)
- (lp l (cons x r) u i))
- (((#:i x) . l)
- (lp l (cons "~a" r) (cons (list-ref args (string->number x)) u) i))
- (((#:s x) . l)
- (lp l (cons "~a" r) (cons (hash-ref kwargs x None) u) i))
- (((#:e) . l)
- (lp l (cons "~a" r) (cons (list-ref args i) u) (+ i 1)))
- (()
- (apply format #f (string-join (reverse r) "") (reverse u))))))
-
-(define-py (py-format format s . l)
- (call-with-values
- (lambda ()
- (let lp ((l l) (args '()) (kwargs (make-hash-table)))
- (match l
- (((? keyword? key) x . l)
- (hash-set! kwargs (symbol->string (keyword->symbol key)) x)
- (lp l args kwargs))
- ((x . l)
- (lp l (cons x args) kwargs))
- (()
- (values (reverse args) kwargs)))))
- (lambda (args kwargs)
- (compile (parse s e) args kwargs))))
-|#
-
-(define-syntax-rule (mk-is py-isalnum x ...)
- (define-py* isalnum (py-isalnum bytes s n)
- (let lp ((i 0))
- (if (< i n)
- (let ((ch (chf (b-ref s i))))
- (if (or (x ch) ...)
- (lp (+ i 1))
- #f))
- #t))))
-
-(mk-is py-isalnum char-alphabetic? char-numeric?)
-(mk-is py-isalpha char-alphabetic?)
-(mk-is py-isdigit char-numeric?)
-(mk-is py-islower char-lower-case?)
-(mk-is py-isspace char-whitespace?)
-(mk-is py-isupper char-upper-case?)
-
-
-(define-py* istitle (py-istitle bytes s n)
- (if ((> n 0))
- (let lp ((i 0) (space? #t))
- (if (< i n)
- (let ((ch (chf (b-ref s i))))
- (if space?
- (cond
- ((char-whitespace? ch)
- (lp (+ i 1) #t))
- ((char-upper-case? ch)
- (lp (+ i 1) #f))
- (else
- #f))
- (cond
- ((char-whitespace? ch)
- (lp (+ i 1) #t))
- ((char-upper-case? ch)
- #f)
- ((char-lower-case? ch)
- (lp (+ i 1) #f))
- (else
- #f))))
- #t))
- #f))
-
-(define (b-join bytes l s ns)
- (let* ((n (let lp ((l l) (n 0))
- (if (pair? l)
- (let ((x (car l))
- (l (cdr l)))
- (lp l (+ n (len x) (if (pair? l) ns 0))))
- n)))
- (r (b-make n)))
- (let lp ((l l) (i 0))
- (if (pair? l)
- (let* ((x (car l))
- (n (len x))
- (x (b-get x))
- (l (cdr l)))
- (let lp2 ((j 0) (i i))
- (if (< j n)
- (begin
- (b-set! r i (b-ref x j))
- (lp2 (+ j 1) (+ i 1)))
- (if (pair? l)
- (let lp3 ((j 0) (i i))
- (if (< j ns)
- (begin
- (b-set! r i (b-ref s j))
- (lp3 (+ j 1) (+ i 1)))
- (lp l i)))
- (lp l i)))))
- (bytes r)))))
-
-(define-py* join (py-join bytes s n iterator)
- (b-join bytes (to-list iterator) s n))
-
-(define-py* ljust (py-ljust bytes s n width . l)
- (let* ((ch (match l
- ((x)
- (b-char x))
- (()
- (b-char #\space)))))
- (if (< width n)
- (pylist-slice s 0 width 1)
- (let ((ret (b-make width ch)))
- (let lp ((i 0))
- (if (< i n)
- (begin
- (b-set! ret i (b-ref s i))
- (lp (+ i 1)))
- (bytes ret)))))))
-
-(define-py* rjust (py-rjust bytes s n width . l)
- (let* ((ch (match l
- ((x)
- (b-char x))
- (()
- (b-char #\space)))))
- (if (< width n)
- (pylist-slice s (- width) (len s) 1)
- (let ((ret (b-make width ch)))
- (let lp ((i 0) (j (- width n)))
- (if (< i n)
- (begin
- (b-set! ret j (b-ref s i))
- (lp (+ i 1) (+ j 1)))
- (bytes ret)))))))
-
-
-(define-py* lower (py-lower bytes s n)
- (let* ((r (b-make n)))
- (let lp ((i 0))
- (if (< i n)
- (let* ((x (b-ref s i))
- (ch (chf x)))
- (b-set! r i (if (char-upper-case? ch)
- (ch-find (char-downcase ch))
- x))
- (lp (+ i 1)))
- (bytes r)))))
-
-(define-py* upper (py-upper bytes s n)
- (let* ((r (b-make n)))
- (let lp ((i 0))
- (if (< i n)
- (let* ((x (b-ref s i))
- (ch (chf x)))
- (b-set! r i (if (char-lower-case? ch)
- (ch-find (char-upcase ch))
- x))
- (lp (+ i 1)))
- (bytes r)))))
-
-(define-py* swapcase (py-swapcase bytes s n)
- (let* ((r (b-make n)))
- (let lp ((i 0))
- (if (< i n)
- (let* ((x (b-ref s i))
- (ch (chf x)))
- (b-set! r i (cond
- ((char-lower-case? ch)
- (ch-find (char-upcase ch)))
- ((char-upper-case? ch)
- (ch-find (char-downcase ch)))
- (else
- x)))
- (lp (+ i 1)))
- (bytes r)))))
-
-(define b-trim
- (case-lambda
- ((bytes s n)
- (b-trim bytes s n (lambda (ch x) (char-whitespace? ch))))
- ((bytes s n p)
- (let lp ((i 0) (r '()) (first? #t))
- (if (< i n)
- (let ((x (b-ref s i)))
- (if first?
- (if (p (chf x) x)
- (lp (+ i 1) r #t)
- (lp (+ i 1) (cons x r) #f))
- (lp (+ i 1) (cons x r) #f)))
- (bytes (reverse r)))))))
-
-(define b-rtrim
- (case-lambda
- ((bytes s n)
- (b-rtrim bytes s n (lambda (ch x) (char-whitespace? ch))))
- ((bytes s n p)
- (let lp ((i (- n 1)) (r '()) (first? #t))
- (if (>= i 0)
- (let ((x (b-ref s i)))
- (if first?
- (if (p (chf x) x)
- (lp (- i 1) r #t)
- (lp (- i 1) (cons x r) #f))
- (lp (- i 1) (cons x r) #f)))
- (bytes r))))))
-
-(define-py* lstrip (py-lstrip bytes s n . l)
- (match l
- (()
- (b-trim bytes s n))
- ((x)
- (let ((l (map b-char (to-list x))))
- (b-trim bytes s n (lambda (ch x) (member x l)))))))
-
-(define-py* restrip (py-rstrip bytes s n . l)
- (match l
- (()
- (b-rtrim bytes s n))
- ((x)
- (let ((l (map b-char (to-list x))))
- (b-rtrim bytes s n (lambda (ch x) (member x l)))))))
-
-
-(define-py* partition (py-partition bytes s n sep)
- (let* ((sep (b-get sep))
- (m (b-len sep)))
- (define (test i)
- (let lp ((i i) (j 0))
- (if (< i n)
- (if (< j m)
- (if (eq? (b-ref s i) (b-ref sep j))
- (lp (+ i 1) (+ j 1))
- #f)
- #t)
- #f)))
- (let lp ((i 0))
- (if (< i n)
- (if (test i)
- (list (pylist-slice s 0 i) sep (pylist-slice s (+ i m) n))
- (lp (+ i 1)))
- (list s "" "")))))
-
-(define-py* rpartition (py-rpartition bytes ss n ssep)
- (let* ((s (b-reverse ss n))
- (m (len ssep))
- (sep (b-reverse (b-get ssep) m)))
- (define (test i)
- (let lp ((i i) (j 0))
- (if (< i n)
- (if (< j m)
- (if (eq? (b-ref s i) (b-ref sep j))
- (lp (+ i 1) (+ j 1))
- #f)
- #t)
- #f)))
- (let lp ((i 0))
- (if (< i n)
- (if (test i)
- (list (bytes
- (b-reverse
- (pylist-slice s (+ i m) n)
- (- n (+ i m))))
- (bytes sep)
- (bytes
- (b-reverse
- (pylist-slice s 0 i)
- i)))
- (lp (+ i 1)))
- (list (bytes "") (bytes "") s)))))
-
-(define-py* replace (py-replace bytes s n old new . l)
- (let ((n (match l (() #f) ((n . _) n))))
- (b-join
- bytes
- (reverse
- (let lp ((s s) (r '()))
- (let ((l (py-partition s old)))
- (if (equal? (cadr l) "")
- (cons s r)
- (lp (list-ref l 2) (cons (car l) r))))))
- n
- new)))
-
-(define-py (py-stripip s . l)
- (apply py-rstrip (apply py-lstrip s l) l))
-
-(define-py! (py-stripip s . l)
- (apply py-rstrip (apply py-lstrip s l) l))
-
-(define-py* index (pylist-index bytes o n val . l)
- (let* ((vec o)
- (f (lambda (m) (if (< m 0) (+ m n) m))))
- (call-with-values
- (lambda ()
- (match l
- (()
- (values 0 n))
- ((x)
- (values (f x) n))
- ((x y)
- (values (f x) (f y)))))
- (lambda (n1 n2)
- (if (and (>= n1 0) (>= n2 0) (< n1 n) (<= n2 n))
- (let lp ((i n1))
- (if (< i n2)
- (let ((r (b-ref vec i)))
- (if (equal? r val)
- i
- (lp (+ i 1))))
- (raise ValueError "could not find value in index fkn")))
- (raise IndexError "index out of scop in index fkn"))))))
-
-(define-py* rindex (py-rindex býtes s n . l)
- (let ((n (b-len s)))
- (- n (apply pylist-index (b-reverse s n) l) 1)))
-
-#;
-(define-py (py-title title s)
- (string-titlecase s))
-
-(define-py* split (py-split bytes o n tag)
- (let ((tag (b->list tag)))
- (let lp ((i 0) (r '()))
- (if (< i n)
- (if (eq? (car tag) (b-ref o i))
- (let lp2 ((j i) (tag tag))
- (if (null? tag)
- (cons (bytes (list->b (reverse r)))
- (lp (+ i 1) '()))
- (if (< j n)
- (if (eq? (car tag) (b-ref o j))
- (lp2 (+ j 1) (cdr tag))
- (lp (+ i 1) (cons (b-ref o i) r)))
- (lp (+ i 1) (cons (b-ref o i) r)))))
- (lp (+ i 1) (cons (b-ref o i) r)))
- '()))))
-#;
-(define-py (py-rsplit s . l)
- (reverse
- (map string-reverse
- (apply py-split
- (string-reverse s)
- (match l
- (() '())
- ((sep . l) (cons (string-reverse sep) l)))))))
-
-
-(define-py* splitlines (py-splitlines bytes s n . l)
- (let ((keep? (match l
- ((#:keepends v)
- v)
- ((v)
- v)
- (_ #f))))
- (let lp ((i 0) (r '()) (old 0))
- (if (< i n)
- (let* ((x (b-ref s i))
- (ch (chf x)))
- (if (eq? ch #\newline)
- (if keep?
- (lp (+ i 1)
- (cons
- (pylist-slice s old (+ i 1) 1)
- r)
- (+ i 1))
- (lp (+ i 1)
- (cons
- (pylist-slice s old i 1)
- r)
- (+ i 1)))
- (lp (+ i 1) r old)))
- (reverse r)))))
-
-(define (make_trans b1 b2)
- (let* ((b1 (bv-scm b1))
- (b2 (bv-scm b2))
- (n1 (len b1))
- (n2 (len b2))
- (n (let lp ((i 0) (r 0))
- (if (< i n1)
- (lp (+ i 1) (max (bytevector-u8-ref b1 i) r))
- r))))
- (if (= n1 n2)
- (let lp ((i 0) (r '()))
- (if (< i n)
- (let lp2 ((j 0))
- (if (< j n1)
- (if (= (bytevector-u8-ref b1 j) i)
- (lp (+ i 1) (cons (bytevector-u8-ref b2 j) r))
- (lp2 (+ j 1)))
- (lp (+ i 1) (cons i r))))
- (bytes (list->u8vector (reverse r)))))
- (raise
- (ValueError
- "maketrans: wrong number in second string compared to first")))))
-
-(define-py* translate (py-translate bytes s n table . l)
- (let* ((table (b-get table))
- (w (b-make n))
- (t (if (eq? table None) #f table))
- (d (match l (() #f) ((x) (map b-char (to-list x))))))
- (define (tr ch)
- (define (e)
- (if t
- (if (< ch (b-len t))
- (b-ref t ch)
- ch)
- ch))
-
- (if d
- (if (member ch d)
- #f
- (e))
- (e)))
-
- (let lp ((i 0) (k 0))
- (if (< i n)
- (let ((ch (tr (b-ref s i))))
- (if ch
- (begin
- (b-set! w k ch)
- (lp (+ i 1) (+ k 1)))
- (lp (+ i 1) k)))
- (bytes
- (if (= k n)
- w
- (pylist-slice w 0 k 1)))))))
-
-(define-syntax-rule (a b x y) (b (symbol->string x) (symbol->string y)))
-
-(define (cmp op s1 n1 s2 n2)
- (let ((n (min n1 n2)))
- (let lp ((i 0))
- (if (< i n)
- (let ((x1 (b-ref s1 i))
- (x2 (b-ref s2 i)))
- (if (= x1 x2)
- (lp (+ i 1))
- (op x1 x2)))
- (op n1 n2)))))
-
-
-(define-syntax-rule (mkop op)
- (begin
- (define-method (op (b1 <bytevector>) (s2 <py-bytes>))
- (let ((b2 (slot-ref s2 'bytes)))
- (cmp op b1 (b-len b1) b2 (b-len b2))))
- (define-method (op (s1 <py-bytes>) (b2 <bytevector>) )
- (let ((b1 (slot-ref s1 'bytes)))
- (cmp op b1 (b-len b1) b2 (b-len b2))))
- (define-method (op (b1 <bytevector>) (b2 <bytevector>) )
- (cmp op b1 (b-len b1) b2 (b-len b2)))
- (define-method (op (s1 <py-bytes>) (s2 <py-bytes>) )
- (let ((b1 (slot-ref s1 'bytes))
- (b2 (slot-ref s2 'bytes)))
- (cmp op b1 (b-len b1) b2 (b-len b2))))
- (define-method (op (a1 <py-bytearray>) (b2 <bytevector>))
- (let ((b1 (slot-ref a1 'vec))
- (n1 (slot-ref a1 'n)))
- (cmp op b1 n1 b2 (b-len b2))))
- (define-method (op (b1 <bytevector>) (a2 <py-bytearray>))
- (let ((b2 (slot-ref a2 'vec))
- (n2 (slot-ref a2 'n)))
- (cmp op b1 (b-len b1) b2 n2)))
- (define-method (op (a1 <py-bytearray>) (s2 <py-bytes>))
- (let ((b1 (slot-ref a1 'vec))
- (n1 (slot-ref a1 'n))
- (b2 (slot-ref s2 'bytes)))
- (cmp op b1 n1 b2 (b-len b2))))
- (define-method (op (s1 <py-bytes>) (a2 <py-bytearray>))
- (let ((b2 (slot-ref a2 'vec))
- (n2 (slot-ref a2 'n))
- (b1 (slot-ref s1 'bytes)))
- (cmp op b1 (b-len b1) b2 n2)))
- (define-method (op (a1 <py-bytearray>) (a2 <py-bytearray>))
- (let ((b1 (slot-ref a1 'vec))
- (n1 (slot-ref a1 'n ))
- (b2 (slot-ref a2 'vec))
- (n2 (slot-ref a2 'n )))
- (cmp op b1 n1 b2 n2)))))
-
-(mkop <)
-(mkop <=)
-(mkop >)
-(mkop >=)
-(mkop py-equal?)
-
-(define-py* zfill (py-zfill bytes s n width)
- (let* ((w (pylist-slice s 0 n 1)))
- (let lp ((i 0))
- (if (< i n)
- (let* ((x (b-ref s i))
- (ch (chf x)))
- (if (char-numeric? ch)
- (let lp ((j (max 0 (- i width))))
- (if (< j i)
- (begin
- (b-set! w j (ch-find #\0))
- (lp (+ j 1)))
- (bytes w)))
- (lp (+ i 1))))
- s))))
-
- (define-method (py-hash (o <py-bytes>)) (hash (slot-ref o 'bytes) pyhash-N))
-
-(define-class <bytes-iter> (<py-bytes>) i d)
-(define-class <bytearray-iter> (<py-bytearray>) i d)
-
-(define-method (wrap-in (o <bytes-iter> ))
- (let ((out (make <bytes-iter>)))
- (slot-set! out 'bytes (slot-ref o 'bytes))
- (slot-set! out 'i (slot-ref o 'i))
- (slot-set! out 'd (slot-ref o 'd))
- out))
-
-(define-method (wrap-in (o <bytearray-iter> ))
- (let ((out (make <bytearray-iter>)))
- (slot-set! out 'vec (slot-ref o 'vec))
- (slot-set! out 'n (slot-ref o 'n))
- (slot-set! out 'i (slot-ref o 'i))
- (slot-set! out 'd (slot-ref o 'd))
- out))
-
-(define-method (wrap-in (s <bytevector>))
- (let ((out (make <bytes-iter>)))
- (slot-set! out 'bytes s)
- (slot-set! out 'i 0)
- (slot-set! out 'd 1)
- out))
-
-(define-method (wrap-in (s <py-bytes>))
- (let ((out (make <bytes-iter>)))
- (slot-set! out 'bytes (slot-ref s 'bytes))
- (slot-set! out 'i 0)
- (slot-set! out 'd 1)
- out))
-
-(define-method (wrap-in (s <py-bytearray>))
- (let ((out (make <bytes-iter>)))
- (slot-set! out 'vec (slot-ref s 'vec))
- (slot-set! out 'n (slot-ref s 'n))
- (slot-set! out 'i 0)
- (slot-set! out 'd 1)
- out))
-
-(define-method (py-reversed (s <py-bytes>))
- (let ((out (make <bytes-iter>)))
- (slot-set! out 'bytes (slot-ref s 'bytes))
- (slot-set! out 'i (- (b-len s) 1))
- (slot-set! out 'd -1)
- out))
-
-(define-method (py-reversed (s <py-bytearray>))
- (let ((out (make <bytearray-iter>)))
- (slot-set! out 'n (slot-ref s 'n))
- (slot-set! out 'vec (slot-ref s 'vec))
- (slot-set! out 'i (- (slot-ref s 'n) 1))
- (slot-set! out 'd -1)
- out))
-
-(define-method (next (o <bytes-iter>))
- (let ((i (slot-ref o 'i ))
- (d (slot-ref o 'd))
- (bytes (slot-ref o 'bytes)))
- (if (> d 0)
- (if (< i (b-len bytes))
- (let ((ret (b-ref bytes i)))
- (slot-set! o 'i (+ i d))
- ret)
- (throw StopIteration))
- (if (>= i 0)
- (let ((ret (b-ref bytes i)))
- (slot-set! o 'i (+ i d))
- ret)
- (throw StopIteration)))))
-
-(define-method (next (o <bytearray-iter>))
- (let ((i (slot-ref o 'i ))
- (d (slot-ref o 'd ))
- (bytes (slot-ref o 'vec))
- (n (slot-ref o 'n )))
- (if (> d 0)
- (if (< i n)
- (let ((ret (b-ref bytes i)))
- (slot-set! o 'i (+ i d))
- ret)
- (throw StopIteration))
- (if (>= i 0)
- (let ((ret (b-ref bytes i)))
- (slot-set! o 'i (+ i d))
- ret)
- (throw StopIteration)))))
-
-(define (pybytes-listing)
- (let ((l (to-pylist
- (map symbol->string
- '(__add__ __class__ __contains__ __delattr__ __doc__
- __eq__ __format__ __ge__ __getattribute__
- __getitem__ __getnewargs__ __getslice__ __gt__
- __hash__ __init__ __le__ __len__ __lt__ __mod__
- __mul__ __ne__ __new__ __reduce__ __reduce_ex__
- __repr__ __rmod__ __rmul__ __setattr__ __sizeof__
- __bytes__ __subclasshook__
- _formatter_field_name_split _formatter_parser
- capitalize center count decode endswith
- expandtabs find format index isalnum isalpha
- isdigit islower isspace istitle isupper join
- ljust lower lbytesip partition replace rfind rindex
- rjust rpartition rsplit rbytesip split splitlines
- startswith strip swapcase
- title translate upper zfill)))))
- (pylist-sort! l)
- l))
-
-(define (pybytesarray-listing)
- (let ((l (to-pylist
- (map symbol->string
- '(__add__ __alloc__ __class__ __contains__ __delattr__
- __delitem__ __dir__ __doc__ __eq__ __format__
- __ge__ __getattribute__ __getitem__ __gt__
- __hash__ __iadd__ __imul__ __init__ __iter__
- __le__ __len__ __lt__ __mod__ __mul__ __ne__
- __new__ __reduce__ __reduce_ex__ __repr__
- __rmod__ __rmul__ __setattr__ __setitem__
- __sizeof__ __str__ __subclasshook__ append
- capitalize center clear copy count decode endswith
- expandtabs extend find fromhex hex index insert
- isalnum isalpha isdigit islower isspace istitle
- isupper join ljust lower lstrip maketrans
- partition pop remove replace reverse rfind rindex
- rjust rpartition rsplit rstrip split splitlines
- startswith strip swapcase title translate upper
- zfill)))))
- (pylist-sort! l)
- l))
-
-(define (_in x y n)
- (let lp ((i 0))
- (if (< i n)
- (if (= (b-ref y i) x)
- #t
- (lp (+ i 1)))
- #f)))
-
-(define (_in2 x y n)
- (let lp ((i 0))
- (if (< i n)
- (let lp2 ((j i) (r x))
- (if (null? r)
- #t
- (if (< j n)
- (if (= (b-ref y j) (car r))
- (lp2 (+ j 1) (cdr r))
- (lp (+ i 1)))
- #f)))
- #f)))
-
-(define-method (in (x <integer>) (b <bytevector>))
- (_in x b (len b)))
-(define-method (in (x <integer>) (b <py-bytes>))
- (_in x (slot-ref b 'bytes) (len b)))
-(define-method (in (x <integer>) (b <py-bytearray>))
- (_in x (slot-ref b 'vec) (len b)))
-
-(define-method (in (x <pair>) (b <bytevector>))
- (_in2 x b (len b)))
-(define-method (in (x <pair>) (b <py-bytes>))
- (_in2 x (slot-ref b 'bytes) (len b)))
-(define-method (in (x <pair>) (b <py-bytearray>))
- (_in2 x (slot-ref b 'vec) (len b)))
-
-(define-method (in (x <bytevector>) b)
- (in (b->list x) b))
-(define-method (in (x <py-bytes>) b)
- (in (b->list x) b))
-(define-method (in (x <py-bytearray>) b)
- (in (b->list x) b))
-
-
-(set! (@@ (language python string) bytes) bytes)
-(set! (@@ (language python string) b?)
- (lambda (x)
- (or (is-a? x <bytevector>)
- (is-a? x <py-bytes>)
- (is-a? x <py-bytearray>))))
-(set! (@@ (language python string) b-decode) py-decode)
-
-(define b-enc #f)
diff --git a/modules/language/python/checksum.scm b/modules/language/python/checksum.scm
deleted file mode 100644
index dc0ce80..0000000
--- a/modules/language/python/checksum.scm
+++ /dev/null
@@ -1,124 +0,0 @@
-(define-module (language python checksum)
- #:use-module (oop pf-objects)
- #:use-module (language python bytes)
- #:use-module (language python for)
- #:use-module (language python list)
- #:use-module (language python exceptions)
- #:use-module (ice-9 binary-ports)
- #:use-module (rnrs bytevectors)
- #:use-module (ice-9 popen)
- #:export (Summer run))
-
-(define mapper (make-hash-table))
-
-(let lp ((i 0))
- (if (< i 256)
- (let ((a (logand #xf i))
- (b (ash (logand #xf0 i) -16)))
-
- (define (m i)
- (car (string->list (number->string i 16))))
-
- (hash-set! mapper i (cons (m a) (m b)))
- (lp (+ i 1)))))
-
-(define (run data command)
- (define n1 (char->integer #\0))
- (define n2 (char->integer #\9))
- (define p1 (char->integer #\a))
- (define p2 (char->integer #\f))
-
- (let ((i.o (pipe)))
- (with-output-to-port (cdr i.o)
- (lambda ()
- (let ((port (open-pipe command OPEN_WRITE)))
- (for ((b : data)) ()
- (put-u8 port b))
- (close-pipe port))))
- (close-port (cdr i.o))
- (let* ((ret (get-bytevector-all (car i.o)))
- (n (len ret)))
- (let lp ((i 0))
- (define (hex? i)
- (and (< i n)
- (let ((i (bytevector-u8-ref ret i)))
- (or
- (and (>= i n1) (<= i n2))
- (and (>= i p1) (<= i p2))))))
-
- (define (hex i)
- (let ((i (bytevector-u8-ref ret i)))
- (if (and (>= i n1) (<= i n2))
- (+ (- i n1) 0)
- (+ (- i p1) 10))))
-
- (define (final l)
- (let ((ret (make-bytevector (len l))))
- (let lp ((l l) (i (- (len l) 1)))
- (if (>= i 0)
- (begin
- (bytevector-u8-set! ret i (car l))
- (lp (cdr l) (- i 1)))
- (bytes ret)))))
-
- (if (hex? i)
- (let lp ((i i) (l '()))
- (if (hex? i)
- (if (hex? (+ i 1))
- (lp (+ i 2) (cons (+ (hex i) (ash (hex (+ i 1)) 4))
- l))
- (final (cons (hex i) l)))
- (final l)))
- (error "no hex output checksum code"))))))
-
-
-
-(define-python-class Summer ()
- (define __init__
- (lambda (self)
- (set self '_data None)))
-
- (define update
- (lambda (self data)
- (let ((old (ref self '_data)))
- (if (eq? old None)
- (set self '_data data)
- (set self '_data (+ old data))))
- (set self '_digest None)
- (values)))
-
- (define digest
- (lambda (self)
- (let ((data (ref self '_data)))
- (if (eq? data None)
- (raise (ValueError "no data to digest"))
- (let ((old (ref self '_digest)))
- (if (eq? old None)
- (set! old (run data (ref self '_command))))
- (set self '_digest old)
- old)))))
-
-
- (define hexdigest
- (lambda (self)
- (let* ((x (digest self))
- (o (make-string (* 2 (len x)))))
- (for ((b : (bv-scm x))) ((i 0))
- (let ((a.b (hash-ref mapper b)))
- (string-set! o i (car a.b))
- (string-set! o (+ i 1) (cdr a.b))
- (+ i 2))
- #:final
- o))))
-
- (define copy
- (lambda (self)
- (let ((o ((ref self '__class__))))
- (set o '_data (ref self '_data))
- (set o '_digest (ref self '_digest))
- o))))
-
-
-
-
-
diff --git a/modules/language/python/class.scm b/modules/language/python/class.scm
deleted file mode 100644
index 41ed09a..0000000
--- a/modules/language/python/class.scm
+++ /dev/null
@@ -1,71 +0,0 @@
-(define-module (language python class)
- #:export (class_+ class_- class_* class_// class_%
- class_power class_<< class_>> class_ior
- class_xor class_band))
-
-(define-syntax-rule (class-ref x) (struct-ref x 0))
-(define-syntax-rule (class-num x) (struct-ref x 1))
-(define-syntax-rule (class-log x) (struct-ref x 2))
-(define-syntax-rule (class-map x) (struct-ref x 3))
-
-(define-syntax-rule (mkref +-ref n)
- (define-syntax-rule (+-ref x) (vector-ref x n)))
-
-(mkref +-ref 0)
-(mkref --ref 1)
-(mkref *-ref 2)
-(mkref /-ref 3)
-(mkref //-ref 4)
-(mkref %-ref 5)
-(mkref **-ref 6)
-(mkref <<-ref 7)
-(mkref >>-ref 8)
-
-(mkref ior-ref 0)
-(mkref xor-ref 1)
-(mkref and-ref 2)
-
-(define-syntax-rule (class-lookup class key )
- (hashq-ref (class-map class) key #f))
-
-(define-syntax-rule (meta-mk mk-num class-num)
-(define-syntax-rule (mk-num class_+ __add__ __radd__ +-ref err)
- (define (class_+ x y)
- (let* ((cl (class-ref x))
- (r (class-num cl)))
- (define (f)
- (let ((rrr (class-lookup cl '__add__)))
- (if rrr
- (rrr x y)
- (if (class? y)
- (let* ((cl (class-ref y))
- (rrrr (class-lookup cl '__radd__)))
- (if rrrr
- (rrrr y x)
- (err)))
- (err)))))
-
- (if r
- (let ((rr (+-ref r)))
- (if rr
- (rr x y)
- (f)))
- (f))))))
-
-(meta-mk mk-num class-num)
-(meta-mk mk-log class-log)
-
-(define (err) (error "could not do artithmetic ops"))
-
-(mk-num class_+ __add__ __radd__ +-ref err)
-(mk-num class_- __sub__ __rsub__ --ref err)
-(mk-num class_* __mul__ __rmul__ *-ref err)
-(mk-num class_/ __div__ __rdiv__ /-ref err)
-(mk-num class_// __floordiv__ __rfloordiv__ //-ref err)
-(mk-num class_% __divmod__ __rdivmod__ %-ref err)
-(mk-num class_power __pow__ __rpow__ **-ref err)
-(mk-num class_<< __lshift__ __rlshift__ <<-ref err)
-(mk-num class_>> __rshift__ __rrshift__ >>-ref err)
-(mk-log class_ior __or__ __ror__ ior-ref err)
-(mk-log class_xor __xor__ __rxor__ xor-ref err)
-(mk-log class_band __and__ __rand__ and-ref err)
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm
deleted file mode 100644
index 821389c..0000000
--- a/modules/language/python/compile.scm
+++ /dev/null
@@ -1,3078 +0,0 @@
-(define-module (language python compile)
- #:use-module (ice-9 match)
- #:use-module (ice-9 control)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (rnrs bytevectors)
- #:use-module (language python dict)
- #:use-module (language python exceptions)
- #:use-module (language python yield)
- #:use-module (language python for)
- #:use-module (language python try)
- #:use-module (language python list)
- #:use-module (language python string)
- #:use-module (language python bytes)
- #:use-module (language python number)
- #:use-module (language python def)
- #:use-module (language python module)
- #:use-module (language python dir)
- #:use-module (language python procedure)
- #:use-module (language python bool)
- #:use-module ((language python format2) #:select (fnm))
- #:use-module ((language python with) #:select ())
- #:use-module (ice-9 pretty-print)
- #:export (comp exit-fluid exit-prompt pks))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-inlinable (C x) `(@@ (language python compile) ,x))
-(define-inlinable (F2 x) `(@@ (language python format2) ,x))
-(define-inlinable (N x) `(@@ (language python number) ,x))
-(define-inlinable (Y x) `(@@ (language python yield) ,x))
-(define-inlinable (T x) `(@@ (language python try) ,x))
-(define-inlinable (F x) `(@@ (language python for) ,x))
-(define-inlinable (E x) `(@@ (language python exceptions) ,x))
-(define-inlinable (L x) `(@@ (language python list) ,x))
-(define-inlinable (S x) `(@@ (language python string) ,x))
-(define-inlinable (B x) `(@@ (language python bytes) ,x))
-(define-inlinable (Se x) `(@@ (language python set) ,x))
-(define-inlinable (D x) `(@@ (language python def) ,x))
-(define-inlinable (Di x) `(@@ (language python dict) ,x))
-(define-inlinable (O x) `(@@ (oop pf-objects) ,x))
-(define-inlinable (G x) `(@ (guile) ,x))
-(define-inlinable (H x) `(@ (language python hash) ,x))
-(define-inlinable (W x) `(@ (language python with) ,x))
-
-(define exit-prompt (make-prompt-tag))
-(define exit-fluid (make-fluid #f))
-
-(define (formatter . x) "<missing>")
-
-(define (mk-string vs l)
- (define (mk-string2 x)
- (if (string? x)
- x
- (let ((l (let lp ((l x))
- (match l
- ((x . l)
- (cons
- (if (string? x)
- x
- (match x
- ((#:field tag a b)
- `(,(C 'formatter) ,(exp vs tag) ,a ,b))))
- (lp l)))
- (() '())))))
- (match l
- ((x) x)
- ((x . l) (cons* '+ x l))))))
-
- (let ((r
- (let lp ((l l))
- (match l
- ((x . l)
- (let ((x (mk-string2 x))
- (l (lp l)))
- (if (and (string? x) (= (length l) 1) (string? (car l)))
- (list (+ x (car l)))
- (cons x l))))
- (() (list ""))))))
- (if (string? r)
- r
- (cons '+ r))))
-
-
-
-(define-syntax-rule (with-exit code ...)
- (with-fluids ((exit-fluid #t))
- (call-with-prompt exit-prompt
- (lambda () code ...)
- (lambda (k val)
- (if (not (equal? val 0))
- (format #t "exit with error ~a~%" val))))))
-
-(define (get-exported-symbols x)
- (aif it (resolve-module x)
- (aif it (module-public-interface it)
- (let ((l '()))
- (module-for-each
- (lambda (k b)
- (set! l (cons k l)))
- it)
- l)
- '())
- '()))
-
-(define cvalues (G 'values))
-
-(define-syntax-rule (wth code)
- (let ((old s/d))
- (set! s/d (C 'qset!))
- (let ((r code))
- (set! s/d old)
- r)))
-
-
-(define-syntax use-modules--
- (lambda (x)
- (define (keyword-like? stx)
- (let ((dat (syntax->datum stx)))
- (and (symbol? dat)
- (eqv? (string-ref (symbol->string dat) 0) #\:))))
- (define (->keyword sym)
- (symbol->keyword (string->symbol (substring (symbol->string sym) 1))))
-
- (define (quotify-iface args)
- (let loop ((in args) (out '()))
- (syntax-case in ()
- (() (reverse! out))
- ;; The user wanted #:foo, but wrote :foo. Fix it.
- ((sym . in) (keyword-like? #'sym)
- (loop #`(#,(->keyword (syntax->datum #'sym)) . in) out))
- ((kw . in) (not (keyword? (syntax->datum #'kw)))
- (syntax-violation 'define-module "expected keyword arg" x #'kw))
- ((#:renamer renamer . in)
- (loop #'in (cons* #'renamer #:renamer out)))
- ((kw val . in)
- (loop #'in (cons* #''val #'kw out))))))
-
- (define (quotify specs)
- (let lp ((in specs) (out '()))
- (syntax-case in ()
- (() (reverse out))
- (((name name* ...) . in)
- (and-map symbol? (syntax->datum #'(name name* ...)))
- (lp #'in (cons #''((name name* ...)) out)))
- ((((name name* ...) arg ...) . in)
- (and-map symbol? (syntax->datum #'(name name* ...)))
- (with-syntax (((quoted-arg ...) (quotify-iface #'(arg ...))))
- (lp #'in (cons #`(list '(name name* ...) quoted-arg ...)
- out)))))))
-
- (syntax-case x ()
- ((_ spec ...)
- (with-syntax (((quoted-args ...) (quotify #'(spec ...))))
- #'(eval-when (expand)
- (process-use-modules (list quoted-args ...))
- *unspecified*))))))
-
-(define-syntax use-modules-
- (lambda (x)
- (define (keyword-like? stx)
- (let ((dat (syntax->datum stx)))
- (and (symbol? dat)
- (eqv? (string-ref (symbol->string dat) 0) #\:))))
- (define (->keyword sym)
- (symbol->keyword (string->symbol (substring (symbol->string sym) 1))))
-
- (define (quotify-iface args)
- (let loop ((in args) (out '()))
- (syntax-case in ()
- (() (reverse! out))
- ;; The user wanted #:foo, but wrote :foo. Fix it.
- ((sym . in) (keyword-like? #'sym)
- (loop #`(#,(->keyword (syntax->datum #'sym)) . in) out))
- ((kw . in) (not (keyword? (syntax->datum #'kw)))
- (syntax-violation 'define-module "expected keyword arg" x #'kw))
- ((#:renamer renamer . in)
- (loop #'in (cons* #'renamer #:renamer out)))
- ((kw val . in)
- (loop #'in (cons* #''val #'kw out))))))
-
- (define (quotify specs)
- (let lp ((in specs) (out '()))
- (syntax-case in ()
- (() (reverse out))
- (((name name* ...) . in)
- (and-map symbol? (syntax->datum #'(name name* ...)))
- (lp #'in (cons #''((name name* ...)) out)))
- ((((name name* ...) arg ...) . in)
- (and-map symbol? (syntax->datum #'(name name* ...)))
- (with-syntax (((quoted-arg ...) (quotify-iface #'(arg ...))))
- (lp #'in (cons #`(list '(name name* ...) quoted-arg ...)
- out)))))))
-
- (syntax-case x ()
- ((_ spec ...)
- (with-syntax (((quoted-args ...) (quotify #'(spec ...))))
- #'(eval-when (eval load)
- (process-use-modules (list quoted-args ...))
- *unspecified*))))))
-
-(define-syntax-rule (use p l a ...)
- (begin
- (eval-when (expand)
- (catch #t
- (lambda ()
- (if (not p) (reload-module (resolve-module 'l)))
- (use-modules-- a ...))
- (lambda x
- #f)))
- (eval-when (eval load)
- (catch #t
- (lambda ()
- (if (not p) (reload-module (resolve-module 'l)))
- (use-modules- a ...))
- (lambda x
- (raise (ImportError ((@ (guile) format)
- #f "failed to import ~a ~a" 'l x))))))))
-
-(define level (make-fluid 0))
-
-(define (flat x)
- (let lp ((x (list x)))
- (if (pair? x)
- (let ((e (car x)))
- (if (pair? e)
- (let ((ee (car e)))
- (if (equal? ee '(@ (guile) cons))
- (append (lp (list (cadr e)))
- (lp (list (caddr e)))
- (lp (cdr x)))
- (lp (cdr x))))
- (if (symbol? e)
- (cons e (lp (cdr x)))
- '())))
- '())))
-
-(define s/d (C 'qset!))
-
-(define (pre) (warn "Patching guile will lead to way better experience use 'python.patch' on guile-2.2 e.g. (use-modules (language python guilemod))"))
-
-(define (gw-persson x l)
- (if (or (member x (fluid-ref (@@ (system base message) %dont-warn-list)))
- (member x l))
- x
- #f))
-
-(define-syntax clear-warning-data
- (lambda (x)
- (catch #t
- (lambda ()
- (fluid-set! (@@ (system base message) %dont-warn-list) '()))
- (lambda x (pre)))
- #f))
-
-(define-syntax-rule (with-warn code ...)
- (with-fluids (((@@ (system base message) %dont-warn-list) '()))
- code ...))
-
-(define-syntax-rule (with-warn-data x code ...)
- (with-fluids (((@@ (system base message) %dont-warn-list) x))
- code ...))
-
-(define (get-warns)
- (list (G 'quote) (fluid-ref (@@ (system base message) %dont-warn-list))))
-
-(define (dont-warn v)
- (catch #t
- (lambda ()
- (fluid-set! (@@ (system base message) %dont-warn-list)
- (cons v
- (fluid-ref (@@ (system base message) %dont-warn-list)))))
- (lambda x (values))))
-
-(define-syntax call
- (syntax-rules ()
- ((_ (f) . l) (f . l))))
-
-(define (fold f init l)
- (if (pair? l)
- (fold f (f (car l) init) (cdr l))
- init))
-
-(define do-pr #t)
-
-(define (pr . x)
- (if do-pr
- (let ()
- (define port (open-file "/home/stis/src/python-on-guile/log.txt" "a"))
- (with-output-to-port port
- (lambda ()
- (pretty-print (syntax->datum x))))
- (close port)))
- (car (reverse x)))
-
-(define (pf x)
- (define port (open-file "/home/stis/src/python-on-guile/compile.log" "a"))
- (with-output-to-port port
- (lambda () (pretty-print (syntax->datum x)) x))
- (close port)
- x)
-
-(define (pp x)
- (pretty-print (syntax->datum x))
- x)
-
-(define (gv x)
- (if (equal? x '_)
- (gensym "_")
- x))
-
-(define (is-special? vs x)
- (if (or-map (lambda (x) (match x ((#:starexpr . _) #t) (_ #f))) x)
- (let lp ((l (map (g vs exp) x)))
- (if (pair? l)
- `((@ (guile) cons) ,(car l) ,(lp (cdr l)))
- `((@ (guile) quote) ())))
- #f))
-
-(define (gen-sel vs e item)
- (match e
- (#f item)
- ((#:cfor for-e in-e cont)
- (let lp ((for-e for-e))
- (match for-e
- (((#:sub l))
- `(,(F 'for) ((,@(map (lambda (x) (gv ((g vs exp) x))) l)
- : ,(exp vs in-e))) ()
- ,(gen-sel vs cont item)))
- (_
- `(,(F 'for) ((,@(map (lambda (x) (gv ((g vs exp) x))) for-e)
- : ,(exp vs in-e))) ()
- ,(gen-sel vs cont item))))))
- ((#:cif cif cont)
- `(,(G 'if) ,(exp vs cif)
- ,(gen-sel vs cont item)))))
-
-(define (union as vs)
- (let lp ((as as) (vs vs))
- (match as
- ((x . as)
- (if (member x vs)
- (lp as vs)
- (lp as (cons x vs))))
- (()
- vs))))
-
-(define (diff as vs)
- (let lp ((as as) (rs '()))
- (match as
- ((x . as)
- (if (member x vs)
- (lp as rs)
- (lp as (cons x rs))))
- (()
- rs))))
-
-(define (get-globals code)
- (let lp ((vs (glob code '())) (rs (scope code '())))
- (match vs
- ((x . l)
- (if (member x rs)
- (lp l rs)
- (lp l (cons x rs))))
- (()
- rs))))
-
-(define (glob x vs)
- (match x
- ((#:global . l)
- (let lp ((l l) (vs vs))
- (match l
- (((#:identifier v . _) . l)
- (let ((s (string->symbol v)))
- (if (member s vs)
- (lp l vs)
- (lp l (cons s vs)))))
- (()
- vs))))
- ((x . y)
- (glob y (glob x vs)))
- (x vs)))
-
-(define (scope x vs)
- (match x
- ((#:def f . _)
- (union (list (exp '() f)) vs))
-
- ((#:lambdef . _)
- vs)
-
- ((#:comma a)
- (scope a vs))
-
- ((#:comma a . l)
- (union
- (scope a vs)
- (scope (cons #:comma l) vs)))
-
-
- ((#:with (l ...) code)
- (scope code (union vs
- (let lp ((l l))
- (match l
- (((a b) . l)
- (cons (exp '() b) (lp l)))
- ((x . l) (lp l))
- (() '()))))))
-
- ((#:classdef f . _)
- (union (list (exp '() f)) vs))
-
- ((#:global . _)
- vs)
-
- ((#:import (#:name ((_ ids ...) . as) ...) ...)
- (let lp ((ids ids) (as as) (vs vs))
- (if (pair? ids)
- (let lp2 ((ids2 (car ids)) (as2 (car as)) (vs vs))
- (if (pair? as2)
- (lp2 (cdr ids2) (cdr as2)
- (let ((as2 (car as2))
- (ids2 (car ids2)))
- (union vs (list (exp '() (if as2 as2 (car ids2)))))))
- (lp (cdr ids) (cdr as) vs)))
- vs)))
-
- ((#:expr-stmt l (#:assign u ... v))
- (union
- (fold (lambda (l s)
- (union
- s
- (fold (lambda (x s)
- (match x
- ((#:test (#:power v2 v1 () . _) . _)
- (if v2
- (union
- (union (flat (exp '() v1))
- (flat (exp '() v2)))
- s)
- (union (flat (exp '() v1)) s)))
-
- ((#:starexpr #:power _ v1 . _)
- (union
- (flat (exp '() v1))
- s))
-
- (_ s)))
- '()
- l)))
- '()
- (cons l u))
- vs))
-
- ((#:for es in code . final)
- (let ((vs (union
- vs
- (let lp ((es es))
- (match es
- (((#:sub . l) . u)
- (union (lp l) (lp u)))
- (((#:power #f (#:tuple . l) . _) . u)
- (union (lp l) (lp u)))
- (((and (#:power . _) x) . u)
- (union (list (exp vs x)) (lp u)))
- ((e . es)
- (union (lp e) (lp es)))
- (() '()))))))
- (scope final (scope code vs))))
-
-
- ((#:expr-stmt l (#:assign k . u))
- (union
- (union (fold (lambda (x s)
- (match x
- ((#:test (#:power v2 v1 () . _) . _)
- (if v2
- (union
- (union (flat (exp '() v1))
- (flat (exp '() v2)))
- s)
- (union (flat (exp '() v1)) s)))
- (_ s)))
- '()
- l)
- vs)
- (scope `(#:expr-stmt ,k (#:asignvs . ,u)) vs)))
-
- ((x . y)
- (scope y (scope x vs)))
- (_ vs)))
-
-(define ignore (make-fluid '()))
-
-(define (defs x vs)
- (match x
- ((#:def (#:identifier f) . _)
- (union (list (string->symbol f)) vs))
- ((#:lambdef . _)
- vs)
- ((#:class . _)
- vs)
- ((#:global . _)
- vs)
- ((#:import (#:name ((_ ids ...) . as)) ...)
- (let lp ((ids ids) (as as) (vs vs))
- (if (pair? as)
- (lp (cdr ids) (cdr as)
- (let ((as (car as))
- (ids (car ids)))
- (union vs (list (exp '() (if as as (car ids)))))))
- vs)))
-
- ((x . y)
- (defs y (defs x vs)))
- (_ vs)))
-
-(define (gen-yield f)
- (string->symbol
- (string-append
- (symbol->string f)
- ".yield")))
-
-(define (g vs e)
- (lambda (x) (e vs x)))
-
-(define return (make-fluid 'error-return))
-
-(define-syntax-rule (<< x y) (ash x y))
-(define-syntax-rule (>> x y) (ash x (- y)))
-
-(define-syntax-rule (mkfast ((a) v) ...)
- (let ((h (make-hash-table)))
- (hash-set! h 'a v)
- ...
- h))
-
-(define (fast-ref x)
- (aif it (assoc x `((__class__ . ,(O 'py-class))))
- (cdr it)
- #f))
-
-(define fasthash
- (mkfast
- ;; General
- ((__init__) (O 'py-init))
- ((__ne__) (O 'ne))
- ((__eq__) (O 'equal?))
- ((__repr__) (O 'repr))
-
- ;;iterators
- ((__iter__) (F 'wrap-in))
- ((__next__) (F 'next))
- ((__send__) (Y 'send))
- ((__exception__) (Y 'sendException))
- ((__close__) (Y 'sendClose))
-
- ;; Numerics
- ((__index__) (N 'py-index))
- ((__add__ ) (N '+))
- ((__mul__ ) (N '*))
- ((__sub__ ) (N '-))
- ((__radd__ ) (N 'r+))
- ((__rmul__ ) (N 'r*))
- ((__rsub__ ) (N 'r-))
- ((__neg__ ) (N '-))
- ((__le__ ) (N '<))
- ((__lt__ ) (N '<=))
- ((__ge__ ) (N '>))
- ((__gt__ ) (N '>=))
- ((__abs__ ) (N 'py-abs))
- ((__pow__ ) (N 'expt))
- ((__rpow__ ) (N 'rexpt))
- ((__truediv__) (N 'py-/))
- ((__rtruediv__) (N 'py-r/))
- ((__and__) (N 'py-logand))
- ((__or__) (N 'py-logior))
- ((__xor__) (N 'py-logxor))
- ((__rand__) (N 'py-rlogand))
- ((__ror__) (N 'py-rlogior))
- ((__rxor__) (N 'py-rlogxor))
- ((__divmod__) (N 'py-divmod))
- ((__rdivmod__) (N 'py-rdivmod))
- ((__invert__) (N 'py-lognot))
- ((__int__) (N 'mk-int))
- ((__float__) (N 'mk-float))
- ((__lshift__) (N 'py-lshift))
- ((__rshift__) (N 'py-rshift))
- ((__rlshift__) (N 'py-rlshift))
- ((__rrshift__) (N 'py-rrshift))
- ((bit_length) (N 'py-bit-length))
- ((as_integer_ratio) (N 'py-as-integer-ratio))
- ((conjugate) (N 'py-conjugate))
- ((denominator) (N 'py-denominator))
- ((numerator) (N 'py-numerator))
- ((to_bytes) (N 'py-to-bytes))
- ((fromhex) (N 'py-fromhex))
- ((hex) (N 'py-hex))
- ((imag) (N 'py-imag))
- ((is_integer) (N 'py-is-integer))
- ((real) (N 'py-real))
- ((__mod__) (N 'py-mod))
- ((__rmod__) (N 'py-rmod))
- ((__floordiv__) (N 'py-floordiv))
- ((__rfloordiv__)(N 'py-rfloordiv))
- ((__hex__) (N 'hex))
-
- ;; Lists
- ((append) (L 'pylist-append!))
- ((count) (L 'pylist-count))
- ((extend) (L 'pylist-extend!))
- ((index) (L 'pylist-index))
- ((pop) (L 'pylist-pop!))
- ((insert) (L 'pylist-insert!))
- ((remove) (L 'pylist-remove!))
- ((reverse) (L 'pylist-reverse!))
- ((sort) (L 'pylist-sort!))
- ((__len__) (L 'len))
- ((__contains__) (L 'in))
- ((__delitem__) (L 'pylist-delete!))
- ((__delslice__) (L 'pylist-delslice))
- ((__setitem__) (L 'pylist-set!))
-
- ;; String
- ((format) (S 'py-strformat))
- ((format_map) (S 'py-format-map))
- ((capitalize) (S 'py-capitalize))
- ((center) (S 'py-center ))
- ((endswith) (S 'py-endswith))
- ((expandtabs) (S 'py-expandtabs))
- ((find) (S 'py-find ))
- ((rfind) (S 'py-rfind ))
- ((isalnum) (S 'py-isalnum))
- ((isalpha) (S 'py-isalpha))
- ((isdigit) (S 'py-isdigit))
- ((islower) (S 'py-islower))
- ((isspace) (S 'py-isspace))
- ((isupper) (S 'py-isupper))
- ((istitle) (S 'py-istitle))
- ((isidentifier) (S 'py-identifier))
- ((join) (S 'py-join ))
- ((ljust) (S 'py-join ))
- ((rljust) (S 'py-rljust ))
- ((lower) (S 'py-lower ))
- ((upper) (S 'py-upper ))
- ((lstrip) (S 'py-lstrip ))
- ((rstrip) (S 'py-rstrip ))
- ((partition) (S 'py-partition))
- ((replace) (S 'py-replace))
- ((strip) (S 'py-strip ))
- ((title) (S 'py-title ))
- ((rpartition) (S 'py-rpartition))
- ((rindex) (S 'py-rindex ))
- ((split) (S 'py-split ))
- ((rsplit) (S 'py-rsplit ))
- ((splitlines) (S 'py-splitlines))
- ((startswith) (S 'py-startswith))
- ((swapcase) (S 'py-swapcase))
- ((translate) (S 'py-translate))
- ((zfill) (S 'py-zfill))
- ((encode) (S 'py-encode))
-
- ;;Nytevectors
- ((decode) (B 'py-decode))
-
- ;;DICTS
- ((copy) (Di 'py-copy))
- ((fromkeys) (Di 'py-fromkeys))
- ((get) (Di 'py-get))
- ((has_key) (Di 'py-has_key))
- ((items) (Di 'py-items))
- ((iteritems) (Di 'py-iteritems))
- ((iterkeys) (Di 'py-iterkeys))
- ((itervalues) (Di 'py-itervalues))
- ((keys) (Di 'py-keys))
- ((values) (Di 'py-values))
- ((popitem) (Di 'py-popitem))
- ((setdefault) (Di 'py-setdefault))
- ((update) (Di 'py-update))
- ((clear) (Di 'py-clear))
- ((__hash__) (H 'py-hash))))
-
-
-(define (fastfkn x) (hash-ref fasthash x))
-
-(define (get-kwarg vs arg)
- (let lp ((arg arg))
- (match arg
- (((#:* a) . arg)
- (cons `(* ,(exp vs a)) (lp arg)))
- (((#:** a) . arg)
- (cons `(** ,(exp vs a)) (lp arg)))
- (((#:= a b) . arg)
- (cons `(= ,(exp vs a) ,(exp vs b)) (lp arg)))
- ((x . arg)
- (cons (exp vs x) (lp arg)))
- (()
- '()))))
-
-(define (getarg x)
- (match x
- ((#:tp x . l)
- x)
- (x x)))
-
-(define (get-args_ vs arg)
- (let lp ((arg arg))
- (match arg
- (((#:arg x) . arg)
- (cons (exp vs (getarg x))
- (lp arg)))
- ((x . args)
- (lp args))
-
- (()
- '()))))
-
-(define (get-args= vs arg)
- (let lp ((arg arg))
- (match arg
- (((#:= x v) . arg)
- (cons (list '= (exp vs (getarg x)) (exp vs v))
- (lp arg)))
-
- ((x . args)
- (lp args))
-
- (()
- '()))))
-
-(define (get-args* vs arg)
- (let lp ((arg arg))
- (match arg
- (((#:* x) . arg)
- (cons (list '* (exp vs (getarg x)))
- (lp arg)))
-
- ((x . args)
- (lp args))
-
- (()
- '()))))
-
-(define (get-args** vs arg)
- (let lp ((arg arg))
- (match arg
- (((#:** x) . arg)
- (cons (list '** (exp vs (getarg x)))
- (lp arg)))
-
- ((x . args)
- (lp args))
-
- (()
- '()))))
-
-(define (kw->li dict)
- (for ((k v : dict)) ((l '()))
- (cons* v (symbol->keyword (string->symbol k)) l)
- #:final
- (reverse l)))
-
-(define (arglist->pkw l)
- (let lp ((l l) (r '()))
- (if (pair? l)
- (let ((x (car l)))
- (if (keyword? x)
- (list (G 'cons) `(,(G 'list) ,@(reverse r)) `(,(G 'list) ,@l))
- (lp (cdr l) (cons x r))))
- (list (G 'cons) `(,(G 'list) ,@(reverse r)) `(,(G 'quote) ())))))
-
-(define (get-addings vs x fast?)
- (match x
- (() '())
- ((x . l)
- (let ((is-fkn? (match l
- ((#f) #t)
- (((#:arglist . _) . _)
- #t)
- (_
- #f))))
-
- (cons
- (match x
- ((#:identifier . _)
- (let* ((tag (exp vs x))
- (xs (gensym "xs"))
- (fast (fastfkn tag))
- (is-fkn? (aif it (and fast? is-fkn? fast)
- `(#:call-obj (lambda (e)
- (lambda ,xs
- (,(G 'apply) ,it e ,xs))))
- #f)))
- (if is-fkn?
- is-fkn?
- (if (and fast? fast)
- `(#:fastfkn-ref ,fast (,(G 'quote) ,tag))
- (aif it (and fast? (fast-ref tag))
- `(#:fast-id ,it (,(G 'quote) ,tag))
- `(#:identifier (,(G 'quote) ,tag)))))))
-
- ((#:arglist args)
- `(#:apply ,@(get-kwarg vs args)))
-
- ((#:subscripts (n #f #f))
- `(#:vecref ,(exp vs n)))
-
- ((#:subscripts (n1 n2 n3))
- (let ((w (lambda (x) (if (eq? x None) (E 'None) x))))
- `(#:vecsub
- ,(w (exp vs n1)) ,(w (exp vs n2)) ,(w (exp vs n3)))))
-
- ((#:subscripts (n #f #f) ...)
- `(#:array-ref ,@ (map (lambda (n)
- (exp vs n))
- n)))
-
- ((#:subscripts (n1 n2 n3) ...)
- (let ((w (lambda (x) (if (eq? x None) (E 'None) x))))
- `(#:arraysub
- ,@(map (lambda (x y z)
- `(,(exp vs x) ,(exp vs y) ,(exp vs z)))
- n1 n2 n3))))
-
- (_ (error "unhandled addings")))
- (get-addings vs l fast?))))))
-
-(define-syntax-rule (setwrap u)
- (call-with-values (lambda () u)
- (lambda (x . x*)
- (if (null? x*)
- x
- (cons x x*)))))
-
-#;
-(define-syntax-rule (setwrap u)
- (call-with-values (lambda () u)
- (case-lambda
- ((x) x)
- (x x))))
-
-(define (make-set vs op x u)
- (define (tr-op op)
- (match op
- ("+=" '+)
- ("-=" '-)
- ("*=" '*)
- ("/=" '/)
- ("%=" (G 'modulo))
- ("&=" (G 'logand))
- ("|=" (G 'logior))
- ("^=" (G 'logxor))
- ("**=" (N 'expt))
- ("<<=" (C '<<))
- (">>=" (C '>>))
- ("//=" (G 'floor-quotient))))
-
- (match x
- ((#:verb x) x)
- ((#:test (#:power kind v addings . _) . _)
- (let* ((v (exp vs v))
- (fast? (not (eq? v 'super)))
- (addings (get-addings vs addings fast?))
- (p.a (match kind
- (#f (cons #f '()))
- ((v add)
- (cons (exp vs v) add))))
- (p (car p.a))
- (pa (cdr p.a))
- (pa (get-addings vs pa fast?)))
- (define q (lambda (x) `',x))
- (if kind
- (if (not p)
- (if (null? addings)
- (if op
- `(,s/d ,v (,(C 'setwrap) (,(tr-op op) ,v ,u)))
- `(,s/d ,v (,(C 'setwrap) ,u)))
- (if op
- `(,s/d ,(exp vs kind)
- (,(C 'fset-x) ,v ,addings
- (,(C 'setwrap)
- (,(tr-op op) (,(C 'ref-x) ,v ,@addings) ,u))))
-
- `(,s/d ,(exp vs kind)
- (,(C 'fset-x) ,v ,addings
- (,(C 'setwrap) ,u)))))
-
- (let ((pre (if (equal? p v)
- (let lp ((pa pa) (ad addings) (r '()))
- (if (and (pair? pa) (pair? ad))
- (let ((px (car pa)) (ax (car ad)))
- (if (equal? px ax)
- (lp (cdr pa) (cdr ad) (cons px r))
- #f))
- (if (pair? pa)
- #f
- (reverse r))))
- #f)))
- (if (null? addings)
- (if op
- `(,s/d ,v (,(C 'setwrap) (,(tr-op op) ,v ,u)))
- `(,s/d ,v (,(C 'setwrap) ,u)))
- (if op
- `(,(C 'set-x) ,v ,pre ,p ,pa ,addings
- (,(C 'setwrap)
- (,(tr-op op) (,(C 'ref-x) ,v ,@addings) ,u)))
-
- `(,(C 'set-x) ,v ,pre ,p ,pa ,addings
- (,(C 'setwrap) ,u))))))
-
- (if (null? addings)
- (if op
- `(,s/d ,v (,(C 'setwrap)
- (,(tr-op op) (,(C 'ref-x) ,v ,@addings) ,u)))
- `(,s/d ,v (,(C 'setwrap)
- ,u)))
- `(,(C 'set-x)
- ,v
- ,addings
- (,(C 'setwrap)
- ,(if op
- `(,(tr-op op) (,(C 'ref-x) ,v ,@addings) ,u)
- u)))))))))
-
-(define is-class? (make-fluid #f))
-(define (gen-yargs vs x)
- (match x ((#:list args)
- (map (g vs exp) args))))
-
-(define inhibit-finally #f)
-(define decorations (make-fluid '()))
-(define tagis (make-hash-table))
-
-(define (lr as)
- (lambda (vs x)
- (define (eval p a b) ((cdr (assoc p as)) a b))
- (define (expit x)
- (match x
- ((#:e e) e)
- (x (exp vs x))))
- (let lp ((x x))
- (match x
- ((p a b)
- (if (assoc p as)
- (match b
- ((q c d)
- (if (assoc q as)
- (lp (list q (list #:e (lp (list p a c))) d))
- (eval p (expit a) (expit b))))
- (_ (eval p (expit a) (expit b))))
- (expit x)))
- (_ (expit x))))))
-
-(define (mklr x)
- (lambda (a b)
- (list x a b)))
-
-(define (f% s a)
- (if (string? s)
- (list (F2 'format) s a)
- (list (N 'py-mod) s a)))
-
-(define lr+ (lr `((#:+ . ,(mklr (G '+))) (#:- . ,(mklr (G '-))))))
-(define lr* (lr `((#:* . ,(mklr (G '*))) (#:/ . ,(mklr (N 'py-/)))
- (#:% . ,f%) (#:// . ,(mklr (N 'py-floordiv))))))
-
-(define lr-or (lr `((#:bor . ,(mklr (N 'py-logior))))))
-(define lr-and (lr `((#:band . ,(mklr (N 'py-logand))))))
-(define lr-xor (lr `((#:bxor . ,(mklr (N 'py-logxor))))))
-
-(define-syntax-rule (gen-table x vs (tag code ...) ...)
- (begin
- (hash-set! tagis tag
- (lambda (x vs)
- (match x code ...)))
-
- ...))
-
-(define *doc* (make-fluid #f))
-(define (get-doc)
- (aif it (fluid-ref *doc*)
- it
- ""))
-(define set-doc
- (case-lambda
- (() (fluid-set! *doc* #f))
- ((x)
- (if (not (fluid-ref *doc*))
- (fluid-set! *doc* x)))))
-
-(define (u-it m)
- (if (and (eq? (list-ref m 0) 'language)
- (eq? (list-ref m 1) 'python)
- (eq? (list-ref m 0) 'module))
- (cddr m)
- '()))
-
-(define (tr-comp op x y)
- (match op
- ((or "<" ">" "<=" ">=")
- (list (G (string->symbol op)) x y))
- ("!=" (list (G 'not) (list (O 'equal?) x y)))
- ("==" (list (O 'equal?) x y))
- ("is" (list (G 'eq?) x y))
- ("isnot" (list (G 'not) (list (G 'eq?) x y)))
- ("in" (list (L 'in) x y))
- ("notin" (list (G 'not) (list (L 'in) x y)))
- ("<>" (list (G 'not) (list (O 'equal?) x y)))))
-
-(gen-table x vs
- (#:power
- ((_ _ (x) () . #f)
- (exp vs x))
-
- ((_ _ x () . #f)
- (exp vs x))
-
- ((_ #f vf trailer . **)
- (let* ((vf (exp vs vf))
- (fast? (not (eq? vf 'super))))
- (define (pw x)
- (if **
- `(,(N 'expt) ,x ,(exp vs **))
- x))
- (pw
- (let ((trailer (get-addings vs trailer fast?)))
- `(,(C 'ref-x) ,vf ,@trailer))))))
-
- (#:identifier
- ((#:identifier x . _)
- (string->symbol x)))
-
- (#:decorated
- ((_ (l ...))
- (fluid-set! decorations (map (g vs exp) l))
- `(,cvalues)))
-
- (#:string
- ((_ l)
- (mk-string vs l)))
-
- (#:bytes
- ((_ l)
- (let* ((b (make-bytevector (length l))))
- (let lp ((l l) (i 0))
- (if (pair? l)
- (begin
- (bytevector-u8-set! b i (car l))
- (lp (cdr l) (+ i 1)))
- `(,(B 'bytes) ,b))))))
-
-
- (#:+
- (x
- (lr+ vs x)))
-
- (#:-
- (x
- (lr+ vs x)))
-
- (#:*
- (x
- (lr* vs x)))
-
- (#:/
- (x
- (lr* vs x)))
-
- (#:%
- (x
- (lr* vs x)))
-
- (#://
- (x
- (lr* vs x)))
-
- (#:<<
- ((_ . l)
- (cons (N 'py-lshift) (map (g vs exp) l))))
-
- (#:>>
- ((_ . l)
- (cons (N 'py-rshift) (map (g vs exp) l))))
-
- (#:u~
- ((_ x)
- (list (N 'py-lognot) (exp vs x))))
-
- (#:u-
- ((_ x)
- (list '- (exp vs x))))
-
- (#:u+
- ((_ x)
- (list '+ (exp vs x))))
-
- (#:band
- (x (lr-and vs x)))
-
- (#:bxor
- (x (lr-xor vs x)))
-
- (#:bor
- (x (lr-or vs x)))
-
- (#:not
- ((_ x)
- (list (G 'not) (list (C 'boolit) (exp vs x)))))
-
- (#:or
- ((_ . x)
- (cons (G 'or) (map (lambda (x) (list (C 'boolit) (exp vs x))) x))))
-
- (#:and
- ((_ . x)
- (cons (G 'and) (map (lambda (x) (list (C 'boolit) (exp vs x))) x))))
-
- (#:test
- ((_ e1 #f)
- (exp vs e1))
-
- ((_ e1 (e2 #f))
- (list (G 'if) (list (C 'boolit) (exp vs e2)) (exp vs e1) (C 'None)))
-
- ((_ e1 (e2 e3))
- (list (G 'if) (list (C 'boolit) (exp vs e2)) (exp vs e1) (exp vs e3))))
-
- (#:del
- ;;We don't delete variables
- ((_ . l)
- `(,(G 'begin)
- ,@(let lp ((l l))
- (match l
- (((#:power #f base () . #f) . l)
- (cons `(set! ,(exp vs base) #f)
- (lp l)))
-
-
- (((#:power #f base (l ... fin) . #f) . ll)
- (let* ((f (exp vs base))
- (fast? (not (eq? f 'super)))
- (add (get-addings vs l fast?))
- (fin (get-addings vs (list fin) fast?)))
- (cons
- `(,(C 'del-x) (,(C 'ref-x) ,f ,@add) ,@fin)
- (lp ll))))
- (() '()))))))
-
- (#:with
- ((_ (l ...) code)
- (let* ((l (map (lambda (x)
- (match x
- ((a b) (list (exp vs b) (gensym "as") (exp vs a)))
- ((b) (list (exp vs b)))))
- l))
- (vs (union vs (let lp ((l l))
- (match l
- (((x) . l) (lp l))
- (((a b c) . l) (cons a (lp l)))
- (() '()))))))
-
- (define (f x)
- (match x
- ((a b c) (list 'set! a b))
- ((a) (list (G 'values)))))
-
- (define (g x)
- (match x
- ((a b c) (list b c))
- ((a) (list a))))
-
- `(,(W 'with) ,(map g l)
- (,(G 'begin)
- ,@(map f l)
- ,(exp vs code))))))
-
- (#:if
- ((_ test a ((tests . as) ...) . else)
- `(,(G 'cond)
- (,(list (C 'boolit) (exp vs test)) ,(exp vs a))
- ,@(map (lambda (p a) (list (list (C 'boolit) (exp vs p))
- (exp vs a))) tests as)
- ,@(if else `((else ,(exp vs else))) '()))))
-
- (#:suite
- ((_ #:stmt . l) (cons (G 'begin) (map (g vs exp) l)))
- ((_ . l) (cons (G 'begin) (map (g vs exp) l))))
-
- (#:classdef
- ((_ class parents code)
- (with-fluids ((is-class? #t))
- (let ()
- (define (clean l)
- (match l
- (((#:apply . l). u) (append (clean l) (clean u)))
- (((`= x v ) . l) (cons* (symbol->keyword x) v (clean l)))
- ((x . l) (cons x (clean l)))
- (() '())))
- (let* ((decor (let ((r (fluid-ref decorations)))
- (fluid-set! decorations '())
- r))
- (class (exp vs class))
- (vo vs)
- (vs (union (list class) vs))
- (ns (scope code '()))
- (ls ns #;(diff ns vs))
-
- (parents (match parents
- (() #f)
- (#f #f)
- ((#:arglist . _)
- (get-addings vs (list parents) #f))))
- (cd.doc (with-fluids ((*doc* #f))
- (let ((cd (wth (exp vs code))))
- (cons cd (get-doc)))))
- (cd (car cd.doc))
- (doc (cdr cd.doc)))
- `(set! ,class
- (,(C 'class-decor) ,decor
- (,(C 'with-class) ,class
- (,(C 'mk-p-class2)
- ,class
- ,(if parents
- (arglist->pkw (clean parents))
- `(,(G 'cons) (,(G 'quote) ()) (,(G 'quote) ())))
- ,doc
- ,(map (lambda (x) `(define ,x ,(gw-persson x vo))) ls)
- ,cd)))))))))
- (#:verb
- ((_ x) x))
-
- (#:scm
- ((_ (#:string _ s)) (with-input-from-string s read)))
-
- (#:comma
- ((_
- (and x
- (#:expr-stmt
- ((#:test
- (#:power #f (#:string l) () . #f)
- #f))
- (#:assign))))
- (set-doc (mk-string vs l))
- (exp vs x))
-
- ((_ a)
- (exp vs a))
-
- ((_ (and a
- (#:expr-stmt
- ((#:test
- (#:power #f (#:string ll) () . #f)
- #f))
- (#:assign))) . l)
- (set-doc (mk-string vs ll))
- `(,(G 'begin) ,(exp vs a) ,(exp vs (cons #:comma l))))
-
- ((_ a . l)
- `(,(G 'begin) ,(exp vs a) ,(exp vs (cons #:comma l)))))
-
- (#:import
- ((_ (#:from (() . nm) . #f))
- (let* ((xl (map (lambda (nm) (exp vs nm)) nm))
- (l `(language python module ,@xl)))
-
- ;; Make sure to load the module in
- (let ((? (catch #t
- (lambda () (Module (reverse l) (reverse xl)) #t)
- (lambda x #f))))
- (if (eq? ? #t) (for-each dont-warn (get-exported-symbols l)))
- `(,(C 'use) ,? ,l ,l))))
-
- ((_ (#:from (("." . nn) . nm) . #f))
- (let* ((u (module-name (current-module)))
- (u (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
- (xl (append u (map (lambda (nm) (exp vs nm)) nm)))
- (l `(language python module ,@xl)))
-
- ;; Make sure to load the module in
- (let ((? (catch #t
- (lambda () (Module (reverse l) (reverse xl)) #t)
- (lambda x #f))))
- (if (eq? ? #t) (for-each dont-warn (get-exported-symbols l)))
- `(,(C 'use) ,? ,l ,l))))
-
- ((_ (#:from ("." . nn) . #f))
- (let* ((nm '())
- (u (module-name (current-module)))
- (u (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
- (xl (append u (map (lambda (nm) (exp vs nm)) nm)))
- (l `(language python module ,@xl)))
-
- ;; Make sure to load the module in
- (let ((? (catch #t
- (lambda () (Module (reverse l) (reverse xl)) #t)
- (lambda x #f))))
- (if (eq? ? #t) (for-each dont-warn (get-exported-symbols l)))
- `(,(C 'use) ,? ,l ,l))))
-
- ((_ (#:from (() . nm) l))
- ;; Make sure to load the module in
- (let* ((xl (map (lambda (nm) (exp vs nm)) nm))
- (ll `(language python module ,@xl)))
-
- `(,(C 'use) #t ()
- (,ll
- #:select
- ,(map (lambda (x)
- (match x
- ((a . #f)
- (let ((s (exp vs a)))
- (fluid-set! ignore
- (cons s (fluid-ref ignore)))
- (dont-warn s)
- s))
-
- ((a . b)
- (let ((s1 (exp vs a))
- (s2 (exp vs b)))
- (fluid-set! ignore
- (cons s2
- (fluid-ref ignore)))
- (dont-warn s2)
- (cons s1 s2)))))
- l)))))
-
- ((_ (#:from (("." . nn) . nm) l))
- ;; Make sure to load the module in
- (let* ((u (module-name (current-module)))
- (u (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
- (xl (append u (map (lambda (nm) (exp vs nm)) nm)))
- (ll `(language python module ,@xl)))
-
- `(,(C 'use) #t ()
- (,ll
- #:select
- ,(map (lambda (x)
- (match x
- ((a . #f)
- (let ((s (exp vs a)))
- (fluid-set! ignore
- (cons s (fluid-ref ignore)))
- (dont-warn s)
- s))
-
- ((a . b)
- (let ((s1 (exp vs a))
- (s2 (exp vs b)))
- (fluid-set! ignore
- (cons s2
- (fluid-ref ignore)))
- (dont-warn s2)
- (cons s1 s2)))))
- l)))))
-
- ((_ (#:from ("." . nn) l))
- ;; Make sure to load the module in
- (let* ((nm '())
- (u (module-name (current-module)))
- (u (reverse (list-cdr-ref (reverse (u-it u)) (length nn))))
- (xl (append u (map (lambda (nm) (exp vs nm)) nm)))
- (ll `(language python module ,@xl)))
-
- `(,(C 'use) #t ()
- (,ll
- #:select
- ,(map (lambda (x)
- (match x
- ((a . #f)
- (let ((s (exp vs a)))
- (fluid-set! ignore
- (cons s (fluid-ref ignore)))
- (dont-warn s)
- s))
-
- ((a . b)
- (let ((s1 (exp vs a))
- (s2 (exp vs b)))
- (fluid-set! ignore
- (cons s2
- (fluid-ref ignore)))
- (dont-warn s2)
- (cons s1 s2)))))
- l)))))
-
-
- ((_ (#:name ((dots ids ...) . as) ...) ...)
- `(,(G 'begin)
- ,@(map
- (lambda (dots ids as)
- `(,(G 'begin)
- ,@(map (lambda (dots ids as)
- (let* ((u (module-name (current-module)))
- (u (reverse (list-cdr-ref (reverse (u-it u))
- (- (length dots) 1))))
-
- (path (append (if (null? dots) '() u)
- (map (g vs exp) ids))))
- (if as
- (exp
- vs
- `(#:expr-stmt
- ((#:test (#:power #f ,as ())))
- (#:assign
- ((#:verb
- ((@ (language python module) import)
- ((@ (language python module) Module)
- (,(G 'quote)
- ,(reverse (append
- '(language python module)
- path)))
- (,(G 'quote) ,(reverse path)))
- ,(exp vs as)))))))
- (exp
- vs
- `(#:expr-stmt
- ((#:test (#:power #f ,(car ids) ())))
- (#:assign
- ((#:verb
- ((@ (language python module) import)
- ((@ (language python module) Module)
- (,(G 'quote)
- ,(append '(language python module)
- path)))
- ,(exp vs (car ids)))))))))))
- dots ids as)))
- dots ids as))))
-
- (#:for
- ((_ e in code . #f)
- (=> next)
- (let lp ((e e))
- (match e
- (((#:power #f (#:tuple . l) . _))
- (lp l))
-
- (((#:power #f (#:identifier x . _) () . #f))
- (match in
- (((#:test power . _))
- (match power
- ((#:power #f
- (#:identifier "range" . _)
- ((#:arglist arglist . _))
- . _)
- (let* ((code2 (exp vs code))
- (p (is-ec #t code2 #t (list (C 'continue)))))
-
- (match arglist
- ((arg)
- (if p
- (let ((v (gensym "v"))
- (x (string->symbol x))
- (lp (gensym "lp")))
- `(,(C 'let/ec) break-ret
- (,(G 'let) ((,v ,(exp vs arg)))
- (,(G 'let) ,lp ((,x 0))
- (,(G 'if) (< ,x ,v)
- (,(G 'begin)
- (,(C 'let/ec) continue-ret
- (,(C 'with-sp) ((continue (,cvalues))
- (break (break-ret)))
- ,code2))
- (,lp (+ ,x 1))))))))
-
- (let ((v (gensym "v"))
- (x (string->symbol x))
- (lp (gensym "lp")))
- `(,(C 'let/ec) break-ret
- (,(G 'let) ((,v ,(exp vs arg)))
- (,(G 'let) ,lp ((,x 0))
- (,(G 'if) (< ,x ,v)
- (,(G 'begin)
- (,(C 'with-sp) ((break (break-ret)))
- ,code2)
- (,lp (+ ,x 1))))))))))
-
- ((arg1 arg2)
- (let ((v1 (gensym "va"))
- (v2 (gensym "vb"))
- (x (string->symbol x))
- (lp (gensym "lp")))
- (if p
- `(,(C 'let/ec) break-ret
- (,(G 'let) ((,v1 ,(exp vs arg1))
- (,v2 ,(exp vs arg2)))
- (,(G 'let) ,lp ((,x ,v1))
- (,(G 'if) (< ,x ,v2)
- (,(G 'begin)
- (,(C 'let/ec) continue-ret
- (,(C 'with-sp) ((continue (,cvalues))
- (break (break-ret)))
- ,code2))
- (,lp (+ ,x 1)))))))
- `(,(C 'let/ec) break-ret
- (,(G 'let) ((,v1 ,(exp vs arg1))
- (,v2 ,(exp vs arg2)))
- (,(G 'let) ,lp ((,x ,v1))
- (,(G 'if) (< ,x ,v2)
- (,(G 'begin)
- (,(C 'with-sp) ((break (break-ret)))
- ,code2)
- (,lp (+ ,x 1))))))))))
- ((arg1 arg2 arg3)
- (let ((v1 (gensym "va"))
- (v2 (gensym "vb"))
- (st (gensym "vs"))
- (x (string->symbol x))
- (lp (gensym "lp")))
- (if p
- `(,(C 'let/ec) break-ret
- (,(G 'let) ((,v1 ,(exp vs arg1))
- (,st ,(exp vs arg3))
- (,v2 ,(exp vs arg2)))
- (,(G 'if) (> ,st 0)
- (,(G 'let) ,lp ((,x ,v1))
- (,(G 'if) (< ,x ,v2)
- (,(G 'begin)
- (,(C 'let/ec) continue-ret
- (,(C 'with-sp)
- ((continue (,cvalues))
- (break (break-ret)))
- ,code2))
- (,lp (+ ,x ,st)))))
- (,(G 'if) (< ,st 0)
- (,(G 'let) ,lp ((,x ,v1))
- (,(G 'if) (> ,x ,v2)
- (,(G 'begin)
- (,(C 'let/ec) continue-ret
- (,(C 'with-sp)
- ((continue (,cvalues))
- (break (break-ret)))
- ,code2))
- (,lp (+ ,x ,st)))))
- (,(G 'error)
- "range with step 0 not allowed")))))
- `(,(C 'let/ec) break-ret
- (,(G 'let) ((,v1 ,(exp vs arg1))
- (,st ,(exp vs arg3))
- (,v2 ,(exp vs arg2)))
- (,(G 'if) (> ,st 0)
- (,(G 'let) ,lp ((,x ,v1))
- (,(G 'if) (< ,x ,v2)
- (,(G 'begin)
- (,(C 'with-sp)
- ((break (break-ret)))
- ,code2)
- (,lp (+ ,x ,st)))))
- (,(G 'if) (< ,st 0)
- (,(G 'let) ,lp ((,x ,v1))
- (,(G 'if) (> ,x ,v2)
- (,(G 'begin)
- (,(C 'with-sp)
- ((break (break-ret)))
- ,code2)
- (,lp (+ ,x ,st)))))
- (,(G 'error)
- "range with step 0 not allowed"))))))))
- (_ (next)))))
- (_ (next))))
- (_ (next))))
- (_ (next)))))
-
- ((_ es in code . else)
- (let lp ((es es))
- (match es
- (((#:power #f (#:tuple . l) . _))
- (lp l))
- (_
- (let* ((es2 (map (g vs exp) es))
- (vs2 (union es2 vs))
- (code2 (exp vs2 code))
- (p (is-ec #t code2 #t (list (C 'continue))))
- (else2 (if else (exp vs2 else) #f))
- (in2 (match in
- ((in) (list (exp vs in)))
- ((in ...) (list `(,(G 'list)
- ,@ (map (g vs exp) in)))))))
- (list (C 'cfor) es2 in2 code2 else2 p)))))))
-
- (#:sub
- ((_ l)
- (map (g vs exp) l)))
-
- (#:while
- ((_ test code . #f)
- (let* ((lp (gensym "lp"))
- (code2 (exp vs code))
- (p (is-ec #t code2 #t (list (C 'continue)))))
- (if p
- `(,(C 'let/ec) break-ret
- (,(G 'let) ,lp ()
- (,(G 'if) (,(C 'boolit) ,(exp vs test))
- (,(G 'begin)
- (,(C 'let/ec) continue-ret
- (,(C 'with-sp) ((continue (,cvalues))
- (break (break-ret)))
- ,code2))
- (,lp)))))
-
- `(,(C 'let/ec) break-ret
- (,(G 'let) ,lp ()
- (,(G 'if) (,(C 'boolit) ,(exp vs test))
- (,(G 'begin)
- (,(C 'with-sp) ((break (break-ret)))
- ,code2)
- (,lp))))))))
-
- ((_ test code . else)
- (let* ((lp (gensym "lp"))
- (code2 (exp vs code))
- (p (is-ec #t code2 #t (list (C 'continue)))))
- (if p
- `(,(C 'let/ec) break-ret
- (,(G 'let) ,lp ()
- (,(G 'if) (,(C 'boolit) ,(exp vs test))
- (,(G 'begin)
- (,(C 'let/ec) ,(C 'continue-ret)
- (,(C 'with-sp) ((continue (,cvalues))
- (break (break-ret)))
- ,code2))
- (,lp))
- ,(exp vs else))))
- `(,(C 'let/ec) break-ret
- (,(G 'let) ,lp ()
- (,(G 'if) (,(C 'boolit) ,(exp vs test))
- (,(G 'begin)
- (,(C 'with-sp) ((break (break-ret)))
- ,code2)
- (,lp))
- ,(exp vs else))))))))
-
- (#:try
- ((_ x (or #f ()) #f . fin)
- (if fin
- `(,(T 'try) (,(G 'lambda) () ,(exp vs x))
- #:finally (,(G 'lambda) () ,(exp vs fin)))
- `(,(T 'try) (,(G 'lambda) () ,(exp vs x)))))
-
- ((_ x exc else . fin)
- `(,(T 'try) (lambda () ,(exp vs x))
- ,@(let lp ((exc exc) (r '()))
- (match exc
- ((((test . #f) code) . exc)
- (lp exc (cons `(#:except ,(exp vs test) ,(exp vs code)) r)))
-
- (((#f code) . exc)
- (lp exc (cons `(#:except #t ,(exp vs code)) r)))
-
- ((((test . as) code) . exc)
- (let ((l (gensym "l")))
- (lp exc
- (cons
- `(#:except ,(exp vs test) => (,(G 'lambda)
- (,(exp vs as) . ,l)
- ,(exp vs code)))
- r))))
- (()
- (reverse r))))
-
- ,@(if else `((#:except #t ,(exp vs else))) '())
- ,@(if fin `(#:finally (,(G 'lambda) () ,(exp vs fin))) '()))))
-
- (#:subexpr
- ((_ . l)
- (exp vs l)))
-
- (#:raise
- ((_ #f . #f)
- `(,(T 'raise) (,(O 'Exception))))
-
- ((_ code . #f)
- `(,(T 'raise) ,(exp vs code)))
-
- ((_ code . from)
- (let ((o (gensym "o"))
- (c (gensym "c")))
- `(,(T 'raise)
- (,(G 'let) ((,c ,(exp vs code)))
- (,(G 'let) ((,o (,(G 'if) (,(O 'pyclass?) ,c)
- (,c)
- ,c)))
- (,(O 'set) ,o (,(G 'quote) __cause__) ,(exp vs from))
- ,o))))))
-
-
- (#:yield
- ((_ (#:from x))
- (let ((y (gensym "y"))
- (f (gensym "f")))
- `(,(G 'begin)
- (fluid-set! ,(Y 'in-yield) #t)
- (,(F 'for) ((,y : ,(exp vs x))) ()
- (,(G 'let) ((,f (scm.yield ,y)))
- (,f))))))
-
- ((_ args)
- (let ((f (gensym "f")))
- `(,(G 'begin)
- (,(G 'fluid-set!) ,(Y 'in-yield) #t)
- (,(G 'let) ((,f (scm.yield ,@(gen-yargs vs args))))
- (,f)))))
-
-
- ((_ f args)
- (let ((f (gen-yield (exp vs f)))
- (g (gensym "f")))
- `(,(G 'begin)
- (set! ,(C 'inhibit-finally) #t)
- (,(G 'let) ((,g (,f ,@(gen-yargs vs args))))
- (,g))))))
-
- (#:def
- ((_ f
- (#:types-args-list . args)
- #f
- code)
- (let* ((decor (let ((r (fluid-ref decorations)))
- (fluid-set! decorations '())
- r))
- (arg_ (get-args_ vs args))
- (arg= (get-args= vs args))
- (dd= (map cadr arg=))
- (c? (fluid-ref is-class?))
- (f (exp vs f))
- (y? (is-yield f #f code))
- (r (gensym "return"))
- (*f (get-args* vs args))
- (dd* (map cadr *f))
- (**f (get-args** vs args))
- (dd** (map cadr **f))
- (aa `(,@arg_ ,@*f ,@arg= ,@**f))
- (ab (gensym "ab"))
- (vs (union dd** (union dd* (union dd= (union arg_ vs)))))
- (ns (scope code vs))
- (df '() #;(defs code '()))
- (ex (gensym "ex"))
- (y 'scm.yield)
- (y.f (gen-yield f))
- (ls (diff (diff ns vs) df))
- (cd.doc (with-fluids ((is-class? #f)
- (*doc* #f)
- (return r))
- (let ((cd (wth (exp ns code))))
- (cons cd (get-doc)))))
- (cd (car cd.doc))
- (doc (cdr cd.doc))
- (docv (gensym "fv"))
- (docer (lambda (x) `(,(G 'let) ((,docv ,x))
- (,(C 'set) ,docv (,(G 'quote) __doc__) ,doc)
- ,docv))))
- (define (mk code)
- `(let-syntax ((,y (syntax-rules ()
- ((_ . args)
- (abort-to-prompt ,ab . args))))
- (,y.f (syntax-rules ()
- ((_ . args)
- (abort-to-prompt ,ab . args)))))
- ,code))
-
- (if c?
- (if y?
- `(set! ,f
- ,(docer
- `(,(C 'def-decor) ,decor
- (,(C 'def-wrap) ,y? ,f ,ab
- (,(D 'lam) ,aa
- (,(C 'with-return) ,r
- ,(mk `(,(G 'let) ,(map (lambda (x) (list x #f)) ls)
- (,(C 'with-self) ,c? ,aa
- ,cd)))))))))
-
- `(set! ,f
- ,(docer
- `(,(C 'def-decor) ,decor
- (,(D 'lam) ,aa
- (,(C 'with-return) ,r
- ,(mk `(,(G 'let) ,(map (lambda (x) (list x #f)) ls)
- (,(C 'with-self) ,c? ,aa
- ,cd)))))))))
-
- (if y?
- `(set! ,f
- ,(docer
- `(,(C 'def-decor) ,decor
- (,(C 'def-wrap) ,y? ,f ,ab
- (,(D 'lam) ,aa
- (,(C 'with-return) ,r
- (,(G 'let) ,(map (lambda (x) (list x #f)) ls)
- (,(C 'with-self) ,c? ,aa
- ,(mk cd)))))))))
- `(set! ,f
- ,(docer
- `(,(C 'def-decor) ,decor
- (,(D 'lam) ,aa
- (,(C 'with-return) ,r
- (,(G 'let) ,(map (lambda (x) (list x #f)) ls)
- (,(C 'with-self) ,c? ,aa
- ,(mk cd)))))))))))))
-
- (#:global
- ((_ . _)
- `(,cvalues)))
-
- (#:starexpr
- ((_ _ _ id . _)
- `(#:star ,(exp vs id))))
-
- (#:list
- ((_ x (and e (#:cfor . _)))
- (let ((l (gensym "l")))
- `(,(G 'let) ((,l (,(L 'to-pylist) (,(G 'quote) ()))))
- ,(gen-sel vs e `(,(L 'pylist-append!) ,l ,(exp vs x)))
- ,l)))
-
- ((_ . l)
- (list (L 'to-pylist) (let lp ((l l))
- (match l
- ((or () #f) `(,(G 'quote) ()))
- (((#:starexpr #:power #f (#:list . l) . _) . _)
- (lp l))
- (((#:starexpr #:power #f (#:tuple . l) . _) . _)
- (lp l))
- (((#:starexpr . l) . _)
- `(,(L 'to-list) ,(exp vs l)))
- ((x . l)
- `(,(G 'cons) ,(exp vs x) ,(lp l))))))))
- (#:tuple
- ((_ x (and e (#:cfor . _)))
- (exp vs (list #:comp x e)))
-
- ((_ . l)
- (let lp ((l l))
- (match l
- (() `(,(G 'quote) ()))
- (((#:starexpr #:power #f (#:list . l) . _) . _)
- (lp l))
- (((#:starexpr #:power #f (#:tuple . l) . _) . _)
- (lp l))
- (((#:starexpr . l) . _)
- `(,(L 'to-list) ,(exp vs l)))
- ((x . l)
- `(,(G 'cons) ,(exp vs x) ,(lp l)))))))
-
- (#:lambdef
- ((_ (#:var-args-list . v) e)
- (let ((as (get-args_ vs v))
- (a= (get-args= vs v))
- (a* (get-args* vs v))
- (** (get-args** vs v)))
- (list (C `lam) `(,@as ,@a* ,@a= ,@**) (exp vs e))))
-
- ((_ () e)
- (list (C `lam) `() (exp vs e))))
-
- (#:stmt
- ((_ l)
- (exp vs l)))
-
- (#:expr-stmt
- ((_ (l ...) (#:assign))
- (let ((l (map (g vs exp) l)))
- (if (= (length l) 1)
- (car l)
- `(,(G 'values) ,@l))))
-
- ((_ a (#:assign b c . u))
- (let ((z (gensym "x")))
- `(,(G 'let) ((,z ,(exp vs `(#:expr-stmt1 ,b (#:assign ,c . ,u)))))
- ,(exp vs `(#:expr-stmt ,a (#:assign ((#:verb ,z))))))))
-
- ((_ l type)
- (=> fail)
- (call-with-values
- (lambda () (match type
- ((#:assign u)
- (values #f u))
- ((#:augassign op u)
- (values op u))
- (_ (fail))))
-
- (lambda (op u)
- (cond
- ((= (length l) (length u))
- (if (= (length l) 1)
- `(,(G 'begin)
- ,(make-set vs op (car l) (exp vs (car u)))
- (,cvalues))
- `(,(G 'begin)
- ,@(map (lambda (l u) (make-set vs op l u))
- l
- (map (g vs exp) u))
- (,cvalues))))
-
- ((and (= (length u) 1) (not op))
- (let ((vars (map (lambda (x) (gensym "v")) l))
- (spec (gensym "special"))
- (q (gensym "q"))
- (f (gensym "f"))
- (a? (is-special? vs l)))
- (if a?
- `(,(G 'begin)
- (call-with-values (lambda () ,(exp vs (car u)))
- (,(G 'letrec) ((,f
- (case-lambda
- ((,q)
- (,(G 'if) (pair? ,q)
- (,(G 'apply) ,f ,q)
- (,(G 'apply) ,f (,(L 'to-list) ,q))))
- (,spec
- (,(C 'qset!) ,a? ,spec)))))
- ,f))
- (,cvalues))
-
- `(,(G 'begin)
- (call-with-values (lambda () ,(exp vs (car u)))
- (,(G 'letrec) ((,f
- (case-lambda
- ((,q)
- (,(G 'if) (pair? ,q)
- (,(G 'apply) ,f ,q)
- (,(G 'apply) ,f (,(L 'to-list) ,q))))
- (,vars
- ,@(map (lambda (l v) (make-set vs op l v))
- l vars)))))
- ,f))
- (,cvalues)))))
-
- ((and (= (length l) 1) (not op))
- `(,(G 'begin)
- ,(make-set vs op (car l) `(,(G 'list) ,@(map (g vs exp) u)))
- (,cvalues)))))))
-
- ((_
- ((#:test (#:power #f (#:identifier v . _) () . #f) #f))
- (#:assign (l)))
- (let ((s (string->symbol v)))
- `(,s/d ,s ,(exp vs l)))))
-
- (#:assert
- ((_ x f n m)
- `(,(G 'if)
- (,(G 'not) (,(G 'and) ,@(map (lambda (x) `(,(C 'boolit) ,(exp vs x)))
- x)))
- (,(C 'raise) ,(C 'AssertionError) (,(G 'quote) ,f) ,n ,m))))
-
-
-
- (#:expr-stmt1
- ((_ a (#:assign b c . u))
- (let ((z (gensym "x")))
- `(,(G 'let) ((,z ,(exp vs `(#:expr-stmt1 ,b
- (#:assign ,c . ,u)))))
- ,(exp vs `(#:expr-stmt1 ,a (#:assign ((#:verb ,z))))))))
-
- ((_ l type)
- (=> fail)
- (call-with-values
- (lambda () (match type
- ((#:assign u)
- (values #f u))
- ((#:augassign op u)
- (values op u))
- (_ (fail))))
-
- (lambda (op u)
- (cond
- ((= (length l) (length u))
- (if (= (length l) 1)
- `(,(G 'begin)
- ,(make-set vs op (car l) (exp vs (car u)))
- ,(exp vs (car l)))
- `(,(G 'begin)
- ,@(map (lambda (l u) (make-set vs op l u))
- l
- (map (g vs exp) u))
- (,cvalues ,@(map (g exp vs) l)))))
-
- ((and (= (length u) 1) (not op))
- (let ((vars (map (lambda (x) (gensym "v")) l))
- (q (gensym "q"))
- (f (gensym "f")))
- `(,(G 'begin)
- (call-with-values (lambda () ,(exp vs (car u)))
- (,(G 'letrec) ((,f
- (case-lambda
- ((,q)
- (,(G 'if) (pair? ,q)
- (,(G 'apply) ,f ,q)
- (,(G 'apply) ,f (,(L 'to-list) ,q))))
- (,vars
- ,@(map (lambda (l v) (make-set vs op l v))
- l vars)))))
- ,f))
- (,cvalues ,@(map (g exp vs) l)))))
-
- ((and (= (length l) 1) (not op))
- `(,(G 'begin)
- ,(make-set vs op (car l) `(,(G 'list) ,@(map (g vs exp) u)))
- (,cvalues ,(exp vs (car l))))))))))
-
- (#:return
- ((_ x)
- (if x
- `(,(fluid-ref return) ,@(map (g vs exp) x))
- `(,(fluid-ref return)))))
-
-
- (#:dict
- ((_ . #f)
- `(,(Di 'make-py-hashtable)))
-
- ((_ (#:e k . v) (and e (#:cfor . _)))
- (let ((dict (gensym "dict")))
- `(,(G 'let) ((,dict (,(Di 'make-py-hashtable))))
- ,(gen-sel vs e `(,(L 'pylist-set!) ,dict ,(exp vs k) ,(exp vs v)))
- ,dict)))
-
- ((_ (#:e k . v) ...)
- (let ((dict (gensym "dict")))
- `(,(G 'let) ((,dict (,(Di 'make-py-hashtable))))
- ,@(map (lambda (k v)
- `(,(L 'pylist-set!) ,dict ,(exp vs k) ,(exp vs v)))
- k v)
- ,dict)))
-
- ((_ k (and e (#:cfor . _)))
- (let ((dict (gensym "dict")))
- `(,(G 'let) ((,dict (,(Se 'set))))
- ,(gen-sel vs e `((,(O 'ref) ,dict (,(G 'quote) add)) ,(exp vs k)))
- ,dict)))
-
- ((_ k ...)
- (let ((set (gensym "dict")))
- `(,(G 'let) ((,set (,(Se 'set))))
- ,@(map (lambda (k)
- `((,(O 'ref) ,set (,(G 'quote) add)) ,(exp vs k)))
- k)
- ,set))))
-
-
- (#:comp
- ((_ x (and e (#:cfor . _)) . _)
- (let ((yield (gensym "yield")))
- `((,(Y 'make-generator) ()
- (lambda (,yield)
- ,(gen-sel vs e `(,yield ,(exp vs x))))))))
-
- ((_ x #f)
- (exp vs x))
-
- ((_ x (op . y))
- (tr-comp op (exp vs x) (exp vs y)))
-
- ((_ x (op . y) . l)
- (let ((m (gensym "op")))
- `(,(G 'let) ((,m ,(exp vs y)))
- (,(G 'and) ,(tr-comp op (exp vs x) m)
- ,(exp vs `(#:comp (#:verb ,m) . ,l))))))))
-
-
-(define (exp vs x)
- (match x
- ((e)
- (exp vs e))
- ((tag . l)
- ((hash-ref tagis tag
- (lambda y (warn (format #f "not tag in tagis ~a" tag)) x))
- x vs))
-
- (#:True #t)
- (#:None (E 'None))
- (#:null `(,(G 'quote) ()))
- (#:False #f)
- (#:pass `(,cvalues))
- (#:break
- (C 'break))
- (#:continue
- (C 'continue))
- (x x)))
-
-(define (comp x)
- (define start
- (match x
- (((#:stmt
- (#:comma
- (#:expr-stmt
- ((#:test
- (#:power #f
- (#:identifier "module" . _)
- ((#:arglist arglist))
- . #f) #f))
- (#:assign)))) . rest)
-
- (let ()
- (define args
- (map (lambda (x)
- (exp '() x))
- arglist))
-
- (define name (string-join (map symbol->string args) "."))
-
- `((define-module (language python module ,@args)
- #:pure
- #:use-module ((guile) #:select
- (@ @@ pk let* lambda call-with-values case-lambda
- set! = * + - < <= > >= / pair? fluid-set!
- fluid-ref
- syntax-rules let-syntax abort-to-prompt))
- #:use-module (language python module python)
- #:use-module ((language python compile) #:select (pks))
- #:use-module (language python exceptions)
- #:use-module ((oop goops) #:select (<complex> <real> <fraction> <integer> <number>)))
- (,(G 'define) __doc__ #f)
- (,(G 'define) __name__ ,name)
- (,(G 'define) __module__ (,(G 'quote)
- (language python module ,@args))))))
- (x '())))
-
- (fluid-set! ignore '())
- (if (fluid-ref (@@ (system base compile) %in-compile))
- (begin
- (if (fluid-ref (@@ (system base compile) %in-compile))
- (set! s/d (C 'qset!))
- (set! s/d (C 'define-)))
-
- (if (pair? start)
- (set! x (cdr x)))
-
- (let* ((globs (get-globals x))
- (e.doc (with-fluids ((*doc* #f))
- (let ((r (map (g globs exp) x)))
- (cons r (get-doc)))))
- (e (car e.doc))
- (doc (cdr e.doc)))
-
- `(begin
- ,@start
- (,(G 'define) ,fnm (,(G 'make-hash-table)))
- ,@(map (lambda (s)
- (if (member s (fluid-ref ignore))
- `(,cvalues)
- `(,(C 'var) ,s)))
- (cons '__doc__ globs))
- (,(G 'set!) __doc__ ,doc)
- ,@e
- (,(C 'export-all)))))
-
- (begin
- (if (fluid-ref (@@ (system base compile) %in-compile))
- (set! s/d 'set!)
- (set! s/d (C 'define-)))
-
- (if (pair? start)
- (set! x (cdr x)))
-
- (let* ((globs (get-globals x))
- (res (gensym "res"))
- (e (map (g globs exp) x)))
- `(,(G 'begin)
- ,@start
- ,@(map (lambda (s)
- (if (member s (fluid-ref ignore))
- `(,cvalues)
- `(,(C 'var) ,s))) globs)
- (,(C 'with-exit) ,@e))))))
-
-
-
-
-(define-syntax-parameter break
- (lambda (x) #'(values)))
-
-(define-syntax-parameter continue
- (lambda (x) (error "continue must be bound")))
-
-(define (is-yield f p x)
- (match x
- ((#:def nm args _ code)
- (is-yield f #t code))
- ((#:yield x _)
- (eq? f (exp '() x)))
- ((#:yield _)
- (not p))
- ((a . l)
- (or
- (is-yield f p a)
- (is-yield f p l)))
- (_
- #f)))
-
-
-
-(define-syntax with-sp
- (lambda (x)
- (syntax-case x ()
- ((_ ((x v)) code ...)
- (equal? (syntax->datum #'x) 'break)
- #'(syntax-parameterize ((break (lambda (y) #'v))) code ...))
-
- ((_ ((x1 v1) (x2 v2)) code ...)
- (and (equal? (syntax->datum #'x1) 'break)
- (equal? (syntax->datum #'x2) 'continue))
- #'(syntax-parameterize ((break (lambda (y) #'v1))
- (continue (lambda (y) #'v2)))
- code ...))
-
- ((_ ((x2 v2) (x1 v1)) code ...)
- (and (equal? (syntax->datum #'x1) 'break)
- (equal? (syntax->datum #'x2) 'continue))
- #'(syntax-parameterize ((break (lambda (y) #'v1))
- (continue (lambda (y) #'v2)))
- code ...)))))
-
-
-(define (is-ec ret x tail tags)
- (match x
- ((('@ ('guile) 'cond) (p a ... b) ...)
- (or
- (or-map (lambda (x) (or-map (lambda (x) (is-ec ret x #f tags)) x))
- a)
- (or-map (lambda (x) (is-ec ret x tail tags))
- b)))
-
- (((_ _ 'with-self) u v a ... b)
- (or
- (or-map (lambda (x) (is-ec ret x #f tags)) a)
- (is-ec ret b tail tags)))
-
- (('let-syntax v a ... b)
- (or
- (or-map (lambda (x) (is-ec ret x #f tags)) a)
- (is-ec ret b tail tags)))
-
- ((('@ ('guile) 'begin) a ... b)
- (or
- (or-map (lambda (x) (is-ec ret x #f tags)) a)
- (is-ec ret b tail tags)))
-
- ((('@ ('guile) 'let) lp ((y x) ...) a ... b) (=> next)
- (if (symbol? lp)
- (or
- (or-map (lambda (x) (is-ec ret x #f tags)) x)
- (or-map (lambda (x) (is-ec ret x #f tags)) a)
- (is-ec ret b tail tags))
- (next)))
-
- ((('@ ('guile) 'let) ((y x) ...) a ... b)
- (or
- (or-map (lambda (x) (is-ec ret x #f tags)) x)
- (or-map (lambda (x) (is-ec ret x #f tags)) a)
- (is-ec ret b tail tags)))
-
- (('let* ((y x) ...) a ... b)
- (or
- (or-map (lambda (x) (is-ec ret x #f tags)) x)
- (or-map (lambda (x) (is-ec ret x #f tags)) a)
- (is-ec ret b tail tags)))
-
- ((('@ ('guile) 'define) . _)
- #f)
-
- ((('@ ('guile) 'if) p a b)
- (or
- (is-ec ret p #f tags)
- (is-ec ret a tail tags)
- (is-ec ret b tail tags)))
-
- ((('@ ('guile) 'if) p a)
- (or
- (is-ec ret #'p #f tags)
- (is-ec ret #'a tail tags)))
-
- (('@@ _ _)
- (if (member x tags)
- #t
- #f))
-
-
- ((a ...)
- (or-map (lambda (x) (is-ec ret x #f tags)) a))
-
- (x #f)))
-
-(define-syntax with-return
- (lambda (x)
- (define (analyze ret x)
- (syntax-case x (let-syntax let* @ @@)
- ((cond- (p a ... b) ...)
- (equal? (syntax->datum #'cond-)
- '(@ (guile) cond))
- (with-syntax (((bb ...) (map (lambda (x) (analyze ret x)) #'(b ...))))
- #'(cond (p a ... bb) ...)))
-
- (((_ _ with-self-) u v a ... b)
- (equal? (syntax->datum #'with-self-)
- 'with-self)
- #`(with-self u v a ... #,(analyze ret #'b)))
-
- ((let-syntax v a ... b)
- #`(let-syntax v a ... #,(analyze ret #'b)))
-
- (((@ (guile) begin-) a ... b)
- (equal? (syntax->datum #'begin-)
- 'begin)
- #`(begin a ... #,(analyze ret #'b)))
-
- (((@ (guile) let-) lp v a ... b)
- (and
- (equal? (syntax->datum #'let-)
- 'let)
- (symbol? (syntax->datum #'lp)))
- #`(let lp v a ... #,(analyze ret #'b)))
-
- (((@ (guile) let-) v a ... b)
- (equal? (syntax->datum #'let-)
- 'let)
- #`(let v a ... #,(analyze ret #'b)))
-
- (((@ (guile) if-) p a b)
- (equal? (syntax->datum #'if-)
- 'if)
- #`(if p #,(analyze ret #'a) #,(analyze ret #'b)))
-
- (((@ (guile) if-) p a)
- (equal? (syntax->datum #'if-)
- 'if)
- #`(if p #,(analyze ret #'a)))
-
- ((return a b ...)
- (equal? (syntax->datum #'return) (syntax->datum ret))
- (if (eq? #'(b ...) '())
- #'a
- #`(values a b ...)))
-
- ((return)
- (equal? (syntax->datum #'return) (syntax->datum ret))
- #`(values))
-
- (x #'x)))
-
- (define (is-ec ret x tail)
- (syntax-case x (let-syntax let* @@ @)
- (((@ (guile) cond) (p a ... b) ...)
- (equal? (syntax->datum #'cond)
- 'cond)
- (or
- (or-map (lambda (x) (is-ec ret x #f))
- #'(a ... ...))
- (or-map (lambda (x) (is-ec ret x tail))
- #'(b ...))))
-
- (((_ _ with-self) u v a ... b)
- (equal? (syntax->datum #'with-self)
- 'with-self)
- (or
- (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
- (is-ec ret #'b tail)))
-
- ((let-syntax v a ... b)
- #t
- (or
- (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
- (is-ec ret #'b tail)))
-
- (((@ (guile) begin) a ... b)
- (equal? (syntax->datum #'begin)
- 'begin)
- (or
- (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
- (is-ec ret #'b tail)))
-
- (((@ (guile) let) lp ((y x) ...) a ... b)
- (and
- (equal? (syntax->datum #'let)
- 'let)
- (symbol? (syntax->datum #'lp)))
-
- (or
- (or-map (lambda (x) (is-ec ret x #f)) #'(x ...))
- (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
- (is-ec ret #'b tail)))
-
- (((@ (guile) let) ((y x) ...) a ... b)
- (equal? (syntax->datum #'let)
- 'let)
- (or
- (or-map (lambda (x) (is-ec ret x #f)) #'(x ...))
- (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
- (is-ec ret #'b tail)))
-
- ((let* ((y x) ...) a ... b)
- #t
- (or
- (or-map (lambda (x) (is-ec ret x #f)) #'(x ...))
- (or-map (lambda (x) (is-ec ret x #f)) #'(a ...))
- (is-ec ret #'b tail)))
-
- (((@ (guile) define) . _)
- (equal? (syntax->datum #'define)
- 'define)
- #f)
-
- (((@ (guile) if) p a b)
- (equal? (syntax->datum #'if)
- 'if)
- (or
- (is-ec ret #'p #f)
- (is-ec ret #'a tail)
- (is-ec ret #'b tail)))
-
- (((@ (guile) if) p a)
- (equal? (syntax->datum #'if)
- 'if)
- (or
- (is-ec ret #'p #f)
- (is-ec ret #'a tail)))
-
- ((return b ...)
- (equal? (syntax->datum #'return) (syntax->datum ret))
- (not tail))
-
- ((a ...)
- #t
- (or-map (lambda (x) (is-ec ret x #f)) #'(a ...)))
-
- (x
- #t
- #f)))
-
- (syntax-case x ()
- ((_ ret l)
- (let ((code (analyze #'ret #'l)))
- (if (is-ec #'ret #'l #t)
- #`(let/ec ret l)
- code))))))
-
-(define void (list 'void))
-
-(define-syntax var
- (lambda (x)
- (syntax-case x (cons quote)
- ((_ '())
- #'(values))
- ((_ (cons x v))
- #'(begin (var x) (var v)))
- ((_ v)
- (begin
- (dont-warn (syntax->datum #'v))
- #'(if (module-defined? (current-module) 'v)
- (values)
- (define! 'v void)))))))
-
-(define-inlinable (non? x) (eq? x #:nil))
-
-(define (gentemp stx) (datum->syntax stx (gensym "x")))
-
-(define-syntax mmatch
- (syntax-rules ()
- ((_ (a . aa) (b . bb) . code)
- (match a (b (mmatch aa bb . code))))
- ((_ () () . code)
- (begin . code))))
-
-(define (mutewarn x y) (list x y))
-
-(define-syntax clambda
- (lambda (x)
- (syntax-case x ()
- ((_ (x ...) code ...)
- (with-syntax ((n (length #'(x ...)))
- ((y ...) (generate-temporaries #'(x ...))))
- #'(let ((f (lambda (y ... . u)
- (mmatch (y ...) (x ...) code ...))))
- (if (> n 1)
- (case-lambda
- ((c)
- (if (pair? c)
- (let ((cc (cdr c)))
- (if (pair? cc)
- (apply f c)
- (apply f (mutewarn c cc))))
- (py-apply f (* c))))
- (q (apply f q)))
- f)))))))
-
-(define (gen-temp x)
- (syntax-case x ()
- ((x ...) (map gen-temp #'(x ...)))
- (x (car (generate-temporaries (list #'x))))))
-
-(define (replace_ stx l)
- (let lp ((l l))
- (syntax-case l ()
- ((a . l) (cons (lp #'a) (lp #'l)))
- (x
- (if (equal? (syntax->datum #'x) '_)
- (datum->syntax stx (gensym "_"))
- #'x)))))
-
-(define-syntax with-syntax*
- (syntax-rules ()
- ((_ () code) code)
- ((_ () . code) (begin . code))
- ((_ (x . l) . code)
- (with-syntax (x) (with-syntax* l . code)))))
-
-(define-syntax cfor
- (lambda (xx)
- (syntax-case xx ()
- ((_ (x ...) in code next p)
- (or-map pair? #'(x ...))
- #'(for-adv (x ...) in code next p))
-
- ((_ (x) (a) code #f #f)
- (with-syntax ((x (replace_ xx #'x)))
- #'(if (pair? a)
- (let/ec break-ret
- (let lp ((l a))
- (if (pair? l)
- (begin
- (set! x (car l))
- (with-sp ((continue (values))
- (break (break-ret)))
- code)
- (lp (cdr l))))))
- (for/adv1 (x) (a) code #f #f))))
-
- ((_ (x) (a) code #f #t)
- (with-syntax ((x (replace_ xx #'x)))
- #'(if (pair? a)
- (let/ec break-ret
- (let lp ((l a))
- (if (pair? l)
- (begin
- (let/ec continue-ret
- (set! x (car l))
- (with-sp ((continue (continue-ret))
- (break (break-ret)))
- code))
- (lp (cdr l))))))
- (for/adv1 (x) (a) code #f #t))))
-
- ((_ (x) (a) code next #f)
- (with-syntax ((x (replace_ xx #'x)))
- #'(if (pair? a)
- (let/ec break-ret
- (let lp ((l a))
- (if (pair? l)
- (begin
- (set! x (car l))
- (with-sp ((continue (values))
- (break (break-ret)))
- code))
- (lp (cdr l))))
- next)
- (for/adv1 (x) (a) code next #f))))
-
- ((_ (x) (a) code next #t)
- (with-syntax ((x (replace_ xx #'x)))
- #'(if (pair? a)
- (let/ec break-ret
- (let lp ((l a))
- (if (pair? l)
- (let/ec continue-ret
- (set! x (car l))
- (with-sp ((continue (continue-ret))
- (break (break-ret)))
- code))
- (lp (cdr l))))
- next)
- (for/adv1 (x) (a) code next #f))))
-
- ((_ x a code next p)
- #'(for/adv1 x a code next p)))))
-
-(define-syntax for/adv1
- (lambda (zz)
- (syntax-case zz ()
- ((_ (xy ...) (in) code #f #f)
- (with-syntax* ((inv (gentemp #'in))
- ((yy ...) (replace_ zz #'(xy ...)))
- ((xx ...) (gen-temp #'(yy ...))))
- #'(let ((inv (wrap-in in)))
- (clet (yy ...)
- (catch StopIteration
- (lambda ()
- (let lp ()
- (call-with-values (lambda () (next inv))
- (clambda (xx ...)
- (cset! yy xx) ...
- (with-sp ((break (values))
- (continue (values)))
- code
- (lp))))))
- (lambda z (values)))))))
-
- ((_ (xy ...) (in ...) code #f #f)
- (with-syntax* (((inv ...) (generate-temporaries #'(in ...)))
- ((yy ...) (replace_ zz #'(xy ...)))
- ((xx ...) (gen-temp #'(yy ...))))
- #'(let ((inv (wrap-in in)) ...)
- (clet (yy ...)
- (catch StopIteration
- (lambda ()
- (let lp ()
- (call-with-values (lambda () (values (next inv) ...))
- (clambda (xx ...)
- (cset! yy xx) ...
- (with-sp ((break (values))
- (continue (values)))
- code
- (lp))))))
- (lambda z (values)))))))
-
- ((_ (xy ...) (in) code #f #t)
- (with-syntax* ((inv (gentemp #'in))
- ((yy ...) (replace_ zz #'(xy ...)))
- ((xx ...) (gen-temp #'(yy ...))))
- #'(let ((inv (wrap-in in)))
- (clet (yy ...)
- (let lp ()
- (let/ec break-ret
- (catch StopIteration
- (lambda ()
- (call-with-values (lambda () (next inv))
- (clambda (xx ...)
- (cset! yy xx) ...
- (let/ec continue-ret
- (with-sp ((break (break-ret))
- (continue (continue-ret)))
- code))
- (lp))))
- (lambda z (values)))))))))
-
- ((_ (xy ...) (in ...) code #f #t)
- (with-syntax* (((inv ...) (generate-temporaries #'(in ...)))
- ((yy ...) (replace_ zz #'(xy ...)))
- ((xx ...) (gen-temp #'(yy ...))))
- #'(let ((inv (wrap-in in)) ...)
- (clet (yy ...)
- (let lp ()
- (let/ec break-ret
- (catch StopIteration
- (lambda ()
- (call-with-values (lambda () (values (next inv) ...))
- (clambda (xx ...)
- (cset! yy xx) ...
- (let/ec continue-ret
- (with-sp ((break (break-ret))
- (continue (continue-ret)))
- code))
- (lp))))
- (lambda z (values)))))))))
-
- ((_ (x ...) in code else #f)
- #'(for-adv (x ...) in code else #f))
-
- ((_ (x ...) in code else #t)
- #'(for-adv (x ...) in code else #t)))))
-
-
-(define-syntax for-adv
- (lambda (zz)
- (define (gen x y)
- (if (= (length (syntax->datum x)) (= (length (syntax->datum y))))
- (syntax-case x ()
- ((x ...) #'(values (next x) ...)))
- (syntax-case x ()
- ((x) #'(next x)))))
-
- (syntax-case zz ()
- ((_ (xy ...) (in) code else p)
- (with-syntax* ((inv (gentemp #'in))
- ((yy ...) (replace_ zz #'(xy ...)))
- ((xx ...) (gen-temp #'(yy ...))))
-
- (if (syntax->datum #'p)
- #'(let ((inv (wrap-in in)))
- (clet (yy ...)
- (let/ec break-ret
- (catch StopIteration
- (lambda ()
- (let lp ()
- (call-with-values (lambda () (next inv))
- (clambda (xx ...)
- (cset! yy xx) ...
- (let/ec continue-ret
- (with-sp ((break (break-ret))
- (continue (continue-ret)))
- code))
- (lp)))))
- (lambda q else)))))
-
- #'(let ((inv (wrap-in in)))
- (clet (yy ...)
- (let/ec break-ret
- (catch StopIteration
- (lambda ()
- (let lp ()
- (call-with-values (lambda () (next inv))
- (clambda (xx ...)
- (cset! yy xx) ...
- (with-sp ((break (break-ret))
- (continue (values)))
- code)
- (lp)))))
- (lambda e else))))))))
-
- ((_ (xy ...) (in ...) code else p)
- (with-syntax* (((inv ...) (generate-temporaries #'(in ...)))
- ((yy ...) (replace_ zz #'(xy ...)))
- (get (gen #'(inv ...) #'(yy ...)))
- ((xx ...) (gen-temp #'(yy ...))))
- (if (syntax->datum #'p)
- #'(clet (yy ...)
- (let ((inv (wrap-in in)) ...)
- (let/ec break-ret
- (catch StopIteration
- (lambda ()
- (let lp ()
- (call-with-values (lambda () get)
- (clambda (xx ...)
- (cset! yy xx) ...
- (let/ec continue-ret
- (with-sp ((break (break-ret))
- (continue (continue-ret)))
- code))
- (lp)))))
- (lambda q else)))))
-
- #'(clet (yy ...)
- (let ((inv (wrap-in in)) ...)
- (let/ec break-ret
- (catch StopIteration
- (lambda ()
- (let lp ()
- (call-with-values (lambda () get)
- (clambda (xx ...)
- (cset! yy xx) ...
- (with-sp ((break (break-ret))
- (continue (values)))
- code)
- (lp)))))
- (lambda e else)))))))))))
-
-(define-syntax cset!
- (syntax-rules ()
- ((_ (a . aa) (b . bb))
- (begin
- (cset! a b)
- (cset! aa bb)))
- ((_ () ())
- (values))
- ((_ a b)
- (set! a b))))
-
-(define-syntax clet
- (syntax-rules ()
- ((_ ((a . l) . u) . code)
- (clet (a l . u) . code))
- ((_ (() . u) . code)
- (clet u . code))
- ((_ (a . u) . code)
- (let ((a #f))
- (clet u . code)))
- ((_ () . code)
- (begin . code))))
-
-(define-syntax def-wrap
- (lambda (x)
- (syntax-case x ()
- ((_ #f f ab x)
- #'x)
-
- ((_ #t f ab code)
- #'(lambda x
- (define obj (make <yield>))
- (define ab (make-prompt-tag))
- (slot-set! obj 'k #f)
- (slot-set! obj 'closed #f)
- (slot-set! obj 's
- (lambda ()
- (call-with-prompt
- ab
- (lambda ()
- (let/ec return
- (apply code x))
- (slot-set! obj 'closed #t)
- (throw StopIteration))
- (letrec ((lam
- (lambda (k . l)
- (fluid-set! in-yield #f)
- (slot-set! obj 'k
- (lambda (a)
- (call-with-prompt
- ab
- (lambda ()
- (k a))
- lam)))
- (apply values l))))
- lam))))
- obj)))))
-
-(define miss (list 'miss))
-(define-inlinable (wr o k x)
- (if (eq? x miss)
- (raise (AttributeError (cons o k)))
- x))
-
-(define-syntax ref-x
- (lambda (x)
- (syntax-case x (@)
- ((_ v)
- #'v)
- ((_ v (#:fastfkn-ref f tag) . l)
- #'(let ((vv v))
- (if (is-a? vv <p>)
- (ref-x v (#:identifier tag) . l)
- (ref-x (lambda x
- (if (pyclass? v)
- (apply f x)
- (apply f v x))) . l))))
- ((_ v (#:fast-id f _) . l)
- #'(ref-x (f v) . l))
-
- ((_ v (#:identifier ((@ x q) dict)) . l)
- (equal? (syntax->datum #'dict) '__dict__)
- #'(ref-x (py-dict v) . l))
-
- ((_ v (#:identifier x) . l)
- #'(ref-x (wr v x (ref v x miss)) . l))
-
- ((_ v (#:call-obj x) . l)
- #'(ref-x (x v) . l))
-
- ((_ v (#:call x ...) . l)
- #'(ref-x (v x ...) . l))
-
- ((_ v (#:apply x ...) . l)
- #'(ref-x (py-apply v x ...) . l))
-
- ((_ v (#:apply x ...) . l)
- #'(ref-x (py-apply v x ...) . l))
-
- ((_ v (#:vecref x) . l)
- #'(ref-x (pylist-ref v x) . l))
-
- ((_ v (#:vecsub . x) . l)
- #'(ref-x (pylist-slice v . x) . l)))))
-
-(define-syntax del-x
- (syntax-rules ()
- ((_ v (#:identifier x))
- (ref-x (wr v x (ref v x))))
- ((_ v (#:call-obj x))
- (values))
- ((_ v (#:call x ...))
- (values))
- ((_ v (#:apply x ...))
- (values))
- ((_ v (#:vecref x))
- (pylist-delete! v x))
- ((_ v (#:vecsub x ...))
- (pylist-subset! v x ... pylist-null))))
-
-(define-syntax set-x
- (syntax-rules ()
- ((_ v (a ... b) val)
- (set-x-2 (ref-x v a ...) b val))
- ((_ v #f p pa a val)
- (set-x p pa (fset-x v a val)))
- ((_ v pre p pa a val)
- (set-c v pre a val))
- ((_ v (a ... b) val)
- (set-x-2 (ref-x v a ...) b val))))
-
-(define-syntax set-c
- (syntax-rules ()
- ((_ v (a) (b) val)
- (set v a val))
- ((_ v () as val)
- (tr v (fset-x v as val)))
- ((_ v ((#:identifier a) . as) (b . bs) val)
- (set-c (ref v a) as bs val))))
-
-(define-syntax fset-x
- (syntax-rules ()
- ((_ v ((#:identifier x) ...) val)
- ((@ (oop pf-objects) fset-x) v (list x ...) val))))
-
-(define-syntax set-x-2
- (syntax-rules ()
- ((_ v (#:fastfkn-ref f id) val)
- (set v id val))
- ((_ v (#:fastid-ref f id) val)
- (set v id val))
- ((_ v (#:identifier x) val)
- (set v x val))
- ((_ v (#:vecref n) val)
- (pylist-set! v n val))
- ((_ v (#:array-ref n ...) val)
- (pylist-set! v (list n ...) val))
- ((_ v (#:vecsub x ...) val)
- (pylist-subset! v x ... val))))
-
-
-(define-syntax class-decor
- (syntax-rules ()
- ((_ () x) x)
- ((_ (f ... r) y)
- (class-decor (f ...) (r y)))))
-
-(define-syntax def-decor
- (syntax-rules ()
- ((_ () x) x)
- ((_ (f ... r) y)
- (def-decor (f ...) (r y)))))
-
-(define-syntax with-self
- (syntax-rules ()
- ((_ #f _ c)
- c)
- ((_ _ (s . b) c)
- (syntax-parameterize ((*self* (lambda (x) #'s))) c))))
-
-(define-syntax with-class
- (syntax-rules ()
- ((_ s c)
- (syntax-parameterize ((*class* (lambda (x) #'s))) c))))
-
-
-(define-syntax boolit
- (syntax-rules (@ and eq? equal? or not < <= > >=)
- ((_ (and x y)) (and (boolit x) (boolit y)))
- ((_ (or x y)) (or (boolit x) (boolit y)))
- ((_ (not x )) (not (boolit x)))
- ((_ (< x y)) (< x y))
- ((_ (<= x y)) (<= x y))
- ((_ (> x y)) (> x y))
- ((_ (>= x y)) (>= x y))
- ((_ (eq? x y)) (eq? x y))
- ((_ (equal? x y)) (equal? x y))
-
- ((_ ((@ (guile) eq? ) x y)) (eq? x y))
- ((_ ((@ (guile) equal?) x y)) (equal? x y))
- ((_ ((@ (guile) and ) x y)) (and (boolit x) (boolit y)))
- ((_ ((@ (guile) or ) x y)) (or (boolit x) (boolit y)))
- ((_ ((@ (guile) not ) x )) (not (boolit x)))
- ((_ ((@ (guile) < ) x y)) (< x y))
- ((_ ((@ (guile) <= ) x y)) (<= x y))
- ((_ ((@ (guile) > ) x y)) (> x y))
- ((_ ((@ (guile) >= ) x y)) (>= x y))
- ((_ #t) #t)
- ((_ #f) #f)
- ((_ x ) (bool x))))
-
-(define (export-all)
- (define mod (current-module))
- (if (module-defined? mod '__all__)
- (begin
- (module-export! mod
- (for ((x : (module-ref mod '__all__))) ((l '()))
- (let ((x (string->symbol (scm-str x))))
- (if (module-locally-bound? mod x)
- (cons x l)
- l))
- #:final l))
- (module-re-export! mod
- (for ((x : (module-ref mod '__all__))) ((l '()))
- (let ((x (string->symbol (scm-str x))))
- (if (not (module-locally-bound? mod x))
- (cons x l)
- l))
- #:final l)))))
-
-(define (pkkk x)
- (pk (syntax->datum x))
- x)
-
-(define (get-q-n x)
- (syntax-case x ()
- ((cons a b)
- (+ 1 (get-q-n #'b)))
- ((q ())
- 0)))
-
-(define (take-n n v)
- (let lp ((i 0) (v (reverse v)) (r '()))
- (if (< i n)
- (if (pair? v)
- (lp (+ i 1) (cdr v) (cons (car v) r))
- (raise (ValueError "wrone number of values in values")))
- (cons
- (reverse v)
- r))))
-
-(define-syntax qset!
- (lambda (x)
- (syntax-case x (@@ @)
- ((_ (cons (#:star x) y) v)
- (let ((n (get-q-n #'y)))
- #`(let* ((h.r (take-n #,n v))
- (h (car h.r))
- (r (cdr h.r)))
- (qset! x h)
- (qset0! y r))))
-
- ((_ (cons x y) v)
- (equal? (syntax->datum #'cons) '(@ (guile) cons))
- #'(let ((w (to-list v)))
- (qset! x (car w))
- (qset0! y (cdr w))))
-
- ((_ ((@ (guile) q) ()) v)
- (equal? (syntax->datum #'q) 'quote)
- #'(if (not (null? v))
- (raise (ValueError "too many values to unpack"))
- (values)))
-
- ((_ ((@@ u li) x) v)
- (equal? (syntax->datum #'li) 'to-pylist)
- #'(let ((w (to-list v)))
- (qset! x w)))
-
- ((_ (ref v a ...) w)
- #'(set-x v (a ...) w))
-
- ((_ x v)
- #'(set! x v)))))
-
-(define-syntax qset0!
- (lambda (x)
- (syntax-case x (@@ @)
- ((_ (cons (#:star x) y) v)
- (let ((n (get-q-n #'y)))
- #`(let* ((h.r (take-n v #,n))
- (h (car h.r))
- (r (cdr h.r)))
- (qset! x h)
- (qset0! y r))))
-
- ((_ (cons x y) v)
- (equal? (syntax->datum #'cons) '(@ (guile) cons))
- #'(let ((w v))
- (qset! x (car w))
- (qset0! y (cdr w))))
-
- ((_ ((@ (guile) q) ()) v)
- (equal? (syntax->datum #'q) 'quote)
- #'(if (not (null? v))
- (raise (ValueError "too many values to unpack"))
- (values)))
-
- ((_ ((@@ u li) x) v)
- (equal? (syntax->datum #'li) 'to-pylist)
- #'(let ((w (to-list v)))
- (qset! x w)))
-
- ((_ (ref v a ...) w)
- #'(set-x v (a ...) w))
-
- ((_ x v)
- #'(set! x v)))))
-
-(define-syntax define-
- (syntax-rules (cons quote)
- ((_ (cons x y) v)
- (let ((w v))
- (define- x (car w))
- (define- y (cdr w))))
- ((_ '() v) (values))
- ((_ x v)
- (define! 'x v))))
-
-(define-syntax pks
- (lambda (x)
- (pk (syntax->datum x))
- #f))
diff --git a/modules/language/python/completer.scm b/modules/language/python/completer.scm
deleted file mode 100644
index 73f96bd..0000000
--- a/modules/language/python/completer.scm
+++ /dev/null
@@ -1,48 +0,0 @@
-(define-module (language python completer)
- #:use-module (language python list)
- #:use-module (language python dir)
- #:use-module (system base language)
- #:use-module (ice-9 regex)
- #:export (complete-fkn))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define (old) (@@ (ice-9 readline) *readline-completion-function*))
-
-(define reg "(\\w+(\\.\\w+)*)\\.(\\w*)$")
-
-(define (complete-fkn eval)
- (let ((old (old))
- (strs '() )
- (pp "" )
- (regexp #f ))
- (letrec
- ((compl
- (lambda (text continue?)
- (if continue?
- (if (null? strs)
- #f
- (let ((str (car strs)))
- (set! strs (cdr strs))
- (if (string-match regexp str)
- (string-append pp "." str)
- (compl text #t))))
- (if (and (equal? (language-name (current-language)) 'python)
- (in "." text))
- (aif it (string-match reg text)
- (let* ((n (match:count it))
- (p (match:substring it 1))
- (t (match:substring it (- n 1)))
- (d (to-list (dir (eval p)))))
- (begin
- (set! strs d)
- (set! pp p)
- (set! regexp (string-append
- "^" (if (equal? t "")
- "[^_]"
- (regexp-quote t))))
- (compl text #t)))
- #f)
- (old text continue?))))))
- compl)))
-
diff --git a/modules/language/python/def.scm b/modules/language/python/def.scm
deleted file mode 100644
index 569023c..0000000
--- a/modules/language/python/def.scm
+++ /dev/null
@@ -1,168 +0,0 @@
-(define-module (language python def)
- #:use-module (oop pf-objects)
- #:use-module (language python for)
- #:use-module (language python list)
- #:use-module (language python exceptions)
- #:use-module (ice-9 match)
- #:use-module (srfi srfi-11)
- #:export (def lam py-apply))
-
-(define e (list 'error))
-(define-syntax-rule (aif it p x y) (let ((it p)) (if (not (eq? it e)) x y)))
-(define (fold lam s l)
- (if (pair? l)
- (lam (car l) (fold lam s (cdr l)))
- s))
-
-(define-syntax-rule (take-1 pww ww* kw s v)
- (if (not pww)
- (values ww*
- (aif it (hash-ref kw s e)
- (begin
- (hash-remove! kw s)
- it)
- v))
- (if (pair? ww*)
- (begin
- (hash-remove! kw s)
- (values (cdr ww*) (car ww*)))
- (values ww*
- (aif it (hash-ref kw s e)
- (begin
- (hash-remove! kw s)
- it)
- v)))))
-
-
-(define (get-akw l)
- (let lp ((l l) (args '()) (kw (make-hash-table)))
- (match l
- (((? keyword? k) v . l)
- (hash-set! kw k v)
- (lp l args kw))
- ((x . l)
- (lp l (cons x args) kw))
- (()
- (values (reverse args) kw)))))
-
-(define hset! hash-set!)
-
-(define (pytonize kw)
- (hash-fold
- (lambda (k v h)
- (hset! h (symbol->string (keyword->symbol k)) v)
- h)
- (make-hash-table)
- kw))
-
-(define-syntax lam
- (lambda (x)
- (define-syntax-rule (mk get-as (k v s) x y z w)
- (define get-as
- (lambda (a s)
- (syntax-case a (= * **)
- ((= k v) x)
- ((** k) y)
- ((* k) z)
- (k w)))))
-
- (mk get-as (k v s)
- s s s (cons #'k s))
- (mk get-kw (k v s)
- s (cons #'k s) s s )
- (mk get-ww (k v s)
- s s (cons #'k s) s )
- (mk get-kv (k v s)
- (cons (cons #'k #'v) s) s s s )
-
- (define (->kw x) (symbol->keyword (syntax->datum x)))
-
- (syntax-case x (*)
- ((_ (arg ...) code ...)
- (let* ((as (fold get-as '() #'(arg ...)))
- (kw (fold get-kw '() #'(arg ...)))
- (ww- (fold get-ww '() #'(arg ...)))
- (kv (fold get-kv '() #'(arg ...))))
- (if (and-map null? (list kw ww- kv))
- #`(object-method
- (lambda (#,@as . u12345678)
- (if (and (pair? u12345678)
- (not (keyword? (car u12345678))))
- (raise (ArgumentError "too many arguments to function")))
- (let () code ...)))
- (with-syntax ((kw (if (null? kw)
- (datum->syntax x (gensym "kw"))
- (car kw)))
- (ww (if (null? ww-)
- (datum->syntax x (gensym "ww"))
- (car ww-)))
- ((k ...) (map car kv))
- ((s ...) (map ->kw (map car kv)))
- ((v ...) (map cdr kv)))
- #`(object-method
- (lambda* (#,@as . l)
- (call-with-values (lambda () (get-akw l))
- (lambda (ww* kw)
- (let*-values (((ww* k) (take-1 #,(null? ww-) ww* kw s v))
- ...)
- (let ((ww ww*)
- (kw (pytonize kw)))
- (let () code ...))))))))))))))
-
-(define-syntax-rule (def (f . args) code ...) (define f (lam args code ...)))
-
-
-(define (no x)
- (and-map
- (lambda (x)
- (syntax-case x (* ** =)
- ((* _) #f)
- ((** _) #f)
- ((= a b) #f)
- (_ #t)))
- x))
-
-(define (mk-k x)
- (if (keyword? x)
- x
- (symbol->keyword
- (if (string? x)
- (string->symbol x)
- x))))
-
-(define-syntax m*
- (syntax-rules (* ** =)
- ((_ (= a b))
- (list (symbol->keyword 'a) b))
- ((_ (* a)) a)
- ((_ (** kw))
- (for ((k v : kw)) ((l '()))
- (cons* v (mk-k k) l)
- #:final (reverse l)))
- ((_ a) (list a))))
-
-(define-syntax py-apply
- (lambda (x)
- (syntax-case x ()
- ((_ f a ... (op x))
- (and (syntax-case #'op (*)
- (* #t)
- (_ #f))
- (and-map (lambda (q)
- (syntax-case q (* ** =)
- ((= _ _) #f)
- ((* _ ) #f)
- ((** _ ) #f)
- (_ #t))) #'(a ...)))
- #'(if (or (null? x) (pair? x))
- (apply f a ... x)
- (apply f a ... (to-list x))))
-
- ((_ f a ...)
- (if (no #'(a ...))
- #'(f a ...)
- #'(apply f (let lp ((l (list (m* a) ...)))
- (if (pair? l)
- (append (to-list (car l)) (lp (cdr l)))
- '()))))))))
-
diff --git a/modules/language/python/dict.scm b/modules/language/python/dict.scm
deleted file mode 100644
index 9eb698d..0000000
--- a/modules/language/python/dict.scm
+++ /dev/null
@@ -1,795 +0,0 @@
-(define-module (language python dict)
- #:use-module (language python list)
- #:use-module (language python try)
- #:use-module (language python hash)
- #:use-module (language python yield)
- #:use-module (language python def)
- #:use-module (language python for)
- #:use-module (language python bool)
- #:use-module (language python exceptions)
- #:use-module (language python persist)
- #:use-module (ice-9 match)
- #:use-module (ice-9 control)
- #:use-module (oop goops)
- #:use-module (oop pf-objects)
- #:re-export (py-get)
- #:export (make-py-hashtable <py-hashtable>
- py-copy py-fromkeys py-has_key py-items py-iteritems
- py-iterkeys py-itervalues py-keys py-values
- py-popitem py-setdefault py-update py-clear
- py-hash-ref dict pyhash-listing
- weak-key-dict weak-value-dict
- py-hash-ref py-hash-set! dictNs dictRNs
- make-py-weak-key-hashtable
- make-py-weak-value-hashtable
- ))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define (h x n) (modulo (py-hash x) n))
-(define (py-assoc k l)
- (if (pair? l)
- (if (equal? (caar l) k)
- (car l)
- (py-assoc k (cdr l)))
- #f))
-
-(define (py-hash-ref . l)
- (apply hashx-ref h py-assoc l))
-(define (py-hash-set! . l)
- (apply hashx-set! h py-assoc l))
-(define (py-hash-remove! . l)
- (apply hashx-remove! h py-assoc l))
-
-(set! (@@ (language python def) hset!) py-hash-set!)
-
-(define H (hash 1333674836 complexity))
-
-(define-class <py-hashtable> () t hash n)
-
-(name-object <py-hashtable>)
-
-(cpit <py-hashtable>
- (o (lambda (o h n a)
- (slot-set! o 'hash h)
- (slot-set! o 'n n)
- (slot-set! o 't
- (let ((t (make-hash-table)))
- (let lp ((a a))
- (if (pair? a)
- (begin
- (py-hash-set! t (caar a) (cdar a))
- (lp (cdr a)))))
- t)))
- (let ((t (slot-ref o 't)))
- (list
- (slot-ref o 'hash)
- (slot-ref o 'n)
- (hash-fold (lambda (k v s) (cons (cons k v) s)) '() t)))))
-
-(define (make-py-hashtable)
- (let* ((o (make <py-hashtable>))
- (t (make-hash-table))
- (h H))
- (slot-set! o 't t)
- (slot-set! o 'hash h)
- (slot-set! o 'n 0)
- o))
-
-(define (make-py-weak-key-hashtable)
- (let* ((o (make <py-hashtable>))
- (t (make-weak-key-hash-table))
- (h H))
- (slot-set! o 't t)
- (slot-set! o 'hash h)
- (slot-set! o 'n 0)
- o))
-
-(define (make-py-weak-value-hashtable)
- (let* ((o (make <py-hashtable>))
- (t (make-weak-value-hash-table))
- (h H))
- (slot-set! o 't t)
- (slot-set! o 'hash h)
- (slot-set! o 'n 0)
- o))
-
-(define miss (list 'miss))
-(define-method (pylist-ref (o <hashtable>) x)
- (let ((r (py-hash-ref o x miss)))
- (if (eq? r miss)
- (raise KeyError x)
- r)))
-
-(define-method (pylist-ref (o <py-hashtable>) x)
- (let ((r (py-hash-ref (slot-ref o 't) x miss)))
- (if (eq? r miss)
- (aif it (ref o '__missing__)
- (it x)
- (raise KeyError x))
- r)))
-
-(define-method (pylist-delete! (o <hashtable>) k)
- (pyhash-rem! o k))
-
-(define-method (pylist-delete! (o <py-hashtable>) k)
- (pyhash-rem! o k))
-
-(define-method (py-hash (o <hashtable>))
- (hash-fold
- (lambda (k v s)
- (logxor
- (xy (py-hash k) (py-hash v))
- s))
- 0 o))
-
-(define-method (py-hash (o <py-hashtable>))
- (slot-ref o 'hash))
-
-(define-method (len (o <hashtable>))
- (hash-fold (lambda (k v s) (+ s 1)) 0 o))
-
-(define-method (len (o <py-hashtable>))
- (slot-ref o 'n))
-
-(define-method (pylist-pop! (o <hashtable>) k . l)
- (match l
- ((v)
- (let ((ret (py-hash-ref o k v)))
- (py-hash-remove! o k)
- ret))
- (()
- (let ((ret (hash-ref o k miss)))
- (if (eq? ret miss)
- (raise KeyError k)
- (begin
- (hash-remove! o k)
- ret))))))
-
-(define-method (pyhash-rem! (o <hashtable>) k)
- (py-hash-remove! o k)
- (values))
-
-(define-method (pyhash-rem! (o <py-hashtable>) k)
- (let ((t (slot-ref o 't))
- (n (slot-ref o 'n))
- (h (slot-ref o 'hash)))
- (let ((ret (py-hash-ref t k miss)))
- (if (eq? ret miss)
- (values)
- (begin
- (py-hash-remove! t k)
- (slot-set! o 'n (- n 1))
- (slot-set! o 'hash (logxor h (xy (py-hash k) (py-hash ret))))
- (values))))))
-
-(define-method (pylist-pop! (o <py-hashtable>) k . l)
- (let ((t (slot-ref o 't)))
- (match l
- ((v)
- (let ((ret (py-hash-ref t k miss)))
- (if (eq? ret miss)
- v
- (begin
- (pyhash-rem! o k)
- ret))))
- (()
- (let ((ret (hash-ref o k miss)))
- (if (eq? ret miss)
- (raise KeyError k)
- (begin
- (pyhash-rem! o k)
- ret)))))))
-
-(define-method (pylist-set! (o <hashtable>) key val)
- (py-hash-set! o key val)
- (values))
-
-(define-method (pylist-set! (o <py-hashtable>) key val)
- (let ((t (slot-ref o 't))
- (n (slot-ref o 'n))
- (h (slot-ref o 'hash)))
- (let ((ret (py-hash-ref t key miss)))
- (if (eq? ret miss)
- (begin
- (py-hash-set! t key val)
- (slot-set! o 'n (+ n 1))
- (slot-set! o 'hash (logxor (xy (py-hash key) (py-hash val)) h)))
- (begin
- (py-hash-set! t key val)
- (slot-set! o 'hash
- (logxor (xy (py-hash key) (py-hash val))
- (logxor
- (xy (py-hash key) (py-hash ret))
- h)))))))
- (values))
-
-(define-syntax define-py
- (syntax-rules ()
- ((_ (nm n o l ...) (class code ...) ...)
- (begin
- (define-method (nm (o class) l ...) code ...)
- ...
- (define-method (nm (o <p>) . v)
- (aif it (ref o 'n)
- (apply it v)
- (next-method)))))
- ((_ (nm n o l ... . u) (class code ...) ...)
- (begin
- (define-method (nm (o class) l ... . u) code ...)
- ...
- (define-method (nm (o <p>) . v)
- (aif it (ref o 'n)
- (apply it v)
- (next-method)))))))
-
-
-(define-method (bool (o <hashtable>))
- (for ((k v : o)) ()
- (break o)
- #:final #f))
-
-(define-method (bool (o <py-hashtable>))
- (if (= (len o) 0)
- #f
- o))
-
-(define-py (py-copy copy o)
- (<hashtable>
- (hash-fold
- (lambda (k v h)
- (py-hash-set! h k v)
- h)
- (make-hash-table)
- o))
-
- (<py-hashtable>
- (let ((r (make <py-hashtable>)))
- (slot-set! r 'hash (slot-ref o 'hash))
- (slot-set! r 'n (slot-ref o 'n))
- (slot-set! r 't (py-copy (slot-ref o 't)))
- r)))
-
-(define-py (py-fromkeys fromkeys o . l)
- (<hashtable>
- (let ((newval (match l
- (() None)
- ((v) v))))
- (hash-fold
- (lambda (k v h)
- (py-hash-set! h k newval)
- h)
- (make-hash-table)
- o)))
-
- (<py-hashtable>
- (let ((newval (match l
- (() None)
- ((v) v))))
- (hash-fold
- (lambda (k v h)
- (pylist-set! h k newval)
- h)
- (make-py-hashtable)
- (slot-ref o 't)))))
-
-(define-py (py-get get o k . l)
- (<hashtable>
- (let ((elseval (match l
- (() None)
- ((v) v))))
- (let ((ret (py-hash-ref o k miss)))
- (if (eq? ret miss)
- elseval
- ret))))
-
- (<py-hashtable>
- (let ((elseval (match l
- (() None)
- ((v) v))))
- (let ((ret (py-hash-ref (slot-ref o 't) k miss)))
- (if (eq? ret miss)
- elseval
- ret)))))
-
-(define-py (py-has_key has_key o k . l)
- (<hashtable>
- (let ((elseval (match l
- (() None)
- ((v) v))))
- (let ((ret (py-hash-ref o k miss)))
- (if (eq? ret miss)
- #f
- #t))))
-
- (<py-hashtable>
- (let ((elseval (match l
- (() None)
- ((v) v))))
- (let ((ret (py-hash-ref (slot-ref o 't) k miss)))
- (if (eq? ret miss)
- #f
- #t)))))
-
-(define-py (py-items items o)
- (<module>
- (to-pylist
- (let ((l '()))
- (module-for-each
- (lambda (k v)
- (set! l (cons (list (symbol->string k) (variable-ref v)) l)))
- o)
- l)))
-
- (<hashtable>
- (to-pylist
- (hash-fold
- (lambda (k v l)
- (cons (list k v) l))
- '() o)))
-
- (<py-hashtable>
- (to-pylist
- (hash-fold
- (lambda (k v l)
- (cons (list k v) l))
- '() (slot-ref o 't)))))
-
-(define-generator (hash-item-gen yield hash-table)
- (let lp ((l (hash-fold cons* '() hash-table)))
- (match l
- ((k v . l)
- (yield k v)
- (lp l))
- (()
- #t))))
-
-(define-generator (hash-values-gen yield hash-table)
- (let lp ((l (hash-fold cons* '() hash-table)))
- (match l
- ((k v . l)
- (yield v)
- (lp l))
- (()
- #t))))
-
-(define-generator (hash-keys-gen yield hash-table)
- (let lp ((l (hash-fold cons* '() hash-table)))
- (match l
- ((k v . l)
- (yield k)
- (lp l))
- (()
- #t))))
-
-(define-py (py-iteritems iteritems o)
- (<hashtable>
- (hash-item-gen o))
-
- (<py-hashtable>
- (hash-item-gen (slot-ref o 't))))
-
-(define-py (py-iterkeys iterkeys o)
- (<hashtable>
- (hash-keys-gen o))
-
- (<py-hashtable>
- (hash-keys-gen (slot-ref o 't))))
-
-(define-py (py-itervalues itervalues o)
- (<hashtable>
- (hash-values-gen o))
-
- (<py-hashtable>
- (hash-values-gen (slot-ref o 't))))
-
-(define-py (py-keys keys o)
- (<hashtable>
- (to-pylist
- (hash-fold
- (lambda (k v l) (cons k l))
- '()
- o)))
-
- (<py-hashtable>
- (to-pylist
- (hash-fold
- (lambda (k v l) (cons k l))
- '()
- (slot-ref o 't)))))
-
-(define-py (py-values values o)
- (<hashtable>
- (to-pylist
- (hash-fold
- (lambda (k v l) (cons v l))
- '()
- o)))
-
- (<py-hashtable>
- (to-pylist
- (hash-fold
- (lambda (k v l) (cons v l))
- '()
- (slot-ref o 't)))))
-
-(define-py (py-popitem popitem o)
- (<hashtable>
- (let ((k.v (let/ec ret
- (hash-for-each
- (lambda (k v)
- (ret (cons k v)))
- o)
- #f)))
- (if k.v
- (begin (pyhash-rem! o (car k.v)) k.v)
- (raise KeyError "No elements in hash"))))
-
- (<py-hashtable>
- (let ((k.v (let/ec ret
- (hash-for-each
- (lambda (k v)
- (ret (cons k v)))
- (slot-ref o 't))
- #f)))
- (if k.v
- (begin (pyhash-rem! o (car k.v)) k.v)
- (raise KeyError "No elements in hash")))))
-
-(define-py (py-setdefault setdefault o k . l)
- (<hashtable>
- (pylist-set! o k (apply py-get o k l))
- (apply py-get o k l))
-
- (<py-hashtable>
- (pylist-set! o k (apply py-get o k l))
- (apply py-get o k l)))
-
-(define update
- (lam (o (* L) (** K))
- (match L
- ((L)
- (for ((k v : L)) ()
- (pylist-set! o k v)))
- (_ #f))
- (for ((k v : K)) ()
- (pylist-set! o k v))))
-
-(define-py (py-update update o . l)
- (<hashtable>
- (apply update o l))
- (<py-hashtable>
- (apply update o l)))
-
-(define-py (py-clear clear o)
- (<hashtable>
- (hash-clear! o))
- (<py-hashtable>
- (let ((t (slot-ref o 't)))
- (hash-clear! t)
- (slot-set! o 'n 0)
- (slot-set! o 'hash H)
- (values))))
-
-#|
-'viewitems'
-'viewkeys'
-'viewvalues'
-|#
-
-(define-syntax-rule (top <)
- (begin
- (define-method (< (o1 <hashtable>) (o2 <hashtable>))
- (< (len o1) (len o2)))
- (define-method (< (o1 <hashtable>) (o2 <py-hashtable>))
- (< (len o1) (len o2)))
- (define-method (< (o1 <py-hashtable>) (o2 <hashtable>))
- (< (len o1) (len o2)))
- (define-method (< (o1 <py-hashtable>) (o2 <py-hashtable>))
- (< (len o1) (len o2)))))
-
-(top <)
-(top >)
-(top <=)
-(top >=)
-
-(define (fold f s l)
- (if (pair? l)
- (f (car l) (fold f s (cdr l)))
- s))
-
-(define-method (write (o <py-hashtable>) . l)
- (define port (match l (() #f) ((p) p)))
- (define li (hash-fold cons* '() (slot-ref o 't)))
- (if (null? li)
- (format port "{}")
- (format port "{~a: ~a~{, ~a: ~a~}}" (car li) (cadr li) (cddr li))))
-
-(define-method (py-equal? (o1 <py-hashtable>) (o2 <py-hashtable>))
- (and
- (equal? (slot-ref o1 'n) (slot-ref o2 'n))
- (equal? (slot-ref o1 'hash) (slot-ref o2 'hash))
- (e? (slot-ref o1 't) (slot-ref o2 't))))
-
-(define (e? t1 t2)
- (let/ec ret
- (hash-fold
- (lambda (k v s)
- (let ((r (py-hash-ref t2 k miss)))
- (if (eq? r miss)
- (ret #f)
- (if (equal? r v)
- #t
- (ret #f)))))
- #t
- t1)))
-
-
-(define-class <hashiter> () l)
-(name-object <hashiter>)
-(cpit <hashiter> (o (lambda (o l) (slot-set! o 'l l))
- (list (slot-ref o 'l))))
-
-
-(define-method (wrap-in (t <hashtable>))
- (let ((o (make <hashiter>)))
- (slot-set! o 'l (to-list (py-items t)))
- o))
-
-(define-method (wrap-in (t <py-hashtable>))
- (let ((o (make <hashiter>)))
- (slot-set! o 'l (to-list (py-items t)))
- o))
-
-(define-method (next (o <hashiter>))
- (let ((l (slot-ref o 'l)))
- (if (pair? l)
- (let ((k (caar l))
- (v (cadar l))
- (l (cdr l)))
- (slot-set! o 'l l)
- (values k v))
- (throw StopIteration))))
-
-
-(define-method (in key (o <hashtable>))
- (py-has_key o key))
-
-(define-method (in key (o <py-hashtable>))
- (py-has_key o key))
-
-
-(define <dict> `(,<py-hashtable> . _))
-(define <in> `(,<top> ,<py-hashtable>))
-(define (resolve a b) (object-method (resolve-method-g a b)))
-(define dict-set! (resolve pylist-set! <dict>))
-(define dict-ref (resolve pylist-ref <dict>))
-(define dict-del! (resolve pylist-delete! <dict>))
-(define dict-pop! (resolve pylist-pop! <dict>))
-(define dict-clear! (resolve py-clear <dict>))
-(define dict-get (resolve py-get <dict>))
-(define dict-len (resolve len <dict>))
-(define dict-bool (resolve bool <dict>))
-(define dict-in (resolve in <in> ))
-(define dict-items (resolve py-items <dict>))
-
-(define-python-class dict (<py> <py-hashtable>)
- (define __getitem__ dict-ref)
- (define __setitem__
- (lambda (self key val)
- (dict-set! self key val)))
- (define __delitem__ dict-del!)
- (define pop dict-pop!)
- (define clear dict-clear!)
- (define get dict-get)
- (define __len__ dict-len)
- (define __bool__ dict-bool)
- (define items dict-items)
- (define __iter__ (lambda (self)
- (wrap-in (slot-ref self 't))))
- (define __contains__
- (lambda (self x) (dict-in x self)))
- (define __format___ (lambda x #f))
- (define __setattr__ (@@ (oop pf-objects) __setattr__))
- (define __getattribute__ (@@ (oop pf-objects) __getattribute__))
-
-
- (define __init__
- (letrec ((__init__
- (case-lambda
- ((self)
- (let ((r (make-hash-table)))
- (slot-set! self 't r)
- (slot-set! self 'hash H)
- (slot-set! self 'n 0)))
- ((self x)
- (__init__ self)
- (catch #t
- (lambda ()
- (for ((k v : x)) ()
- (pylist-set! self k v)))
- (lambda y
- (for ((k : x)) ()
- (if (pair? k)
- (pylist-set! self (car k) (cdr k))
- (raise TypeError
- "wrong type of argument to dict" k))))))
- ((self . l)
- (__init__
- self
- (let lp ((l l))
- (match l
- ((x y . l)
- (cons (cons (symbol->string
- (keyword->symbol x))
- y) (lp l)))
- (() '())
- (_ (raise
- (ValueError
- "init argument to dict malformed expected key value list"))))))))))
-
- __init__)))
-
-(define (renorm k)
- (if (symbol? k)
- k
- (string->symbol k)))
-
-(define (norm k)
- (if (symbol? k)
- (symbol->string k)
- k))
-
-(define fail (list 'fail))
-
-(define-syntax-rule (mkwrap dictNs norm renorm)
-(define-python-class dictNs ()
- (define __getitem__
- (lambda (self k)
- (pylist-ref (ref self '_dict) (norm k))))
-
- (define __setitem__
- (lambda (self k v)
- (pylist-set! (ref self '_dict) (norm k) v)))
-
- (define __iter__
- (lambda (self)
- ((make-generator ()
- (lambda (yield)
- (for ((k v : (ref self '_dict))) ()
- (yield (renorm k) v)))))))
-
- (define pop
- (lambda (self k . l)
- (apply pylist-pop! (ref self '_dict) (norm k) l)))
-
- (define clear
- (lambda (self)
- (py-clear (ref self '_dict))))
-
- (define get
- (lambda (self key . l)
- (apply py-get (ref self '_dict) (norm key) l)))
-
- (define __len__
- (lambda (self)
- (len (ref self '_dict))))
-
- (define __bool__
- (lambda (self)
- (bool (ref self '_dict))))
-
- (define __contains__
- (lambda (self x)
- (in (norm x) (ref self '_dict))))
-
- (define items
- (lambda (self)
- (for ((k v : (ref self '_dict))) ((l '()))
- (cons (list (renorm k) v) l)
- #:final (reverse l))))
-
- (define keys
- (lambda (self)
- (for ((k v : self)) ((l '()))
- (cons (renorm k) l)
- #:final
- l)))
-
- (define values
- (lambda (self)
- (for ((k v : self)) ((l '()))
- (cons v l)
- #:final
- l)))
-
- (define __repr__
- (lambda (self)
- (for ((k v : (ref self '_dict))) ((l '()))
- (cons (format #f "~a:~a" k v) l)
- #:final
- (aif it (ref (ref self '_dict) '__name__)
- (format #f "Ns-~a: ~a" it (reverse l))
- (format #f "Ns: ~a" (reverse l))))))
-
- (define __str__ __repr__)
-
- (define __getattr__
- (lambda (self key)
- (let ((r (ref (ref self '_dict) key fail)))
- (if (eq? r fail)
- (raise (AttributeError key))
- r))))
-
- (define __init__
- (lambda (self d) (set self '_dict d)))))
-
-(mkwrap dictNs norm renorm)
-(mkwrap dictRNs renorm norm)
-
-(set! (@@ (oop pf-objects) dictNs) dictNs)
-(set! (@@ (oop pf-objects) dictRNs) dictRNs)
-
-(define-python-class weak-key-dict (<py> <py-hashtable>)
- (define __init__
- (letrec ((__init__
- (case-lambda
- ((self)
- (let ((r (make-hash-table)))
- (slot-set! self 't r)
- (slot-set! self 'hash H)
- (slot-set! self 'n 0)))
-
- ((self x)
- (__init__ self)
- (if (is-a? x <py-hashtable>)
- (hash-for-each
- (lambda (k v)
- (pylist-set! self k v))
- (slot-ref x 't)))))))
- __init__)))
-
-(define-python-class weak-value-dict (<py> <py-hashtable>)
- (define __init__
- (letrec ((__init__
- (case-lambda
- ((self)
- (let ((r (make-hash-table)))
- (slot-set! self 't r)
- (slot-set! self 'hash H)
- (slot-set! self 'n 0)))
-
- ((self x)
- (__init__ self)
- (if (is-a? x <py-hashtable>)
- (hash-for-each
- (lambda (k v)
- (pylist-set! self k v))
- (slot-ref x 't)))))))
- __init__)))
-
-(define (pyhash-listing)
- (let ((l (to-pylist
- (map symbol->string
- '(__class__ __cmp__ __contains__ __delattr__
- __delitem__ __doc__ __eq__ __format__
- __ge__ __getattribute__ __getitem__
- __gt__ __hash__ __init__ __iter__
- __le__ __len__ __lt__ __ne__ __new__
- __reduce__ __reduce_ex__ __repr__
- __setattr__ __setitem__ __sizeof__
- __str__ __subclasshook__
- clear copy fromkeys get has_key
- items iteritems iterkeys itervalues
- keys pop popitem setdefault update
- values viewitems viewkeys viewvalues)))))
- (pylist-sort! l)
- l))
-
-(set! (@@ (oop pf-objects) hash-for-each*)
- (lambda (f dict)
- (for ((k v : dict)) ()
- (f k v))))
-
-(define-method (py-class (o <hashtable>)) dict)
-(define-method (py-class (o <py-hashtable>)) dict)
diff --git a/modules/language/python/dir.scm b/modules/language/python/dir.scm
deleted file mode 100644
index 0791666..0000000
--- a/modules/language/python/dir.scm
+++ /dev/null
@@ -1,180 +0,0 @@
-(define-module (language python dir)
- #:use-module (language python list)
- #:use-module (language python for)
- #:use-module (language python dict)
- #:use-module (language python string)
- #:use-module (language python bytes)
- #:use-module (language python number)
- #:use-module (language python bytes)
- #:use-module (oop goops)
- #:use-module (ice-9 vlist)
- #:use-module (oop pf-objects)
- #:export (dir))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define in-p (make-fluid #f))
-(define-method (dir x) (py-list))
-(define (cont l1 l2)
- (let ((h (make-hash-table))
- (l (py-list)))
- (for ((x : l1)) ()
- (hash-set! h x #t))
- (for ((x : l2)) ()
- (hash-set! h x #t))
- (for ((k v : h)) ()
- (pylist-append! l k))
- (pylist-sort! l)
-
- l))
-
-(define (p x) (if (symbol? x) (symbol->string x) x))
-(define (chash-for-each t c)
- (let ((h (slot-ref c 'h)))
- (if (is-a? c <pf>)
- (vhash-fold
- (lambda (k v s)
- (hash-set! t (p k) #t))
- #f h)
- (hash-for-each
- (lambda (k v)
- (hash-set! t (p k) #t))
- h))))
-
-(define (find-in o h c)
- (aif it (and o (find-in-class c '__dir__ #f))
- (for ((k : (it o))) ()
- (hash-set! h (p k) #t))
- (chash-for-each h c)))
-
-(define (find-in-mro o h l)
- (let lp ((l l))
- (if (pair? l)
- (begin
- (find-in o h (car l))
- (lp (cdr l))))))
-
-
-(define-method (dir (o <p>))
- (if (fluid-ref in-p)
- (next-method)
- (with-fluids ((in-p #t))
- (cont
- (next-method)
- (let ((h (make-hash-table)))
- (find-in-mro #f h (find-in-class o '__mro__ (list o)))
- (aif cl (find-in-class o '__class__ #f)
- (find-in-mro o h (find-in-class cl '__mro__ (list cl)))
- #f)
- (let ((l (py-list)))
- (hash-for-each
- (lambda (k v)
- (pylist-append! l k))
- h)
- (pylist-sort! l)
- l))))))
-
-(define-method (dir (o <py-list>))
- (cont
- (next-method)
- (let ((l1 (pylist-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <py-hashtable>))
- (cont
- (next-method)
- (let ((l1 (pyhash-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <py-string>))
- (cont
- (next-method)
- (let ((l1 (pystring-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <py-int>))
- (cont
- (next-method)
- (let ((l1 (pyint-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <py-float>))
- (cont
- (next-method)
- (let ((l1 (pyfloat-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <py-complex>))
- (cont
- (next-method)
- (let ((l1 (pycomplex-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <py-bytes>))
- (cont
- (next-method)
- (let ((l1 (pybytes-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <py-bytearray>))
- (cont
- (next-method)
- (let ((l1 (pybytesarray-listing)))
- (if (is-a? o <p>)
- (let* ((l2 (next-method))
- (l (+ l1 l2)))
- (pylist-sort! l)
- l)
- l1))))
-
-(define-method (dir (o <hashtable> )) (pyhash-listing))
-(define-method (dir (o <string> )) (pystring-listing))
-(define-method (dir (o <complex> )) (pycomplex-listing))
-(define-method (dir (o <real> )) (pyfloat-listing))
-(define-method (dir (o <integer> )) (pyint-listing))
-(define-method (dir (o <bytevector> )) (pybytes-listing))
-(define-method (dir)
- (let ((l '()))
- (module-for-each (lambda (m . u)
- (set! l (cons (symbol->string m) l)))
- (current-module))
- (let ((ret (to-pylist l)))
- (pylist-sort! ret)
- ret)))
-
-
diff --git a/modules/language/python/eval.scm b/modules/language/python/eval.scm
deleted file mode 100644
index 1cd92ad..0000000
--- a/modules/language/python/eval.scm
+++ /dev/null
@@ -1,170 +0,0 @@
-(define-module (language python eval)
- #:use-module (parser stis-parser lang python3-parser)
- #:use-module (language python exceptions)
- #:use-module (language python module)
- #:use-module (language python try)
- #:use-module (language python list)
- #:use-module (language python for)
- #:use-module (language python dict)
- #:use-module (oop pf-objects)
- #:use-module ((ice-9 local-eval) #:select ((the-environment . locals)))
- #:re-export (locals)
- #:replace (eval)
- #:export (local-eval local-compile globals compile exec))
-
-(define seval (@ (guile) eval))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-syntax-rule (L x) (@@ (ice-9 local-eval) x))
-
-(define-syntax globals
- (lambda (x)
- (syntax-case x ()
- ((g)
- #'(M ((L env-module) (locals g)))))))
-
-(define-syntax-rule (call- self item a ...)
- (let ((class (ref self '_module)))
- ((rawref class item) class a ...)))
-
-(define-syntax-rule (apply- self item a ...)
- (let ((class (ref self '_module)))
- (apply (rawref class item) class a ...)))
-
-(define-syntax-rule (ref- self item)
- (let ((class (ref self '_module)))
- (rawref class item)))
-
-
-(define-python-class GlobalModuleWrap (dict)
- (define __init__
- (lambda (self module)
- (set self '_module module)))
-
- (define __getitem__
- (lambda (self key)
- (if (string? key) (set! key (string->symbol key)))
- (call- self '__global_getitem__ key)))
-
- (define get
- (lambda (self key . es)
- (if (string? key) (set! key (string->symbol key)))
- (apply- self '__global_get__ key es)))
-
- (define __setitem__
- (lambda (self key val)
- (if (string? key) (set! key (string->symbol key)))
- (call- self '__global_setitem__ key val)))
-
- (define __iter__
- (lambda (self)
- (call- self '__global_iter__)))
-
- (define values
- (lambda (self)
- (for ((k v : (__iter__ self))) ((l '()))
- (cons v l)
- #:final l)))
-
- (define keys
- (lambda (self)
- (for ((k v : (__iter__ self))) ((l '()))
- (cons k l)
- #:final l)))
-
- (define __contains__
- (lambda (self key)
- (if (string? key) (set! key (string->symbol key)))
- (for ((k v : (__iter__ self))) ()
- (if (eq? k key)
- (break #t))
- #:final
- #f)))
-
- (define items __iter__)
-
- (define __repr__
- (lambda (self)
- (format #f "globals(~a)" (ref- self '__name__)))))
-
-
-
-(define MM (list 'error))
-(define (M mod)
- (set! mod (module-name mod))
- (if (and (> (length mod) 3)
- (eq? (car mod) 'language)
- (eq? (cadr mod) 'python)
- (eq? (caddr mod) 'module))
- (set! mod (Module (reverse mod)
- (reverse (cdddr mod))))
- (set! mod (Module (reverse mod) (reverse mod))))
-
- (GlobalModuleWrap mod))
-
-
-(define* (local-eval x locals globals)
- "Evaluate the expression @var{x} within the local environment @var{local} and
-global environment @var{global}."
- (if locals
- (if globals
- (apply (seval ((L local-wrap) x locals) globals)
- ((L env-boxes) locals))
- (apply (seval ((L local-wrap) x locals) ((L env-module) locals))
- ((L env-boxes) locals)))
- (seval x (current-module))))
-
-(define* (local-compile x locals globals #:key (opts '()))
- "Compile the expression @var{x} within the local environment @var{local} and
-global environment @var{global}."
- (if locals
- (if globals
- (apply ((@ (system base compile) compile)
- ((L local-wrap) x locals) #:env globals
- #:from 'scheme #:opts opts)
- ((L env-boxes) locals))
- (apply ((@ (system base compile) compile) ((L local-wrap) x locals)
- #:env ((L env-module) locals)
- #:from 'scheme #:opts opts)
- ((L env-boxes) locals)))
- ((@ (system base compile) compile) x #:env (current-module)
- #:from 'scheme #:opts opts)))
-
-(define-syntax eval
- (lambda (x)
- (syntax-case x ()
- ((eval x)
- #'(eval0 x (locals eval)))
- ((eval x . l)
- #'(eval0 x . l)))))
-
-(define* (eval0 x #:optional (locals #f) (globals #f))
- (cond
- ((string? x)
- (aif xp (p x)
- (aif cp (comp xp)
- (local-eval cp locals globals)
- (raise SyntaxError))
- (raise SyntaxError)))
- ((pair? x)
- (local-eval x locals globals))))
-
-(define* (compile x filename mode
- #:optional (flags 0) (dont_inherit #f) (optiomize -1))
- (aif xp (p x)
- (aif cp (comp xp)
- cp
- (raise SyntaxError))
- (raise SyntaxError)))
-
-(define-syntax exec
- (lambda (x)
- (syntax-case x ()
- ((exec x)
- #'(eval0 x (locals exec)))
- ((exec x . l)
- #'(exec0 x . l)))))
-
-(define* (exec0 x #:optional (locals #f) (globals #f))
- (local-eval x locals globals))
diff --git a/modules/language/python/exceptions.scm b/modules/language/python/exceptions.scm
deleted file mode 100644
index fd1f0e1..0000000
--- a/modules/language/python/exceptions.scm
+++ /dev/null
@@ -1,173 +0,0 @@
-(define-module (language python exceptions)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:export (StopIteration GeneratorExit RuntimeError TabError
- Exception ValueError TypeError
- IndexError KeyError AttributeError ArgumentError
- SyntaxError SystemException
- OSError ProcessLookupError PermissionError
- None NotImplemented NotImplementedError
- AssertionError ImportError
- ModuleNotFoundError BlockingIOError
- InterruptedError BaseException
- ZeroDivisionError PendingDeprecationWarning
- OverflowError RecursionError RuntimeWarning
- Warning DeprecationWarning BytesWarning
- ResourceWarning UserWarning UnicodeTranslateError
- UnicodeDecodeError LookupError IndentationError
- KeyboardInterrupt MemoryError NameError
- EOFError UnicodeError UnicodeEncodeError
- FileExistsError FileNotFoundError IsADirectoryError
- EnvironmentError ConnectionError NotADirectoryError
- ConnectionResetError ChildProcessError TimeOutError
- BrokenPipeError ConnectionAbortedError SystemExit
- ConnectionRefusedError ArithmeticError
- FutureWarning))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-python-class Exception ()
- (define __init__
- (case-lambda
- ((self)
- (values))
- ((self val . l)
- (set self 'value val))))
-
- (define __repr__
- (lambda (self)
- (aif it (rawref self 'value #f)
- (format #f "~a:~a"
- (rawref self '__name__) it)
- (format #f "~a"
- (rawref self '__name__))))))
-
-(define-python-class SystemExit ()
- (define __init__
- (case-lambda
- ((self)
- (values))
- ((self val . l)
- (set self 'value val))))
-
- (define __repr__
- (lambda (self)
- (aif it (rawref self 'value #f)
- (format #f "~a:~a"
- (rawref self '__name__) it)
- (format #f "~a"
- (rawref self '__name__))))))
-
-(define-python-class Warning ()
- (define __init__
- (case-lambda
- ((self)
- (values))
- ((self val . l)
- (set self 'value val))))
-
- (define __repr__
- (lambda (self)
- (aif it (rawref self 'value #f)
- (format #f "~a:~a"
- (rawref self '__name__) it)
- (format #f "~a"
- (rawref self '__name__))))))
-
-(define-syntax define-er
- (syntax-rules ()
- ((_ nm k)
- (define-python-class nm (Exception)))
- ((_ nm w k)
- (define-python-class nm w))))
-
-(define-syntax define-er2
- (syntax-rules ()
- ((_ nm k)
- (define-python-class nm (BaseException)))
- ((_ nm w k)
- (define-python-class nm w))))
-
-(define StopIteration 'StopIteration)
-(define GeneratorExit 'GeneratorExit)
-(define-er EnvironmentError 'EnvironmentError)
-
-(define-er EOFError 'EOFError)
-(define-er MemoryError 'MemoryError)
-(define-er NameError 'NameError)
-
-(define-er ValueError 'ValueError)
-(define-python-class UnicodeError (ValueError))
-(define-python-class UnicodeDecodeError (UnicodeError))
-(define-python-class UnicodeEncodeError (UnicodeError))
-(define-python-class UnicodeTranslateError (UnicodeError))
-
-(define-er LookupError 'LookupError)
- (define-python-class IndexError (LookupError))
- (define-python-class KeyError (LookupError))
-
-(define-er ArithmeticError 'OverflowError)
- (define-python-class OverflowError (ArithmeticError))
- (define-python-class ZeroDivisionError (ArithmeticError))
-
-
-(define-er KeyboardInterrupt 'KeyboardInterrupt)
-(define-er BaseException 'BaseException)
-(define-er SystemException 'SystemException)
-(define-er RuntimeError 'RuntimeError)
- (define-python-class NotImplementedError (RuntimeError))
- (define-python-class RecursionError (RuntimeError))
-
-
-(define-er ArgumentError 'IndexError)
-
-(define-er OSError 'OSError)
- (define-python-class BlockingIOError (OSError))
- (define-python-class ChildProcessError (OSError))
- (define-python-class ConnectionError (OSError))
- (define-python-class BrokenPipeError (ConnectionError))
- (define-python-class ConnectionAbortedError (ConnectionError))
- (define-python-class ConnectionRefusedError (ConnectionError))
- (define-python-class ConnectionResetError (ConnectionError))
- (define-python-class FileExistsError (OSError))
- (define-python-class FileNotFoundError (OSError))
- (define-python-class InterruptedError (OSError))
- (define-python-class IsADirectoryError (OSError))
- (define-python-class NotADirectoryError (OSError))
- (define-python-class PermissionError (OSError))
- (define-python-class ProcessLookupError (OSError))
- (define-python-class TimeOutError (OSError))
-(define None 'None)
-
-
-(define-er TypeError 'TypeError)
-(define-er AttributeError 'AttributeError)
-(define-er SyntaxError 'SyntaxError)
- (define-python-class IndentationError (SyntaxError))
- (define-python-class TabError (IndentationError))
-
-(define-er RunTimeError 'RunTimeError)
-
-(define AssertionError 'AssertionError)
-(define-er ImportError 'ImportError)
-(define-er ModuleNotFoundError (ImportError) 'ModuleNotFoundError)
-
-(define NotImplemented (list 'NotImplemented))
-
-
-
-
-(define-syntax define-wr
- (syntax-rules ()
- ((_ nm k)
- (define-python-class nm (Warning)))
- ((_ nm w k)
- (define-python-class nm w))))
-
-(define-wr BytesWarning 'BytesWarning)
-(define-wr DepricationWarning 'DeprecationWarning)
-(define-wr ResourceWarning 'ResourceWarning)
-(define-wr UserWarning 'UserWarning)
-(define-wr PendingDeprecationWarning 'PendingDeprecationWarning)
-(define-wr RuntimeWarning 'RuntimeWarning)
-(define-wr FutureWarning 'FutureWarning)
diff --git a/modules/language/python/expr.scm b/modules/language/python/expr.scm
deleted file mode 100644
index 81c2cbe..0000000
--- a/modules/language/python/expr.scm
+++ /dev/null
@@ -1,106 +0,0 @@
-(define-module (language python expr)
- #:use-module (language python class)
- #:export (py-true? to-py py-or py-and py-not py_==
- py_>= py_<= py_< py_> py_<> py_!= py_in py_notin py_is
- py_isnot py_bor py_xor py_band py-<< py->> py-+ py--
- py-* py-/ py-% py-// py-u+ py-u- py-u~ py-power
- ))
-
-
-(define-syntax-rule (py-true? x) (eq? x 'True))
-(define-syntax-rule (to-py x) (if x 'True 'false))
-(define-syntax-rule (py-or x ...) (to-py (or (py-true? x) ...)))
-(define-syntax-rule (py-and x ...) (to-py (and (py-true? x) ...)))
-(define-syntax-rule (py-not x) (if (py-true? x) 'False 'True))
-
-(define-syntax-rule (py_== x y)
- (if (struct? x)
- (if (class? x)
- (class_== x y)
- (to-py (equal? x y)))
- (to-py (equal? x y))))
-
-(define-syntax-rule (mk-comp py_>= >= class_>=)
- (define-syntax-rule (py_>= x y)
- (if (number? x)
- (to-py (>= x y))
- (if (class? x)
- (class_>= x y)
- 'False))))
-
-(mk-comp py_>= >= class_>=)
-(mk-comp py_<= <= class_<=)
-(mk-comp py_< < class_<)
-(mk-comp py_> > class_>)
-
-(define-syntax-rule (<> x y) (not (= x y)))
-(mk-comp py_<> <> class_<>)
-(mk-comp py_!= <> class_<>)
-
-
-(define-syntax-rule (py_in x y)
- (cond
- ((struct? y)
- (if (class? y)
- (to-py (class_in y x))
- 'False))
- ((pair? y)
- (list-in x y))
- ((vector? y)
- (vector-in x y))
- (else
- 'False)))
-
-(define-syntax-rule (py_notin x y)
- (cond
- ((struct? y)
- (if (class? y)
- (to-py (not (class_in y x)))
- 'True))
- ((pair? y)
- (to-py (list-in x y)))
- ((vector? y)
- (to-py (vector-in x y)))
- (else
- 'True)))
-
-(define-syntax-rule (py_is x y)
- (to-py (and (class? x) (class? y) (eq? (class-ref x) (class-ref y)))))
-
-(define-syntax-rule (py_isnot x y)
- (to-py (not (and (class? x) (class? y) (eq? (class-ref x) (class-ref y))))))
-
-(define-syntax-rule (mk-num py_>= >= class_>=)
- (define-syntax-rule (py_>= x . y)
- (if (number? x)
- (>= x . y)
- (if (class? x)
- (class_>= x . y)
- (error "wrong numerics")))))
-
-(mk-num py_bor logior class_ior)
-(mk-num py_xor logxor class_xor)
-(mk-num py_band logand class_band)
-(mk-num py-<< ash class_<<)
-(define-syntax-rule (rash x y) (ash x (- y)))
-(mk-num py->> rash class_>>)
-(mk-num py-+ + class_+)
-(mk-num py-- - class_-)
-(mk-num py-* * class_*)
-(mk-num py-/ / class_/)
-(mk-num py-% modulo class_%)
-(mk-num py-// truncate-quotient class_//)
-
-(define-syntax-rule (mk-unum py_>= >= class_>=)
- (define-syntax-rule (py_>= x)
- (if (number? x)
- (>= x)
- (if (class? x)
- (class_>= x)
- (error "wrong numerics")))))
-
-(mk-unum py-u+ + class_u+)
-(mk-unum py-u- - class_u-)
-(mk-unum py-u~ lognot class_u~)
-
-(mk-num py-power expt class_power)
diff --git a/modules/language/python/for.scm b/modules/language/python/for.scm
deleted file mode 100644
index cebb5d1..0000000
--- a/modules/language/python/for.scm
+++ /dev/null
@@ -1,182 +0,0 @@
-(define-module (language python for)
- #:use-module (language python yield)
- #:use-module (oop pf-objects)
- #:use-module (language python exceptions)
- #:use-module (language python def)
- #:use-module (oop goops)
- #:use-module (ice-9 control)
- #:use-module (language python persist)
- #:export (for break next wrap-in))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(eval-when (compile eval load)
- (define (generate-temporaries2 x)
- (map (lambda (x) (generate-temporaries x)) x)))
-
-(define-syntax-parameter break (lambda (x) #f))
-
-(define-syntax for
- (syntax-rules (:)
- ((for ((x ... : E) ...) ((c n) ...) code ... #:final fin)
- (for-work #f ((x ... : E) ...) ((c n) ...) (code ...) fin values))
- ((for ((x ... : E) ...) ((c n) ...) code ... #:finally fin)
- (for-work #f ((x ... : E) ...) ((c n) ...) (code ...) fin values))
-
- ((for ((x ... : E) ...) ((c n) ...) code ... #:else fin)
- (for-work #f ((x ... : E) ...) ((c n) ...) (code ...) (values)
- (lambda () fin)))
-
- ((for lp ((x ... : E) ...) ((c n) ...) code ... #:final fin)
- (for-work lp ((x ... : E) ...) ((c n) ...) (code ...) fin values))
-
- ((for lp ((x ... : E) ...) ((c n) ...) code ... #:finally fin)
- (for-work lp ((x ... : E) ...) ((c n) ...) (code ...) fin values))
-
- ((for lp ((x ... : E) ...) ((c n) ...) code ... #:else fin)
- (for-work lp ((x ... : E) ...) ((c n) ...) (code ...) (values)
- (lambda () fin)))
-
- ((for ((x ... : E) ...) ((c n) ...) code ...)
- (for-work #f ((x ... : E) ...) ((c n) ...) (code ...) (values) values))
-
- ((for lp ((x ... : E) ...) ((c n) ...) code ...)
- (for-work lp ((x ... : E) ...) ((c n) ...) (code ...) (values) values))))
-
-(define-syntax for-work
- (lambda (z)
- (define (wrap-continue lp code)
- (if (syntax->datum lp)
- #`(lambda () (let/ec #,lp #,@code))
- #`(lambda () #,@code)))
-
- (syntax-case z ()
- ((for lp ((x ... : E) ...) ((c n) ...) (code ...) fin er)
- (with-syntax (((It ...) (generate-temporaries #'(E ...)))
- ((cc ...) (generate-temporaries #'(c ...)))
- (((x1 ...) ...) (generate-temporaries2 #'((x ...) ...)))
- (((x2 ...) ...) (generate-temporaries2 #'((x ...) ...)))
- ((N ...) (map length #'((x ...) ...)))
- (M (length #'(c ...)))
- (else- (datum->syntax #'for 'else-))
- (llp (if (syntax->datum #'lp) #'lp #'lpu)))
-
- #`(let/ec lp-break0
- (let ((It (wrap-in E)) ...
- (c n ) ...
- (x 'None ) ... ...
- (x1 #f ) ... ...)
- (let* ((else- er )
- (lp-break (lambda q (else-) (apply lp-break0 q))))
- (syntax-parameterize ((break (lambda (z)
- (syntax-case z ()
- ((_ . l)
- #'(lp-break . l))
- (_ #'lp-break)))))
-
- (catch StopIteration
- (lambda ()
- (let llp ((cc c) ...)
- (set! c cc) ...
- (call-with-values
- (lambda () (next It))
- (let ((f
- (lambda (x2 ... . ll)
- (set! x1 x2) ...)))
- (if (> N 1)
- (case-lambda
- ((q)
- (if (pair? q)
- (if (pair? (cdr q))
- (apply f q)
- (apply f (car q) (cdr q)))
- (py-apply f (* q))))
- (q
- (apply f q)))
- (lambda (x2 ... . ll)
- (set! x1 x2) ...))))
- ...
- (set! x x1)
- ... ...
- (call-with-values
- #,(wrap-continue
- #'lp
- #'((let ((x x) ... ...) code ...)))
- (lambda (cc ... . q) (llp cc ...)))))
- (lambda q (else-) fin)))))))))))
-
-(define-class <scm-list> () l)
-(define-class <scm-string> () s i)
-
-(name-object <scm-list>)
-(name-object <scm-string>)
-(cpit <scm-list> (o (lambda (o l) (slot-set! o 'l l))
- (list (slot-ref o 'l))))
-(cpit <scm-string> (o (lambda (o s i)
- (slot-set! o 's s)
- (slot-set! o 'i i))
- (list
- (slot-ref o 's)
- (slot-ref o 'i))))
-
-(define-method (next x)
- (throw StopIteration))
-
-(define-method (next (l <scm-list>))
- (let ((ll (slot-ref l 'l)))
- (if (pair? ll)
- (begin
- (slot-set! l 'l (cdr ll))
- (car ll))
- (throw StopIteration))))
-
-(define-method (next (l <scm-string>))
- (let ((s (slot-ref l 's))
- (i (slot-ref l 'i)))
- (if (= i (string-length s))
- (throw StopIteration)
- (begin
- (slot-set! l 'i (+ i 1))
- (string-ref s i)))))
-
-(define-method (next (l <yield>))
- (let ((k (slot-ref l 'k))
- (s (slot-ref l 's)))
- (if k
- (k (lambda () 'None))
- (s))))
-
-(define-method (wrap-in (o <yield>))
- o)
-
-(define-method (wrap-in (o <p>))
- (aif it (ref o '__iter__)
- (let ((x (it)))
- (pk 'wrap-in o x)
- (cond
- ((pair? x) (wrap-in x))
- (else x)))
- (next-method)))
-
-(define-method (next (l <p>))
- ((ref l '__next__)))
-
-(define-method (wrap-in x)
- (cond
- ((or (null? x) (pair? x))
- (let ((o (make <scm-list>)))
- (slot-set! o 'l x)
- o))
-
- ((string? x)
- (let ((o (make <scm-string>)))
- (slot-set! o 's x)
- (slot-set! o 'i 0)
- o))
-
- (else
- x)))
-
-(set! (@@ (oop pf-objects) hashforeach)
- (lambda (f d)
- (for ((k v : d)) () (f k v))))
diff --git a/modules/language/python/format2.scm b/modules/language/python/format2.scm
deleted file mode 100644
index 437623c..0000000
--- a/modules/language/python/format2.scm
+++ /dev/null
@@ -1,324 +0,0 @@
-(define-module (language python format2)
- #:use-module (ice-9 match)
- #:use-module (parser stis-parser)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (language python exceptions)
- #:use-module (language python number)
- #:use-module (language python dict)
- #:use-module (language python list)
- #:export (format fnm))
-
-(define splitm #f)
-(define splitmm #f)
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define scm-format (@ (guile) format))
-
-(define e-map (f-seq "(" (mk-token (f* (f-not! (f-tag ")")))) ")"))
-(define e-conv (mk-token (f+ (f-reg! "[-#0 +]"))))
-(define e-min (f-or! (mk-token (f+ (f-reg! "[0-9]")) string->number)
- (f-seq "*" (f-out #:*))))
-(define e-prec (f-seq "." (f-or!
- (mk-token (f+ (f-reg! "[0-9]")) string->number)
- (f-seq "*" (f-out #:*)))))
-(define e-len (mk-token (f-reg! "[hlL]")))
-(define e-type (mk-token (f-reg! "[diouxXeEfFgGcrsa%]")))
-(define e (f-list #:% "%" (ff? e-map) (ff? e-conv) (ff? e-min)
- (ff? e-prec) (ff? e-len) e-type))
-
-(define (map? l)
- (let lp ((l l))
- (match l
- ((a (#:% #f . _) . l)
- (lp l))
- ((a (#:% _ . _) . l)
- #t)
- (_ #f))))
-
-(define (get-n p)
- (match p
- ((#:% _ _ _ _ _ "%")
- -1)
-
- ((#:% #f _ #:* #:* . _)
- 2)
- ((#:% #f _ #:* _ . _)
- 1)
- ((#:% #f _ _ #:* . _)
- 1)
- (_
- 0)))
-
-(define (create c min prec tp)
- (define (get-intkind tp)
- (match tp
- ((or "d" "i" "u")
- "d")
- ("o"
- "o")
- ((or "x" "X")
- "x")))
-
- (let ((prec (if prec prec 6))
- (min (if min min 0))
- (c (if c c "")))
- (match tp
- ("c"
- (lambda (x)
- (if (and (number? x) (integer? x))
- (list->string (list (integer->char x)))
- x)))
-
- ("s" (lambda (x)
- (let ((s (if (is-a? x <p>)
- (aif it (ref x '__str__)
- (scm-format #f "~a" (it))
- (scm-format #f "~a" x))
- (scm-format #f "~a" x))))
- (+ s (* " " (max 0 (- min (len s))))))))
-
- ("a" (lambda (x)
- (let ((s (scm-format #f "~a" x)))
- (+ s (* " " (max 0 (- min (len s))))))))
-
- ("r" (lambda (x)
- (let ((s (scm-format #f "~a" x)))
- (+ s (* " " (max 0 (- min (len s))))))))
-
- ("%"
- (lambda (x) (* "%" (if min min 1))))
- ((or "f" "F" "e" "E" "g" "G")
- (let ((c (string->list c)))
- (define (make-decimal)
- (string-append
- "~"
- (if min (number->string min) "")
- ","
- (number->string prec)
- ",,,"
- (if (member #\0 c)
- "0"
- (if (member #\space c)
- " "
- ""))
- (if (member #\+ c) "@" "")
- "f"))
- (define (make-exp expchar)
- (string-append
- "~"
- (if min (number->string min) "")
- ","
- (number->string prec)
- ",,,,"
- (if (member #\0 c)
- "0"
- (if (member #\space c)
- " "
- ""))
- ",'"
- expchar
- (if (member #\+ c) "@" "")
- "e"))
- (match tp
- ((or "f" "F")
- (let ((pat (make-decimal)))
- (lambda (x) (scm-format #f pat x))))
- ((or "e" "E")
- (let ((pat (make-exp tp)))
- (lambda (x) (scm-format #f pat x))))
- ((or "g" "G")
- (let ((pat1 (make-decimal))
- (pat2 (make-exp (if (equal? tp "g") "e" "E"))))
- (lambda (x)
- (if (or (< (log10 (abs x)) -4)
- (if prec (< (log10 (abs x)) (- prec)) #f))
- (scm-format #f pat2 x)
- (scm-format #f pat1 x))))))))
-
-
- ((or "d" "i" "u" "o" "x" "X")
- (match c
- (""
- (let ((kind (get-intkind tp)))
- (if min
- (let ((pat (string-append "~"
- (number->string min) ",' " kind)))
- (lambda (x)
- (scm-format #f pat x)))
- (let ((pat (string-append "~" kind)))
- (lambda (x)
- (scm-format #f pat x))))))
- (_
- (if min
- (let ((c (string->list c)))
- (if (and (member #\# c)
- (match tp
- ((or "x" "o" "X") #t)
- (_ #f)))
- (set! c (cons #\0 c)))
- (let* ((kind (get-intkind tp))
- (padchar (if (member #\0 c) "0" " "))
- (pre (if (member #\+ c)
- "~a"
- (if (member #\0 c)
- "~a"
- (if (member #\space c)
- "~a"
- ""))))
- (pos (if (member #\+ c) "+"
- (if (member #\space c)
- " "
- padchar)))
- (kpre (if (member #\# c)
- (match tp
- ("o" "0o")
- ((or "x" "X") "0x")
- (_ ""))
- ""))
-
- (neg (if (or (member #\+ c)
- (member #\space c)
- (member #\0 c))
- "-"
- ""))
- (d (string-append
- pre kpre "~"
- (number->string
- (- min
- (if (= (string-length kpre) 0) 0 2)
- (if (= (string-length pre ) 0) 0 1)))
- ",'"
- padchar
- kind)))
- (if (= (string-length pre) 0)
- (lambda (x)
- (if (and (number? x) (integer? x))
- (scm-format #f d x)
- (raise
- (ValueError "not a integer, format spec %d"))))
- (lambda (x)
- (if (and (number? x) (integer? x))
- (scm-format #f d (if (< x 0) neg pos) (abs x))
- (raise
- (ValueError
- "not a integer, format spec %d")))))))
- (let* ((kind (get-intkind tp))
- (pat (string-append "~" kind)))
- (lambda (x)
- (if (and (number? x) (integer? x))
- (scm-format #f pat x)
- (raise
- (ValueError "not a integer, format spec %d"))))))))))))
-
-
-(define (analyze p)
- (match p
- ((#:% #f c #:* #:* _ tp)
- (lambda (min prec x)
- ((create c min prec tp) x)))
- ((#:% #f c #:* prec _ tp)
- (lambda (min x)
- ((create c min prec tp) x)))
- ((#:% #f c #:* prec _ tp)
- (lambda (min x)
- ((create c min prec tp) x)))
- ((#:% #f c min #:* _ tp)
- (lambda (prec x)
- ((create c min prec tp) x)))
-
- ((#:% #f c min prec _ tp)
- (create c min prec tp))
- ((#:% tag c min prec _ tp)
- (let ((f (create c min prec tp)))
- (lambda (x)
- (f (pylist-ref x tag)))))))
-
-
-(define (compile str)
- (let* ((l (splitmm e str)))
- (if (map? l)
- (let lp ((l l))
- (match l
- ((a p . l)
- (let ((rest (lp l))
- (f (analyze p)))
- (lambda (x)
- (cons* a (f x) (rest x)))))
- ((a)
- (lambda (x)
- (list a)))
- (()
- (lambda (x)
- '()))))
-
- (let lp ((l l))
- (match l
- ((a p . l)
- (let ((rest (lp l))
- (n (get-n p))
- (f (analyze p)))
- (case n
- ((-1)
- (lambda (x)
- (cons* a "%" (rest x))))
-
- ((0)
- (lambda (x)
- (cons* a (f (car x)) (rest (cdr x)))))
- ((1)
- (lambda (x)
- (cons* a (f (car x) (cadr x)) (rest (cddr x)))))
- ((2)
- (lambda (x)
- (cons* a (f (car x) (cadr x) (caddr x))
- (rest (cdddr x))))))))
- ((a)
- (lambda (x)
- (list a)))
- (()
- (lambda (x)
- '())))))))
-
-(define (id? x)
- (or (pair? x)
- (hash-table? x)
- (is-a? x <py-hashtable>)))
-
-(define (format-- s l ha)
- (set! l (if (id? l) l (list l)))
- (aif it (hashq-ref ha s #f)
- (string-join (it l) "")
- (begin
- (hashq-set! ha s (compile s))
- (format-- s l ha))))
-
-(define (format- str l)
- (string-join ((compile str) (if (id? l) l (list l))) ""))
-
-(define formatters (make-hash-table))
-
-(define fnm 'formatter-map132)
-(define-syntax format
- (lambda (x)
- (syntax-case x ()
- ((_ a b)
- (let ((s (syntax->datum #'a)))
- (if (string? s)
- (let* ((mod (datum->syntax #'a (module-name (current-module))))
- (f (datum->syntax #'a fnm)))
-
- (if (not (module-defined? (current-module) fnm))
- (module-define! (current-module) fnm (make-hash-table)))
-
- (with-syntax ((u (list #'@@ mod f)))
- #'(format-- a b u)))
- #'(format- a b))))
- ((_ . _)
- (error "wrong number of arguments to format"))
- (_
- #'format-))))
-
-(define-method (py-mod (s <string>) l)
- (format s l))
diff --git a/modules/language/python/guilemod.scm b/modules/language/python/guilemod.scm
deleted file mode 100644
index da1f5c7..0000000
--- a/modules/language/python/guilemod.scm
+++ /dev/null
@@ -1,261 +0,0 @@
-(define-module (language python guilemod)
- #:export ())
-
-(define-syntax-rule (mk-commands path mod-C define-C define-exp-C define-set-C)
- (begin
- (define mod-C (resolve-module 'path))
- (define-syntax-rule (define-C f val)
- (begin
- (define f val)
- (module-define! mod-C 'f f)))
-
- (define-syntax-rule (define-exp-C f val)
- (begin
- (define f val)
- (module-define! mod-C 'f val)
- (module-export! mod-C (list 'f))))
-
- (define-syntax-rule (define-set-C f val)
- (module-set! mod-C 'f (let ((x val)) x)))))
-
-(mk-commands (system base compile) mod-C define-C define-exp-C define-set-C)
-(mk-commands (system base message) mod-M define-M define-exp-M define-set-M)
-(mk-commands (guile) mod-G define-G define-exp-G define-set-G)
-(define-syntax-rule (C x) (@@ (system base compile) x))
-(define-syntax-rule (M x) (@@ (system base message) x))
-
-(define-exp-C *do-extension-dispatch* #t)
-(define-exp-C *extension-dispatches* '((("py" "python") . python)
- (("pl" "prolog") . prolog)))
-(define-exp-C %current-file% (make-fluid '(guile)))
-
-(define-C default-language
- (lambda (file)
- (define default ((C current-language)))
- (if (C *do-extension-dispatch*)
- (let ((ext (car (reverse (string-split file #\.)))))
- (let lp ((l (C *extension-dispatches*)))
- (if (pair? l)
- (if (member ext (caar l))
- (let ((r (cdar l)))
- (if ((C language?) default)
- (if (eq? ((C language-name) default) r)
- default
- r)
- r))
- (lp (cdr l)))
- default)))
- default)))
-
-
-(define-exp-C %in-compile (make-fluid #f))
-
-(define-set-C compile-file
- (lambda* (file #:key
- (output-file #f)
- (from ((C default-language) file))
- (to 'bytecode)
- (env ((C default-environment) from))
- (opts '())
- (canonicalization 'relative))
-
- (with-fluids (((C %in-compile ) #t )
- ((M %dont-warn-list ) '() )
- ((C %file-port-name-canonicalization) canonicalization )
- ((C %current-file% ) file))
-
- (let* ((comp (or output-file ((C compiled-file-name) file)
- (error "failed to create path for auto-compiled file"
- file)))
- (in ((C open-input-file) file))
- (enc ((C file-encoding) in)))
- ;; Choose the input encoding deterministically.
- ((C set-port-encoding!) in (or enc "UTF-8"))
-
- ((C ensure-directory) ((C dirname) comp))
- ((C call-with-output-file/atomic) comp
- (lambda (port)
- (((C language-printer) ((C ensure-language) to))
- ((C read-and-compile)
- in #:env env #:from from #:to to #:opts
- (cons* #:to-file? #t opts))
- port))
- file)
- comp))))
-
-;; MESSAGE (Mute some variable warnings)
-(define-exp-M %add-to-warn-list
- (lambda (sym)
- (fluid-set! (M %dont-warn-list)
- (cons sym (fluid-ref (M %dont-warn-list))))))
-
-(define-exp-M %dont-warn-list (make-fluid '()))
-(define-set-M %warning-types
- ;; List of known warning types.
- (map (lambda (args)
- (apply (M make-warning-type) args))
-
- (let-syntax ((emit
- (lambda (s)
- (syntax-case s ()
- ((_ port fmt args ...)
- (string? (syntax->datum #'fmt))
- (with-syntax ((fmt
- (string-append "~a"
- (syntax->datum
- #'fmt))))
- #'(format port fmt
- (fluid-ref (M *current-warning-prefix*))
- args ...)))))))
- `((unsupported-warning ;; a "meta warning"
- "warn about unknown warning types"
- ,(lambda (port unused name)
- (emit port "warning: unknown warning type `~A'~%"
- name)))
-
- (unused-variable
- "report unused variables"
- ,(lambda (port loc name)
- (emit port "~A: warning: unused variable `~A'~%"
- loc name)))
-
- (unused-toplevel
- "report unused local top-level variables"
- ,(lambda (port loc name)
- (emit port
- "~A: warning: possibly unused local top-level variable `~A'~%"
- loc name)))
-
- (unbound-variable
- "report possibly unbound variables"
- ,(lambda (port loc name)
- (if (not (member name (fluid-ref (M %dont-warn-list))))
- (emit port
- "~A: warning: possibly unbound variable `~A'~%"
- loc name))))
-
- (macro-use-before-definition
- "report possibly mis-use of macros before they are defined"
- ,(lambda (port loc name)
- (emit port
- "~A: warning: macro `~A' used before definition~%"
- loc name)))
-
- (arity-mismatch
- "report procedure arity mismatches (wrong number of arguments)"
- ,(lambda (port loc name certain?)
- (if certain?
- (emit port
- "~A: warning: wrong number of arguments to `~A'~%"
- loc name)
- (emit port
- "~A: warning: possibly wrong number of arguments to `~A'~%"
- loc name))))
-
- (duplicate-case-datum
- "report a duplicate datum in a case expression"
- ,(lambda (port loc datum clause case-expr)
- (emit port
- "~A: warning: duplicate datum ~S in clause ~S of case expression ~S~%"
- loc datum clause case-expr)))
-
- (bad-case-datum
- "report a case datum that cannot be meaningfully compared using `eqv?'"
- ,(lambda (port loc datum clause case-expr)
- (emit port
- "~A: warning: datum ~S cannot be meaningfully compared using `eqv?' in clause ~S of case expression ~S~%"
- loc datum clause case-expr)))
-
- (format
- "report wrong number of arguments to `format'"
- ,(lambda (port loc . rest)
- (define (escape-newlines str)
- (list->string
- (string-fold-right (lambda (c r)
- (if (eq? c #\newline)
- (append '(#\\ #\n) r)
- (cons c r)))
- '()
- str)))
-
- (define (range min max)
- (cond ((eq? min 'any)
- (if (eq? max 'any)
- "any number" ;; can't happen
- (emit #f "up to ~a" max)))
- ((eq? max 'any)
- (emit #f "at least ~a" min))
- ((= min max) (number->string min))
- (else
- (emit #f "~a to ~a" min max))))
-
- ((M match) rest
- (('simple-format fmt opt)
- (emit port
- "~A: warning: ~S: unsupported format option ~~~A, use (ice-9 format) instead~%"
- loc (escape-newlines fmt) opt))
- (('wrong-format-arg-count fmt min max actual)
- (emit port
- "~A: warning: ~S: wrong number of `format' arguments: expected ~A, got ~A~%"
- loc (escape-newlines fmt)
- (range min max) actual))
- (('syntax-error 'unterminated-iteration fmt)
- (emit port "~A: warning: ~S: unterminated iteration~%"
- loc (escape-newlines fmt)))
- (('syntax-error 'unterminated-conditional fmt)
- (emit port "~A: warning: ~S: unterminated conditional~%"
- loc (escape-newlines fmt)))
- (('syntax-error 'unexpected-semicolon fmt)
- (emit port "~A: warning: ~S: unexpected `~~;'~%"
- loc (escape-newlines fmt)))
- (('syntax-error 'unexpected-conditional-termination fmt)
- (emit port "~A: warning: ~S: unexpected `~~]'~%"
- loc (escape-newlines fmt)))
- (('wrong-port wrong-port)
- (emit port
- "~A: warning: ~S: wrong port argument~%"
- loc wrong-port))
- (('wrong-format-string fmt)
- (emit port
- "~A: warning: ~S: wrong format string~%"
- loc fmt))
- (('non-literal-format-string)
- (emit port
- "~A: warning: non-literal format string~%"
- loc))
- (('wrong-num-args count)
- (emit port
- "~A: warning: wrong number of arguments to `format'~%"
- loc))
- (else
- (emit port "~A: `format' warning~%" loc)))))))))
-
-
-
-(define pload
- (let ((guile-load (@ (guile) primitive-load-path)))
- (lambda (p . q)
- (let ((tag (make-prompt-tag)))
- (call-with-prompt
- tag
- (lambda ()
- (guile-load p (lambda () (abort-to-prompt tag))))
- (lambda (k)
- (let lp ((l *extension-dispatches*))
- (if (pair? l)
- (let lp2 ((u (caar l)))
- (if (pair? u)
- (let ((tag (make-prompt-tag)))
- (call-with-prompt
- tag
- (lambda ()
- (guile-load (string-append p "." (car u))
- (lambda () (abort-to-prompt tag))))
- (lambda (k) (lp2 (cdr u)))))
- (lp (cdr l))))))
- (if (pair? q)
- ((car q))
- (error (string-append "no code for path " p)))))))))
-
-
-(define-set-G primitive-load-path pload)
diff --git a/modules/language/python/hash.scm b/modules/language/python/hash.scm
deleted file mode 100644
index 423abb3..0000000
--- a/modules/language/python/hash.scm
+++ /dev/null
@@ -1,52 +0,0 @@
-(define-module (language python hash)
- #:use-module (oop goops)
- #:use-module (oop pf-objects)
- #:export (py-hash complexity xy pyhash-N))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define N #xefffffffffffffff)
-(define pyhash-N N)
-
-(define-inlinable (xy v seed)
- (modulo
- (logxor seed
- (+ v
- #x9e3779b9
- (ash seed 6)
- (ash seed -2)))
- N))
-
-(define complexity 10)
-
-;; The default is to use guile's hash function
-(define-method (py-hash x) (hash x N))
-
-(define-method (py-hash (x <pair>))
- (define i 0)
- (let lp ((x x))
- (if (< i complexity)
- (begin
- (set! i (+ i 1))
- (if (pair? x)
- (xy (lp (car x)) (lp (cdr x)))
- (py-hash x)))
- 0)))
-
-(define-method (py-hash (x <vector>))
- (let ((n (min complexity (vector-length x))))
- (let lp ((i 0) (s 0))
- (if (< i n)
- (lp (+ i 1)
- (xy (py-hash (vector-ref x i)) s))
- s))))
-
-(define-method (py-hash (x <p>))
- (define (next)
- (catch #t
- (lambda () (next-method))
- (lambda x (hash x N))))
-
- (aif it (ref-class x '__hash__ #f)
- (it)
- (next)))
diff --git a/modules/language/python/list.scm b/modules/language/python/list.scm
deleted file mode 100644
index c656edf..0000000
--- a/modules/language/python/list.scm
+++ /dev/null
@@ -1,1002 +0,0 @@
-(define-module (language python list)
- #:use-module (ice-9 match)
- #:use-module (ice-9 control)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (language python hash)
- #:use-module (language python tuple)
- #:use-module (language python exceptions)
- #:use-module (language python yield)
- #:use-module (language python for)
- #:use-module (language python try)
- #:use-module (language python bool)
- #:use-module (language python exceptions)
- #:use-module (language python persist)
- #:re-export (pylist-ref pylist-set!)
- #:export (to-list to-pylist <py-list> py-list
- pylist-append!
- pylist-slice pylist-subset! pylist-reverse!
- pylist-pop! pylist-count pylist-extend! len in
- pylist-insert! pylist-remove! pylist-sort!
- pylist-index pylist-null pylist-delete!
- pylist pylist-listing py-reversed
- py-all py-any py-reversed))
-
-(define scm-list list)
-
-(define-method (+ (x <null>) (y <pair>))
- (let lp ((l y))
- (if (pair? l)
- (cons (car l) (lp (cdr l)))
- '())))
-
-(define-method (+ (x <pair>) (y <null>))
- (let lp ((l x))
- (if (pair? l)
- (cons (car l) (lp (cdr l)))
- '())))
-
-(define-method (in x (y <null>)) #f)
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-class <py-list> () vec n)
-(name-object <py-list>)
-
-(cpit <py-list> (o (lambda (o n l)
- (slot-set! o 'n n)
- (slot-set! o 'vec (list->vector l)))
- ((@ (guile) list)
- (slot-ref o 'n)
- (vector->list (slot-ref o 'vec)))))
-
-(define (int x) x)
-
-(define-method (pylist-delete! (o <py-list>) k)
- (let* ((n (slot-ref o 'n))
- (k (int k))
- (k (if (< k 0) (+ k n) k)))
- (pylist-subset! o k (+ k 1) None pylist-null)))
-
-(define-method (pylist-delete! (o <p>) k)
- (aif it (ref o '__delitem__)
- (it k)
- (next-method)))
-
-(define pylist-null
- (let ((o (make <py-list>)))
- (slot-set! o 'vec (make-vector 0))
- (slot-set! o 'n 0)
- o))
-
-(define-method (py-hash (o <py-list>))
- (let ((n (min complexity (slot-ref o 'n)))
- (v (slot-ref o 'vec)))
- (let lp ((i 0) (s 0))
- (if (< i n)
- (lp (+ i 1)
- (xy (py-hash (vector-ref v i)) s))
- s))))
-
-(define-method (to-list x)
- (for ((i : x)) ((r '()))
- (cons i r)
- #:final (reverse r)))
-
-(define-method (to-list (x <p>))
- (aif it (ref x '__tolist__)
- (it)
- (next-method)))
-
-
-(defpair (to-list x) x)
-
-(define-method (to-list (x <yield>))
- (define l '())
- (catch StopIteration
- (lambda ()
- (let lp ()
- (set! l (cons (next x) l))
- (lp)))
- (lambda x
- (reverse l))))
-
-(define-method (to-list (x <py-list>))
- (let ((vec (slot-ref x 'vec))
- (n (slot-ref x 'n)))
- (let lp ((i 0))
- (if (< i n)
- (cons (vector-ref vec i) (lp (+ i 1)))
- '()))))
-
-(define-method (to-pylist (l <py-list>))
- l)
-
-(defpair (to-pylist l)
- (let* ((n (length l))
- (vec (make-vector (* 2 n)))
- (o (make <py-list>)))
-
- (let lp ((l l) (i 0))
- (if (pair? l)
- (begin
- (vector-set! vec i (car l))
- (lp (cdr l) (+ i 1)))))
-
- (slot-set! o 'n n)
- (slot-set! o 'vec vec)
- o))
-
-(define-method (to-pylist (l <vector>))
- (to-pylist (vector->list l)))
-
-(define-method (to-pylist (o <string>))
- (to-pylist (string->list o)))
-
-(define-method (bool (o <py-list>))
- (if (= (len o) 0)
- #f
- o))
-(define-method (bool (o <vector>))
- (if (= (len o) 0)
- #f
- o))
-(define-method (bool (o <string>))
- (if (= (len o) 0)
- #f
- o))
-
-(define-method (to-pylist l)
- (if (null? l)
- (let ((o (make <py-list>)))
- (slot-set! o 'vec (make-vector 4))
- (slot-set! o 'n 0)
- o)
- (error "not able to make a pylist")))
-
-;;; REF
-(define-method (pylist-ref (o <py-list>) nin)
- (define N (slot-ref o 'n))
- (define n0 (int nin))
- (define n (if (< n0 0) (+ N n0) n0))
- (if (and (>= n 0) (< n (slot-ref o 'n)))
- (vector-ref (slot-ref o 'vec) n)
- (raise IndexError)))
-
-(defpair (pylist-ref o n)
- (list-ref o (let ((n (int n))) (if (< n 0) (+ (length o) n) n))))
-
-(define-method (pylist-ref (o <vector>) n)
- (vector-ref o (let ((n (int n))) (if (< n 0) (+ (vector-length o) n) n))))
-
-;;; SET
-(define-method (pylist-set! (o <py-list>) nin val)
- (define N (slot-ref o 'n))
- (define n0 (int nin))
- (define n (if (< n0 0) (+ N n0) n0))
-
- (if (and (>= n 0) (< n (slot-ref o 'n)))
- (vector-set! (slot-ref o 'vec) n val)
- (raise IndexError)))
-
-(defpair (pylist-set! o n val)
- (list-set! o (let ((n (int n))) (if (< n 0) (+ (length o) n) n)) val))
-
-(define-method (pylist-set! (o <vector>) n val)
- (vector-set! o (let ((n (int n))) (if (< n 0) (+ (length o) n) n)) val))
-
-
-;;SLICE
-(define-method (pylist-slice (o <p>) . l)
- (aif it (ref o '__getslice__)
- (apply it l)
- (next-method)))
-
-(define-method (pylist-slice (o <py-list>) n1 n2 n3)
- (define N (slot-ref o 'n))
- (define (f n)
- (let ((x (if (< n 0) (+ N n) n)))
- (if (< x 0)
- 0
- (if (> x N)
- N
- x))))
- (let* ((n1 (f (if (eq? n1 None) 0 n1)))
- (n2 (f (if (eq? n2 None) (slot-ref o 'n) n2)))
- (n3 (f (if (eq? n3 None) 1 n3)))
-
- (vec (slot-ref o 'vec))
- (l (let lp ((i n1))
- (if (< i n2)
- (cons (vector-ref vec i) (lp (+ i n3)))
- '()))))
- (to-pylist l)))
-
-(define-method (pylist-slice (o <string>) n1 n2 n3)
- (define N (string-length o))
- (define (f n)
- (let ((x (if (< n 0) (+ N n) n)))
- (if (< x 0)
- 0
- (if (> x N)
- N
- x))))
-
- (let* ((n1 (f (if (eq? n1 None) 0 n1)))
- (n2 (f (if (eq? n2 None) (string-length o) n2)))
- (n3 (f (if (eq? n3 None) 1 n3))))
- (list->string
- (to-list
- (pylist-slice (to-pylist o) n1 n2 n3)))))
-
-
-(defpair (pylist-slice o n1 n2 n3)
- (to-list
- (pylist-slice (to-pylist o) n1 n2 n3)))
-
-(define-method (pylist-slice (o <vector>) n1 n2 n3)
- (list->vector
- (to-list
- (pylist-slice (to-pylist o) n1 n2 n3))))
-
-;;SUBSET
-(define-method (pylist-subset! (o <p>) n1 n2 n3 val)
- (aif it (ref o '__setslice__)
- (it n1 n2 n3 val)
- (next-method)))
-
-(define-method (pylist-subset! (o <py-list>) n1 n2 n3 val)
- (define N (slot-ref o 'n))
- (define (f n) (if (< n 0) (+ N n) n))
-
- (let* ((n1 (f (if (eq? n1 None) 0 n1)))
- (n2 (f (if (eq? n2 None) (slot-ref o 'n) n2)))
- (n3 (f (if (eq? n3 None) 1 n3)))
- (vec (slot-ref o 'vec))
- (o2 (to-pylist val))
- (N2 (slot-ref o2 'n))
- (vec2 (slot-ref o2 'vec)))
- (if (<= n2 N)
- (let lp ((i 0) (j n1))
- (if (< j n2)
- (if (< i N2)
- (begin
- (vector-set! vec j (vector-ref vec2 i))
- (lp (+ i 1) (+ j n3)))
- (let lp ((j2 j))
- (if (< j2 n2)
- (lp (+ j2 n3))
- (let lp ((k1 j) (k2 j2))
- (if (< k2 N)
- (begin
- (vector-set! vec k1 (vector-ref vec k2))
- (lp (+ k1 1) (+ k2 1)))
- (begin
- (let lp ((i k2))
- (if (< i N)
- (begin
- (vector-set! vec i #f)
- (lp (+ i 1)))
- (slot-set! o 'n k1)))))))))))
- (raise IndexError))
- (values)))
-
-
-;;APPEND
-(define-method (pylist-append! (o <py-list>) val)
- (let* ((n (slot-ref o 'n))
- (vec (slot-ref o 'vec))
- (N (vector-length vec)))
- (if (< n N)
- (vector-set! vec n val)
- (let* ((N (* 2 N))
- (vec2 (make-vector N)))
- (let lp ((i 0))
- (if (< i n)
- (begin
- (vector-set! vec2 i (vector-ref vec i))
- (lp (+ i 1)))))
- (vector-set! vec2 n val)
- (slot-set! o 'vec vec2)))
- (slot-set! o 'n (+ n 1))
- (values)))
-
-(define-method (pylist-append! o n)
- (raise 'NotSupportedOP '__append__))
-
-(define-method (pylist-append! (o <p>) n . l)
- (aif it (ref o 'append)
- (apply it n l)
- (next-method)))
-
-
-
-(define-method (write (o <py-list>) . l)
- (define port (if (null? l) #t (car l)))
- (let* ((l (to-list o)))
- (if (null? l)
- (format port "[]")
- (format port "[~a~{, ~a~}]" (car l) (cdr l)))))
-
-(define-method (display (o <py-list>) . l)
- (define port (if (null? l) #t (car l)))
-
- (let* ((l (to-list o)))
- (if (null? l)
- (format port "[]")
- (format port "[~a~{, ~a~}]" (car l) (cdr l)))))
-
-
-(define-method (+ (o1 <py-list>) (o2 <py-list>))
- (let* ((vec1 (slot-ref o1 'vec))
- (vec2 (slot-ref o2 'vec))
- (n1 (slot-ref o1 'n))
- (n2 (slot-ref o2 'n))
- (n (+ n1 n2))
- (vec (make-vector (* 2 n)))
- (o (make <py-list>)))
-
- (let lp ((i1 0))
- (if (< i1 n1)
- (begin
- (vector-set! vec i1 (vector-ref vec1 i1))
- (lp (+ i1 1)))
- (let lp ((i2 0) (i i1))
- (if (< i2 n2)
- (begin
- (vector-set! vec i (vector-ref vec2 i2))
- (lp (+ i2 1) (+ i 1)))))))
-
- (slot-set! o 'n n )
- (slot-set! o 'vec vec)
- o))
-
-
-(define-method (+ (o1 <pair>) (o2 <pair>))
- (append o1 o2))
-
-(define-method (+ (o1 <py-tuple>) o2)
- (+ (slot-ref o1 'l) o2))
-
-(define-method (+ o2 (o1 <py-tuple>))
- (+ o2 (slot-ref o1 'l)))
-
-(define-method (+ (o1 <string>) (o2 <string>))
- (string-append o1 o2))
-
-(define-method (+ (o1 <symbol>) (o2 <symbol>))
- (string->symbol
- (string-append
- (symbol->string o1)
- (symbol->string o2))))
-
-(define-method (* (x <integer>) (o1 <py-list>)) (* o1 x))
-(define-method (* (o1 <py-list>) (x <integer>))
- (let* ((vec (slot-ref o1 'vec))
- (n (slot-ref o1 'n))
- (n2 (* n x))
- (vec2 (make-vector (* 2 n2)))
- (o (make <py-list>)))
-
- (let lp1 ((i 0) (j 0))
- (if (< i x)
- (let lp2 ((j j) (k 0))
- (if (< k n)
- (begin
- (vector-set! vec2 j (vector-ref vec k))
- (lp2 (+ j 1) (+ k 1)))
- (lp1 (+ i 1) j)))))
-
- (slot-set! o 'n n2 )
- (slot-set! o 'vec vec2)
- o))
-
-(define-method (* (x <integer>) (vec <string>)) (* vec x))
-(define-method (* (vec <string>) (x <integer>))
- (let* ((n (string-length vec))
- (n2 (* n x))
- (vec2 (make-string n2)))
-
- (let lp1 ((i 0) (j 0))
- (if (< i x)
- (let lp2 ((j j) (k 0))
- (if (< k n)
- (begin
- (string-set! vec2 j (string-ref vec k))
- (lp2 (+ j 1) (+ k 1)))
- (lp1 (+ i 1) j)))))
- vec2))
-
-(define-method (* (x <integer> ) (l <pair>)) (* l x))
-(define-method (* (x <py-tuple>) l) (* (slot-ref x 'l) l))
-(define-method (* l (x <py-tuple>)) (* l (slot-ref x 'l)))
-(define-method (* (l <pair>) (x <integer>))
- (let lp1 ((i 0))
- (if (< i x)
- (let lp2 ((k l))
- (if (pair? k)
- (cons (car k) (lp2 (cdr k)))
- (lp1 (+ i 1))))
- '())))
-
-
-;;REVERSE
-(define-method (pylist-reverse! (o <py-list>))
- (let* ((N (slot-ref o 'n))
- (M (- N 1))
- (n (floor-quotient N 2))
- (vec (slot-ref o 'vec)))
- (let lp ((i 0))
- (if (< i n)
- (let ((swap (vector-ref vec i))
- (k (- M i)))
- (vector-set! vec i (vector-ref vec k))
- (vector-set! vec k swap)
- (lp (+ i 1)))))))
-
-
-(define-method (pylist-reverse! (o <p>) . l)
- (aif it (ref o 'reverse)
- (apply it l)
- (next-method)))
-
-;;POP!
-(define-method (pylist-pop! (o <py-list>) . l)
- (let ((index (if (null? l)
- #f
- (car l))))
- (if index
- (let ((x (pylist-ref o index)))
- (pylist-delete! o index)
- x)
- (let* ((n (slot-ref o 'n))
- (m (- n 1))
- (vec (slot-ref o 'vec)))
- (if (> n 0)
- (let ((ret (vector-ref vec m)))
- (slot-set! o 'n m)
- (vector-set! vec m #f)
- ret)
- (raise IndexError "pop from empty list"))))))
-
-(define-method (pylist-pop! (o <p>) . l)
- (aif it (ref o 'pop)
- (apply it l)
- (next-method)))
-
-;;COUNT
-(define-method (pylist-count (o <py-list>) q)
- (let* ((n (slot-ref o 'n))
- (vec (slot-ref o 'vec)))
- (let lp ((i 0) (sum 0))
- (if (< i n)
- (if (equal? (vector-ref vec i) q)
- (lp (+ i 1) (+ sum 1))
- (lp (+ i 1) sum ))
- sum))))
-
-(define-method (pylist-count (s <string>) q)
- (let* ((n (string-length s))
- (q (if (and (string? q) (= (string-length q) 1))
- (string-ref q 0))))
- (let lp ((i 0) (sum 0))
- (if (< i n)
- (if (eq? (string-ref s i) q)
- (lp (+ i 1) (+ sum 1))
- (lp (+ i 1) sum ))
- sum))))
-
-(defpair (pylist-count l q)
- (let lp ((l l) (sum 0))
- (if (pair? l)
- (if (eq? (car l) q)
- (lp (cdr l) (+ sum 1))
- (lp (cdr l) sum ))
- sum)))
-
-(define-method (pylist-count (o <p>) . l)
- (aif it (ref o 'count)
- (apply it l)
- (next-method)))
-
-;; extend!
-(define-method (pylist-extend! (o <py-list>) iter)
- (for ((x : iter)) ()
- (pylist-append! o x)))
-
-(define-method (pylist-extend! (o <p>) . l)
- (aif it (ref o 'extend)
- (apply it l)
- (next-method)))
-
-;; equal?
-(define-method (py-equal? (o1 <py-list>) (o2 <py-list>))
- (equal o1 o2))
-
-(define (equal o1 o2)
- (let ((n1 (slot-ref o1 'n))
- (n2 (slot-ref o2 'n))
- (vec1 (slot-ref o1 'vec))
- (vec2 (slot-ref o2 'vec)))
- (and
- (equal? n1 n2)
- (let lp ((i 0))
- (if (< i n1)
- (and (equal? (vector-ref vec1 i) (vector-ref vec2 i))
- (lp (+ i 1)))
- #t)))))
-
-(define-class <py-seq-iter> () o i n d)
-(define-class <py-list-iter> (<py-list>) i d)
-
-(name-object <py-seq-iter>)
-(name-object <py-list-iter>)
-
-(cpit <py-list-iter> (o (lambda (o i d)
- (slot-set! o 'i i)
- (slot-set! o 'd d))
- (list
- (slot-ref o 'i)
- (slot-ref o 'd))))
-
-(cpit <py-seq-iter> (o (lambda (o oo i n d)
- (slot-set! o 'o oo)
- (slot-set! o 'i i)
- (slot-set! o 'n i)
- (slot-set! o 'd d))
- (list
- (slot-ref o 'o)
- (slot-ref o 'i)
- (slot-ref o 'n)
- (slot-ref o 'd))))
-
-
-
-(define-method (write (o <py-list-iter>) . l)
- (define port (if (null? l) #t (car l)))
- (for ((x : o)) ((l '()))
- (cons x l)
- #:final
- (let ((l (reverse l)))
- (if (null? l)
- (format port "iter[]")
- (format port "iter[~a~{, ~a~}]" (car l) (cdr l))))))
-
-(define-method (write (o <py-seq-iter>) . l)
- (define port (if (null? l) #t (car l)))
- (for ((x : o)) ((l '()))
- (cons x l)
- #:final
- (let ((l (reverse l)))
- (if (null? l)
- (format port "iter[]")
- (format port "iter[~a~{, ~a~}]" (car l) (cdr l))))))
-
-
-;;WRAP-IN
-(define-method (wrap-in (o <py-list>))
- (let ((out (make <py-list-iter>)))
- (slot-set! out 'n (slot-ref o 'n ))
- (slot-set! out 'vec (slot-ref o 'vec))
- (slot-set! out 'i 0)
- (slot-set! out 'd 1)
- out))
-
-(define-method (wrap-in (o <vector>))
- (let ((out (make <py-list-iter>)))
- (slot-set! out 'n (vector-length o))
- (slot-set! out 'vec o)
- (slot-set! out 'i 0)
- (slot-set! out 'd 1)
- out))
-
-(define-method (py-reversed (o <py-list>))
- (let ((out (make <py-list-iter>)))
- (slot-set! out 'i (- (slot-ref o 'n) 1))
- (slot-set! out 'vec (slot-ref o 'vec))
- (slot-set! out 'n (slot-ref o 'n))
- (slot-set! out 'd -1)
- out))
-
-(define-method (py-reversed (o <p>))
- (aif it (ref o '__reversed__)
- (it)
- (let ((a (ref o '__getitem__))
- (n (ref o '__len__)))
- (if (and a n)
- (let ((ret (make <py-seq-iter>)))
- (slot-set! ret 'o a)
- (slot-set! ret 'i (n))
- (slot-set! ret 'n -1)
- (slot-set! ret 'd -1))
- (next-method)))))
-
-(define-method (wrap-in (o <p>))
- (aif it (ref o '__iter__)
- (let ((x (it)))
- (cond
- ((pair? x)
- (wrap-in x))
- (else
- x)))
- (let ((a (ref o '__getitem__)))
- (if a
- (let ((ret (make <py-seq-iter>)))
- (slot-set! ret 'o a)
- (slot-set! ret 'i 0)
- (slot-set! ret 'n -1)
- (slot-set! ret 'd 1))
- (next-method)))))
-
-
-(define-method (wrap-in (o <py-list-iter>)) o)
-
-(define-method (wrap-in (o <py-seq-iter>)) o)
-
-(define-method (wrap-in (o <py-seq-iter> )) o)
-
-;;NEXT
-(define-method (next (o <py-seq-iter>))
- (let ((i (slot-ref o 'i))
- (d (slot-ref o 'd))
- (a (slot-ref o 'a)))
- (let ((r (a i)))
- (slot-set! o 'i (+ i d))
- r)))
-
-(define-method (next (o <py-list-iter>))
- (let ((i (slot-ref o 'i ))
- (d (slot-ref o 'd))
- (n (slot-ref o 'n ))
- (vec (slot-ref o 'vec)))
- (if (> d 0)
- (if (< i n)
- (let ((ret (vector-ref vec i)))
- (slot-set! o 'i (+ i 1))
- ret)
- (throw StopIteration))
- (if (>= i 0)
- (let ((ret (vector-ref vec i)))
- (slot-set! o 'i (- i 1))
- ret)
- (throw StopIteration)))))
-
-;;INSERT
-(define-method (pylist-insert! (o <py-list>) i val)
- (let* ((vec (slot-ref o 'vec))
- (n (slot-ref o 'n))
- (i (if (< i 0) (+ n i) i)))
- (if (and (>= i 0) (<= i n))
- (let lp ((v val) (i i))
- (if (< i n)
- (let ((swap (vector-ref vec i)))
- (vector-set! vec i v)
- (lp swap (+ i 1)))
- (pylist-append! o v)))
- (raise IndexError "Wrong index in insert"))))
-
-(define-method (pylist-insert! (o <p>) . l)
- (aif it (ref o 'insert)
- (apply it l)
- (next-method)))
-
-
-;;REMOVE
-(define-method (pylist-remove! (o <py-list>) val)
- (let ((n (slot-ref o 'n ))
- (vec (slot-ref o 'vec)))
- (let lp ((i 0))
- (if (< i n)
- (let ((r (vector-ref vec i)))
- (if (equal? r val)
- (pylist-subset! o i (+ i 1) 1 '())
- (lp (+ i 1))))
- (raise ValueError "list removal has no element to remove")))))
-
-(define-method (pylist-remove! (o <p>) . l)
- (aif it (ref o 'remove)
- (apply it l)
- (next-method)))
-
-;; SORT!
-(define (id x) x)
-(define (sort- it key reverse)
- (catch #t
- (lambda ()
- (for ((x : it)) ((l '()) (i 0))
- (values (cons ((@ (guile) list) (key x) i x) l)
- (+ i 1))
-
- #:final
- (begin
- (let lp ((l (sort (reverse! l) (if reverse > <)))
- (i 0))
- (if (pair? l)
- (let ((x (car l)))
- (pylist-set! it i (caddr x))
- (lp (cdr l) (+ i 1))))))))
- (lambda x (raise (TypeError "problem in sorting layout")))))
-
-(define-method (pylist-sort! (o <py-list>) . l)
- (apply
- (lambda* (#:key (key id) (reverse #f))
- (sort- o key reverse))
- l))
-
-(define-method (pylist-sort! (o <p>) . l)
- (aif it (ref o 'sort)
- (apply it l)
- (next-method)))
-
-;; INDEX
-(define-method (pylist-index (o <py-list>) val . l)
- (let* ((n (slot-ref o 'n ))
- (vec (slot-ref o 'vec))
- (f (lambda (m) (if (< m 0) (+ m n) m))))
- (call-with-values
- (lambda ()
- (match l
- (()
- (values 0 n))
- ((x)
- (values (f x) n))
- ((x y)
- (values (f x) (f y)))))
- (lambda (n1 n2)
- (if (and (>= n1 0) (>= n2 0) (< n1 n) (<= n2 n))
- (let lp ((i n1))
- (if (< i n2)
- (let ((r (vector-ref vec i)))
- (if (equal? r val)
- i
- (lp (+ i 1))))
- (raise ValueError "could not find value in index fkn")))
- (raise IndexError "index out of scop in index fkn"))))))
-
-(define-method (pylist-index (o <string>) val . l)
- (let* ((n (string-length o))
- (f (lambda (m) (if (< m 0) (+ m n) m)))
- (val (if (and (string? val) (> (string-length val) 0))
- (string-ref val 0)
- val)))
- (call-with-values
- (lambda ()
- (match l
- (()
- (values 0 n))
- ((x)
- (values (f x) n))
- ((x y)
- (values (f x) (f y)))))
- (lambda (n1 n2)
- (if (and (>= n1 0) (>= n2 0) (< n1 n) (<= n2 n))
- (let lp ((i n1))
- (if (< i n2)
- (let ((r (string-ref o i)))
- (if (equal? r val)
- i
- (lp (+ i 1))))
- (raise ValueError "could not find value in index fkn")))
- (raise IndexError "index out of scop in index fkn"))))))
-
-(defpair (pylist-index o val . l)
- (let* ((n (length o))
- (f (lambda (m) (if (< m 0) (+ m n) m))))
- (call-with-values
- (lambda ()
- (match l
- (()
- (values 0 n))
- ((x)
- (values (f x) n))
- ((x y)
- (values (f x) (f y)))))
- (lambda (n1 n2)
- (if (and (>= n1 0) (>= n2 0) (< n1 n) (<= n2 n))
- (let lp ((i o))
- (if (pair? i)
- (let ((r (car i)))
- (if (equal? r val)
- i
- (lp (cdr i))))
- (raise ValueError "could not find value in index fkn")))
- (raise IndexError "index out of scop in index fkn"))))))
-
-(define-method (pylist-index (o <p>) . l)
- (aif it (ref o 'index)
- (apply it l)
- (next-method)))
-
-
-;; len
-
-
-(defpair (len l) (length l))
-(define-method (len x)
- (if (null? x)
- 0
- (error "not a suitable lengthof" x)))
-(define-method (len (v <vector>)) (vector-length v))
-(define-method (len (s <string>)) (string-length s))
-(define-method (len (o <py-list>)) (slot-ref o 'n))
-(define-method (len (o <p>))
- (aif it (ref o '__len__)
- (it)
- (next-method)))
-
-(define (bo x) (if x #t #f))
-(define-method (in x (l <py-tuple>)) (bo (member x (slot-ref l 'l))))
-(define-method (in x (l <pair>)) (bo (member x l)))
-(define-method (in x (l <vector>))
- (define n (vector-length l))
- (let lp ((i 0))
- (if (< i n)
- (if (equal? x (vector-ref l i))
- #t
- (lp (+ i 1)))
- #f)))
-
-(define-method (in (x <string>) (s <string>))
- (string-contains s x))
-
-(define-method (in (x <char>) (s <string>))
- (let/ec ret
- (string-for-each
- (lambda (ch)
- (if (eq? ch x)
- (ret #t)))
- s))
- #f)
-
-(define-method (in x (o <py-list>))
- (define l (slot-ref o 'vec))
- (define n (slot-ref o 'n))
- (let lp ((i 0))
- (if (< i n)
- (if (equal? x (vector-ref l i))
- #t
- (lp (+ i 1)))
- #f)))
-
-(define-method (in x (o <p>))
- (aif it (ref o '__contains__)
- (it x)
- (next-method)))
-
-(define-syntax-rule (defgen (op r s o1 o2) code ...)
- (begin
- (define-method (op (o1 <py-list>) (o2 <py-list>)) code ...)
- (define-method (op (o1 <pair>) (o2 <pair> )) code ...)
- (define-method (op (o1 <py-tuple>) o2)
- (op (slot-ref o1 'l) o2))
- (define-method (op o2 (o1 <py-tuple>))
- (op o2 (slot-ref o1 'l)))
- (define-method (op (o1 <vector>) (o2 <vector>)) code ...)
- (define-method (op (o1 <p>) o2)
- (aif it (ref o1 'r)
- (it o2)
- (next-method)))
- (define-method (op o1 (o2 <p>))
- (aif it (ref o2 's)
- (it o1)
- (next-method)))))
-
-(defgen (< __le__ __gt__ o1 o2)
- (let ((n1 (len o1))
- (n2 (len o2)))
- (for ((x1 : o1) (x2 : o2)) ()
- (if (< x1 x2)
- (break #t))
- (if (> x1 x2)
- (break #f))
- #:final
- (< n1 n2))))
-
-(defgen (<= __lt__ __ge__ o1 o2)
- (let ((n1 (len o1))
- (n2 (len o2)))
- (for ((x1 : o1) (x2 : o2)) ()
- (if (< x1 x2)
- (break #t))
- (if (> x1 x2)
- (break #f))
-
- #:final
- (<= n1 n2))))
-
-(defgen (> __ge__ __lt__ o1 o2)
- (let ((n1 (len o1))
- (n2 (len o2)))
- (for ((x1 : o1) (x2 : o2)) ()
- (if (> x1 x2)
- (break #t))
- (if (< x1 x2)
- (break #f))
-
- #:final
- (> n1 n2))))
-
-(defgen (>= __gt__ __le__ o1 o2)
- (let ((n1 (len o1))
- (n2 (len o2)))
- (for ((x1 : o1) (x2 : o2)) ()
- (if (> x1 x2)
- (break #t))
- (if (< x1 x2)
- (break #f))
-
- #:final
- (>= n1 n2))))
-
-(define-python-class list (<py-list>)
- (define __init__
- (letrec ((__init__
- (case-lambda
- ((self)
- (slot-set! self 'vec (make-vector 30))
- (slot-set! self 'n 0))
- ((self it)
- (__init__ self)
- (for ((i : it)) () (pylist-append! self i))))))
- __init__)))
-
-(name-object list)
-
-(define pylist list)
-
-(define-method (py-class (o <py-list>) list))
-
-(define (pylist-listing)
- (let ((l
- (to-pylist
- (map symbol->string
- '(append
- count
- extend
- index
- pop
- insert
- remove
- reverse
- sort
- __init__
- __le__
- __lt__
- __gt__
- __ge__
- __ne__
- __eq__
- __len__
- __init__
- __add__
- __mul__
- __rmul__
- __radd__
- __repr__
- __contains__
- __getattr__
- __setattr__
- __delattr__
- __delitem__
- __setitem__
- __iter__
- )))))
-
- (pylist-sort! l)
- l))
-
-(define (py-all x)
- (for ((i : x)) ()
- (if (not i)
- (break #f))
- #:final
- #t))
-
-(define (py-any . x)
- (for ((i : x)) ()
- (if i
- (break #t))
- #:final
- #f))
-
-(define py-list list)
diff --git a/modules/language/python/module.scm b/modules/language/python/module.scm
deleted file mode 100644
index 49a4366..0000000
--- a/modules/language/python/module.scm
+++ /dev/null
@@ -1,356 +0,0 @@
-(define-module (language python module)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (ice-9 match)
- #:use-module (system syntax)
- #:use-module (language python exceptions)
- #:use-module (language python yield)
- #:use-module (language python try)
- #:use-module (language python dir)
- #:use-module (language python list)
- #:use-module (language python dict)
- #:export (Module private public import __import__ modules))
-
-(define-syntax-rule (aif it p . x) (let ((it p)) (if it . x)))
-
-(define-syntax-rule (in-scheme x)
- (let ((lan (current-language)))
- (dynamic-wind
- (lambda () (current-language 'scheme))
- (lambda () x)
- (lambda () (current-language lan)))))
-
-(define (private mod)
- ((ref mod '__setprivate__) #t))
-(define (public mod)
- ((ref mod '__setprivate__) #f))
-
-(define e (list 'e))
-
-(define _k
- (lambda (k)
- (if (string? k)
- (string->symbol k)
- k)))
-
-(define _m
- (lambda (self)
- (if (rawref self '_private)
- (rawref self '_module)
- (rawref self '_export))))
-
-(define (globals self)
- (aif it (rawref self '_export)
- it
- (rawref self '_module)))
-
-(define-python-class Module ()
- (define _modules (make-hash-table))
- (define __setprivate__
- (lambda (self p)
- (rawset self '_private p)))
-
- (define _cont
- (lambda (self id pre l nm skip-error?)
- (if id
- (aif it (rawref self id)
- (begin
- ((ref it '__init__) pre l nm))
-
- (begin
- (rawset self id (Module pre l nm))
- (_make self pre nm skip-error?)))
- (aif it (and (module-defined? (current-module) (car nm))
- (module-ref (current-module) (car nm)))
- (if (module? it)
- (begin
- ((rawref it '__init__) pre l nm)
- it)
- (begin
- (_make self pre nm skip-error?)))
- (begin
- (_make self pre nm skip-error?))))))
-
- (define _contupdate
- (lambda (self id pre l nm)
- (if id
- (aif it (rawref self id)
- ((ref it '__update__) pre l nm)
- (rawset self id (Module pre l nm)))
- #f)))
-
- (define __init__
- (case-lambda
- ((self pre l nm)
- (match l
- ((name)
- (rawset self '_path (reverse (cons name pre)))
- (_cont self #f (cons name pre) #f (cons name nm) #f))
-
- ((name . (and l (name2 . _)))
- (rawset self '_path (reverse (cons name pre)))
- (_cont self name2 (cons name pre) l (cons name nm) #t))))
-
-
- ((self l nm)
- (_cont self #f l #f nm #f))
-
- ((self l)
- (if (pair? l)
- (if (and (> (length l) 3)
- (equal? (list (list-ref l 0)
- (list-ref l 1)
- (list-ref l 2))
- '(language python module)))
- (__init__ self (reverse '(language python module)) (cdddr l)
- '())
- (__init__ self '() (reverse l) '()))
- (__init__ self
- (append
- '(language python module)
- (map string->symbol
- (string-split l #\.))))))))
-
- (define __update__
- (case-lambda
- ((self pre l nm)
- (match l
- ((name)
- (_contupdate self #f (cons name pre) #f (cons name nm)))
-
- ((name . (and l (name2 . _)))
- (_contupdate self name2 (cons name pre) l (cons name nm)))))
-
-
- ((self l nm)
- (_contupdate self #f l #f nm))
-
- ((self l)
- (if (pair? l)
- (if (and (> (length l) 3)
- (equal? (list (list-ref l 0)
- (list-ref l 1)
- (list-ref l 2))
- '(language python module)))
- (__update__ self (reverse '(language python module))
- (cdddr l) '()))
- (__update__ self
- (map string->symbol
- (string-split l #\.)))))))
-
- (define _make
- (lambda (self l nm skip-error?)
- (rawset self '_private #t)
- (if (not (rawref self '_module))
- (begin
- (rawset self '__name__ (string-join
- (map symbol->string (reverse nm)) "."))
- (let* ((_module (in-scheme (resolve-module (reverse l))))
- (public-i (and _module (module-public-interface _module))))
- (if (and (not skip-error?) (not public-i))
- (raise (ModuleNotFoundError
- (format #f "No module named ~a"
- (rawref self '__name__)))))
-
- (rawset self '_export (module-public-interface _module))
- (rawset self '_module _module)
- (hash-set! _modules l self))))))
-
- (define __getattribute__
- (lambda (self k)
- (define (fail)
- (raise (AttributeError "getattr in Module")))
- (let ((k (_k k)))
- (cond
- ((memq k '(__iter__ __repr__ __dir__))
- (lambda () ((rawref self k) self)))
- (else
- (let ((x (aif it (rawref self '_export)
- (module-ref it k e)
- e)))
- (if (eq? e x)
- (let ((x (aif it (_m self)
- (module-ref it k e)
- e)))
- (if (eq? e x)
- (let ((x (rawref self k e)))
- (if (eq? e x)
- (fail)
- x))
- x))
- x)))))))
-
- (define __setattr__
- (lambda (self k v)
- (let ((k (_k k))
- (fail (lambda () (raise KeyError "setattr in Module" k))))
- (if (rawref self k)
- (fail)
- (aif m (rawref self '_module)
- (catch #t
- (lambda ()
- (if (module-defined? m k)
- (module-set! m k v)
- (module-define! m k v)))
- (lambda x (fail)))
- (fail))))))
-
- (define __global_setitem__
- (lambda (self k v)
- (let ((k (_k k))
- (fail (lambda () (raise KeyError "setattr in Module" k))))
- (aif m (rawref self '_module)
- (catch #t
- (lambda ()
- (if (module-defined? m k)
- (module-set! m k v)
- (begin
- (module-define! m k v)
- (module-export! m (list k)))))
- (lambda x (fail)))
- (fail)))))
-
- (define __global_getitem__
- (lambda (self k)
- (let ((k (_k k))
- (fail (lambda () (raise KeyError "global setattr in Module" k))))
- (aif m (rawref self '_export)
- (catch #t
- (lambda ()
- (if (module-defined? m k)
- (module-ref m k)
- (fail)))
- (lambda x (fail)))
- (fail)))))
-
- (define __global_get__
- (lambda (self k . es)
- (let ((k (_k k))
- (fail (lambda () (raise KeyError "global setattr in Module" k))))
- (aif m (rawref self '_export)
- (catch #t
- (lambda ()
- (if (module-defined? m k)
- (module-ref m k)
- (if (pair? es) (car es) #f)))
- (lambda x (fail)))
- (fail)))))
-
- (define __delattr__
- (lambda (self k)
- (define (fail) (raise KeyError "delattr in Module"))
- (aif m (rawref self '_module)
- (let ((k (_k k)))
- (if (module-defined? m k)
- (module-remove! m k)
- (raise KeyError "delattr of missing key in Module")))
- (fail))))
-
- (define __dir__
- (lambda (self)
- (let* ((h (slot-ref self 'h))
- (l '())
- (m (_m self))
- (add (lambda (k . u)
- (if (not (in "-" (symbol->string k)))
- (set! l (cons (symbol->string k) l))))))
- (hash-for-each add h)
- (if m (module-for-each add m))
- (aif it (rawref self '_export) (module-for-each add it))
- (hash-for-each add (slot-ref self 'h))
- (py-list l))))
-
-
- (define __iter__
- (lambda (self)
- (let* ((h (slot-ref self 'h))
- (l '())
- (m (_m self))
- (add (lambda (k v)
- (let ((k (symbol->string k)))
- (if (and (not (in "-" k)) (variable-bound? v))
- (set! l (cons (list k (variable-ref v))
- l)))))))
- (module-for-each add m)
- (module-for-each add (rawref self '_export))
- l)))
-
- (define __global_iter__
- (lambda (self)
- (let* ((m (globals self))
- (l '())
- (add (lambda (k v)
- (let ((k (symbol->string k)))
- (if (and (not (in "-" k)) (variable-bound? v))
- (set! l (cons (list k (variable-ref v))
- l)))))))
- (module-for-each add m)
- l)))
-
-
-
- (define __repr__
- (lambda (self) (format #f "Module(~a)" (rawref self '__name__))))
-
- (define __getitem__
- (lambda (self k)
- (define k (if (string? k) (string->symbol k) k))
- (__getattribute__ self k))))
-
-
-(define-syntax import
- (lambda (x)
- (syntax-case x ()
- ((_ (a ...) var)
- #`(import-f #,(case (syntax-local-binding #'var)
- ((lexical)
- #'var)
- ((global)
- #'(if (module-defined? (current-module)
- (syntax->datum #'var))
- var
- #f))
- (else
- #f)) a ...)))))
-
-(define (m? x) ((@ (language python module _python) isinstance) x Module))
-(define (import-f x f . l)
- (if x
- (if (m? x)
- (begin (apply (rawref x '__update__) x l) x)
- (apply f l))
- (apply f l)))
-
-(define-python-class ms (dict)
- (define __getitem__
- (lambda (self k)
- (if (string? k)
- (aif it (py-get (slot-ref self 't) k #f)
- it
- (let* ((l (map string->symbol (string-split k #\.)))
- (pth (cons* 'language 'python 'module l)))
- (Module (reverse pth) (reverse l))))
- (pylist-ref (slot-ref self 't) k))))
-
- (define get
- (lambda* (self k #:optional (e #f))
- (if (string? k)
- (aif it (py-get (slot-ref self 't) k #f)
- it
- (let* ((l (map string->symbol (string-split k #\.)))
- (pth (cons* 'language 'python 'module l)))
- (Module (reverse pth) (reverse l))))
- (py-get (slot-ref self 't) k e)))))
-
-
-
-(define modules (ms))
-(define (__import__ x)
- (let ((x (py-get modules x #f)))
- (if x
- (values)
- (let ((e (Module x)))
- (pylist-set! modules x e)
- e))))
-
-(set! (@@ (oop pf-objects) Module) Module)
diff --git a/modules/language/python/module/_blake2b.scm b/modules/language/python/module/_blake2b.scm
deleted file mode 100644
index dd24634..0000000
--- a/modules/language/python/module/_blake2b.scm
+++ /dev/null
@@ -1,10 +0,0 @@
-(define-module (language python module _blake2b)
- #:use-module (language python checksum)
- #:use-module (oop pf-objects)
- #:export (blake2b))
-
-(define-python-class blake2b (Summer)
- (define name "blake2b")
- (define digest_size 64)
-
- (define _command "/usr/bin/blake2bsum"))
diff --git a/modules/language/python/module/_blake2s.scm b/modules/language/python/module/_blake2s.scm
deleted file mode 100644
index 659dae0..0000000
--- a/modules/language/python/module/_blake2s.scm
+++ /dev/null
@@ -1,10 +0,0 @@
-(define-module (language python module _blake2s)
- #:use-module (language python checksum)
- #:use-module (oop pf-objects)
- #:export (blake2s))
-
-(define-python-class blake2s (Summer)
- (define name "blake2s")
- (define digest_size 32)
-
- (define _command "/usr/bin/blake2ssum"))
diff --git a/modules/language/python/module/_csv.scm b/modules/language/python/module/_csv.scm
deleted file mode 100644
index 5ac6159..0000000
--- a/modules/language/python/module/_csv.scm
+++ /dev/null
@@ -1,614 +0,0 @@
-(define-module (language python module _csv)
- #:use-module (ice-9 control)
- #:use-module (oop pf-objects)
- #:use-module (language python list)
- #:use-module (language python def)
- #:use-module (language python yield)
- #:use-module (language python for)
- #:use-module (language python string)
- #:use-module (language python exceptions)
- #:export (QUOTE_ALL QUOTE_MINIMAL QUOTE_NONNUMERIC QUOTE_NONE
- reader writer Error field_size_limit
- get_dialect register_dialect unregister_dialect
- list_dialects __doc__ Dialect __version__))
-
-(define __version__ "1.0")
-
-(define-syntax-rule (aif it p . l) (let ((it p)) (if it . l)))
-
-(define-python-class Error (Exception))
-
-(define-python-class Dialect ()
- (define __init__
- (lambda (self . x)
- #f)))
-
-(define *field-size* (make-fluid 131072))
-(define field_size_limit
- (case-lambda
- (() (fluid-ref *field-size*))
- ((x) (fluid-set! *field-size* x))))
-
-(define *dialects* (make-hash-table))
-(define register_dialect
- (lam (nm (= val None) (** keyw))
- (let ((newval (Dialect)))
- (define-syntax-rule (set- x y z key default)
- (set x 'key (hash-ref z (symbol->string 'key)
- (if (eq? y None)
- default
- (ref y 'key default)))))
- (define-syntax-rule (setter x y z ((k def) ...))
- (begin (set- x y z k def) ...))
-
- (setter newval val keyw
- ((delimiter ",")
- (doublequote #t)
- (escapechar None)
- (lineterminator "\r\n")
- (quotechar "\"")
- (quoting 'minimal)
- (skipinitialspace #f)
- (strict #f)))
-
- (hash-set! *dialects* nm newval))))
-
-(define (get_dialect nm)
- (hash-ref *dialects* nm None))
-(define (unregister_dialect nm)
- (hash-remove! *dialects* nm))
-
-(define (list_dialects)
- (let ((ret '()))
- (hash-for-each
- (lambda (k v)
- (set! ret (cons k ret)))
- *dialects*)
- (py-list ret)))
-
-(define __doc__
-"CSV parsing and writing.
-
-This module provides classes that assist in the reading and writing
-of Comma Separated Value (CSV) files, and implements the interface
-described by PEP 305. Although many CSV files are simple to parse,
-the format is not formally defined by a stable specification and
-is subtle enough that parsing lines of a CSV file with something
-like line.split(\",\") is bound to fail. The module supports three\n
-basic APIs: reading, writing, and registration of dialects.
-
-
-DIALECT REGISTRATION:
-
-Readers and writers support a dialect argument, which is a convenient
-handle on a group of settings. When the dialect argument is a string,
-it identifies one of the dialects previously registered with the module.
-If it is a class or instance, the attributes of the argument are used as
-the settings for the reader or writer:
-
- class excel:
- delimiter = ','
- quotechar = '\"'
- escapechar = None
- doublequote = True
- skipinitialspace = False
- lineterminator = '\\r\\n'
- quoting = QUOTE_MINIMAL
-
-SETTINGS:
-
- * quotechar - specifies a one-character string to use as the
- quoting character. It defaults to '\"'.
- * delimiter - specifies a one-character string to use as the
- field separator. It defaults to ','.
- * skipinitialspace - specifies how to interpret whitespace which
- immediately follows a delimiter. It defaults to False, which
- means that whitespace immediately following a delimiter is part
- of the following field.
- * lineterminator - specifies the character sequence which should
- terminate rows.
- * quoting - controls when quotes should be generated by the writer.
- It can take on any of the following module constants:
-
- csv.QUOTE_MINIMAL means only when required, for example, when a
- field contains either the quotechar or the delimiter
- csv.QUOTE_ALL means that quotes are always placed around fields.
- csv.QUOTE_NONNUMERIC means that quotes are always placed around
- fields which do not parse as integers or floating point
- numbers.
- csv.QUOTE_NONE means that quotes are never placed around fields.
- * escapechar - specifies a one-character string used to escape
- the delimiter when quoting is set to QUOTE_NONE.
- * doublequote - controls the handling of quotes inside fields. When
- True, two consecutive quotes are interpreted as one during read,
- and when writing, each quote character embedded in the data is
- written as two quotes")
-
-(define QUOTE_ALL 'all)
-(define QUOTE_MINIMAL 'minimal)
-(define QUOTE_NONNUMERIC 'nonnumeric)
-(define QUOTE_NONE 'none)
-
-(define e (list 'fail))
-
-(define-syntax-rule (bif it p a b)
- (let ((it p))
- (if (eq? it e)
- b
- a)))
-
-(define-syntax-rule (chr a b c)
- (let ((x
- (bif it a
- it
- (bif it b
- it
- c))))
- (if (string? x)
- (string-ref x 0)
- #f)))
-
-(define-syntax-rule (oor a b c)
- (bif it a
- it
- (bif it b
- it
- c)))
-
-(define-syntax-rule (str a b c) (oor a b c))
-
-(def (reader csvfile (= dialect "excel") (** fmtparams))
- (let*
- ((dialect (get_dialect dialect))
-
- (delimiter (chr (py-get fmtparams "delimiter" e)
- (ref dialect 'Delimiter e)
- ","))
-
- (doublequote (oor (py-get fmtparams "doublequote" e)
- (ref dialect 'doublequote e)
- #t))
-
- (escapechar (chr (py-get fmtparams "escapechar" e)
- (ref dialect 'escapechar e)
- None))
-
- (lineterminator (str (py-get fmtparams "lineterminator" e)
- (ref dialect 'lineterminator e)
- "\r\n"))
-
- (quotechar (chr (py-get fmtparams "quotechar" e)
- (ref dialect 'quotechar e)
- "\""))
-
- (quoting (oor (py-get fmtparams "quoting" e)
- (ref dialect 'quoting e)
- QUOTE_MINIMAL))
-
- (skipispace (oor (py-get fmtparams "skipinitialspace" e)
- (ref dialect 'skipinitialspace e)
- #t))
-
- (strict (oor (py-get fmtparams "strict" e)
- (ref dialect 'strict e)
- #f)))
- ((make-generator ()
- (lambda (yield)
- (let/ec ret
- (let ((iter (wrap-in csvfile)))
- (let lp0 ((state 'start) (r '()) (l '()))
- (define-syntax-rule (raise- s) (if strict (raise s)))
- (define-syntax-rule (mk-wrap wrap state)
- (define (wrap r)
- (let* ((x (list->string (reverse r)))
- (x (if (eq? state 'numeric)
- (string->number x)
- x)))
- x)))
- (mk-wrap wrap1 state)
- (let ((s (catch #t (lambda () (next iter))
- (lambda x
- (cond
- ((or (eq? state 'line-end)
- (eq? state 'start))
- (ret (reverse l)))
-
- ((eq? state 'field-end)
- (ret (reverse (cons (wrap1 r) l))))
-
- ((or (eq? state 'numeric)
- (eq? state 'normal))
- (ret (reverse (cons (wrap1 r) l))))
-
- (else
- (raise- (Error "missing quote"))
- (ret (reverse (cons (wrap1 r) l)))))))))
-
- (let* ((n (len s))
- (? (= n 1)))
- (let lp ((i 0) (state state) (r r) (l l))
- (mk-wrap wrap state)
- (define-syntax-rule (raise- s)
- (if strict
- (raise s)
- (lp (+ i 1) state r l)))
-
- (define (end j ch)
- (if (eq? ch #\newline)
- (cond
- ((eq? state 'start)
- (begin
- (yield (py-list (reverse l)))
- (if (= n j)
- (lp0 'start '() '())
- (lp (+ j 1) 'line-end '() '()))))
-
- ((eq? state 'quote)
- (if strict
- (raise (Error "newline in quote"))
- (lp j 'normal r l)))
-
- ((eq? state 'line-end)
- (if (= n j)
- (lp0 'start r l)
- (lp (+ j 1) state r l)))
-
- (else
- (yield (reverse (cons (wrap r) l)))
- (if (= n j)
- (lp0 'start '() '())
- (lp (+ j 1) 'line-end '() '()))))
- (if (= j n)
- (begin
- (yield (reverse (cons* "" (wrap r) l)))
- (lp0 'start '() '()))
- (lp (+ j 1) 'start '() (cons (wrap r) l)))))
-
- (define (do-quotechar ch)
- (cond
- ((eq? state 'doublequote)
- (lp (+ i 1) 'quote (cons ch r) l))
-
- ((and (pair? state) (eq? (car state) 'escape))
- (lp (+ i 1) (cdr state) (cons ch r) l))
-
- ((eq? state 'quote)
- (if doublequote
- (if (and (< (+ i 1) n)
- (equal? quotechar
- (string-ref s (+ i 1))))
- (lp (+ i 2) state (cons quotechar r) l)
- (lp (+ i 1) 'doublequote r l))
- (lp (+ i 1) 'field-end r l)))
-
- ((eq? state 'start)
- (if (or (eq? quoting 'minimal)
- (eq? quoting 'all)
- (eq? quoting 'nonnumeric))
- (lp (+ i 1) 'quote r l)
- (raise-
- (Error
- "QOUTE_NONE supports no quoteing"))))
-
- (else
- (raise- (Error "wrong quoting found")))))
-
- (define (do-whitespace ch)
- (cond
- ((eq? state 'doublequote)
- (raise-
- (Error "whitespace after end of quote")))
-
- ((pair? state)
- (lp (+ i 1) (cdr state) r l))
-
- ((eq? state 'start)
- (if skipispace
- (lp (+ i 1) state r l)
- (if (or (eq? quoting 'minimal)
- (eq? quoting 'none)
- (eq? quoting 'nonnumeric))
- (lp i 'normal r l)
- (raise-
- (Error "whitespace outside quote")))))
-
- ((or (eq? state 'normal)
- (eq? state 'quote))
- (lp (+ i 1) state (cons ch r) l))
-
- ((eq? state 'numeric)
- (raise- (Error "whitespace in numeric field")))))
-
- (define (do-esc-quote)
- (if (< (+ i 1) n)
- (let ((ch2 (string-ref s (+ i 1))))
- (cond
- ((and (eq? state 'quoting)
- (eq? ch2 quotechar))
- (lp (+ i 2) state (cons quotechar r) l))
-
- ((eq? ch2 delimiter)
- (lp (+ i 2) state (cons delimiter r) l))
-
- ((eq? ch2 escapechar)
- (lp (+ i 2) state (cons escapechar r) l))
-
- (else
- (lp (+ i 2) state r l))))
- (lp (+ i 1) (cons 'escape state) r l)))
-
- (define (do-escape ch)
- (cond
- ((pair? state)
- (lp (+ i 1) (cdr state) (cons ch r) l))
-
- ((eq? state 'doublequote)
- (raise
- (Error
- "no field or line end after quote, found esc")))
-
- ((eq? state 'start)
- (if (eq? quoting 'none)
- (lp i 'normal r l)
- (raise- (Error "escapecharacter in nonquote"))))
-
- ((eq? state 'normal)
- (if (eq? quoting 'none)
- (do-esc-quote)
- (raise- (Error "escapecharacter in nonequote"))))
-
- ((eq? state 'numeric)
- (raise- (Error "escacpechar in numeric field")))
-
- ((eq? state 'quote)
- (do-esc-quote))
-
- ((eq? state 'end)
- (raise- (Error "escapechar after quote")))))
-
- (define (do-delim ch)
- (cond
- ((eq? state 'start)
- (end i ch))
-
- ((eq? state 'quote)
- (lp (+ i 1) state (cons ch r) l))
-
- ((eq? state 'normal)
- (end i ch))
-
- ((eq? state 'doublequote)
- (lp (+ i 1) 'start '() (cons (wrap r) l)))
-
- ((eq? state 'numeric)
- (end i ch))))
-
- (define (do-line-end ch)
- (cond
- ((eq? state 'quote)
- (lp (+ i 1) state (cons ch r) l))
-
- ((pair? state)
- (lp (+ i 1) (cdr state) (cons ch r) l))
-
- ((eq? state 'field-end)
- (end i ch))
-
- ((eq? state 'line-end)
- (lp (+ i 1) 'line-end r l))
-
- (else
- (end i #\newline))))
- (if (< i n)
- (let ((ch (string-ref s i)))
- (cond
- ((or (eq? ch #\newline)
- (eq? ch #\return))
- (do-line-end ch))
-
- ((eq? state 'line-end)
- (lp i 'start r l))
-
- ((eq? ch delimiter)
- (do-delim ch))
-
- ((eq? state 'field-end)
- (raise-
- (Error "no ending char after field-end")))
-
- ((or (eq? ch #\space) (eq? ch #\tab))
- (do-whitespace ch))
-
- ((eq? ch quotechar)
- (do-quotechar ch))
-
- ((eq? ch escapechar)
- (do-escape ch))
-
- ((eq? state 'numeric)
- (if (or (eq? ch #\.)
- (eq? ch #\-)
- (eq? ch #\e)
- (eq? ch #\E)
- (char-numeric? ch))
- (lp (+ i 1) state (cons ch r) l)
- (raise-
- (Error "nonumeric in numeric field"))))
-
- ((eq? state 'start)
- (cond
- ((eq? quoting 'all)
- (raise-
- (Error
- "nonquoted field when all should be quoted")))
-
- ((eq? quoting 'nonnumeric)
- (lp i 'numeric r l))
-
- (else
- (lp i 'normal r l))))
-
- ((or (eq? state 'quote) (eq? state 'normal))
- (lp (+ i 1) state (cons ch r) l))
-
- ((eq? state 'doublequote)
- (raise- (Error "spur char after end of quote")))
-
- ((pair? state)
- (lp (+ i 1) (cdr state) r l))
-
- (else
- (error "Bug in csv reader"))))
- (if ?
- (lp0 state r l)
- (end i #\newline))))))))))))))
-
-(define-python-class writer ()
- (define __init__
- (lam (self csvfile (= dialect "excel") (** fmtparams))
- (set! dialect (if (string? dialect)
- (get_dialect dialect)
- dialect))
- (let* ((hash (make-hash-table)))
- (hash-set! hash 'delimiter
- (chr (py-get fmtparams "delimiter" e)
- (ref dialect 'Delimiter e)
- ","))
-
- (hash-set! hash 'doublequote
- (oor (py-get fmtparams "doublequote" e)
- (ref dialect 'doublequote e)
- #t))
-
- (hash-set! hash 'escapechar
- (chr (py-get fmtparams "escapechar" e)
- (ref dialect 'escapechar e)
- None))
-
- (hash-set! hash 'lineterminator
- (str (py-get fmtparams "lineterminator" e)
- (ref dialect 'lineterminator e)
- "\r\n"))
-
- (hash-set! hash 'quotechar
- (chr (py-get fmtparams "quotechar" e)
- (ref dialect 'quotechar e)
- "\""))
-
- (hash-set! hash 'quoting
- (oor (py-get fmtparams "quoting" e)
- (ref dialect 'quoting e)
- QUOTE_MINIMAL))
-
- (hash-set! hash 'skipispace
- (oor (py-get fmtparams "skipinitialspace" e)
- (ref dialect 'skipinitialspace e)
- #t))
-
- (hash-set! hash 'strict
- (oor (py-get fmtparams "strict" e)
- (ref dialect 'strict e)
- #f))
-
- (set self 'csvfile csvfile)
- (set self '_hash csvfile))))
-
- (define writerow
- (lambda (self l)
- (define (write x)
- ((ref (ref self 'csvfile) 'write) x))
-
- (define (get-str x) (if (string? x) x (scm-str x)))
-
- (let* ((hash (ref self '_hash))
- (delimiter (hash-ref hash 'delimiter))
- (doublequote (hash-ref hash 'doublequote))
- (escapechar (hash-ref hash 'escapechar))
- (lineterminator (hash-ref hash 'lineterminator))
- (quotechar (hash-ref hash 'quotechar))
- (quoting (hash-ref hash 'quoting))
- (skipispace (hash-ref hash 'skipinitialspace))
- (strict (hash-ref hash 'strict))
- (terms (string->list lineterminator)))
-
- (define (has-escape-1 x)
- (let ((n (len x)))
- (let lp ((i 0))
- (if (< i n)
- (let ((a (string-ref x i)))
- (if (or (eq? a #\,) (member a terms))
- #t
- (lp (+ i 1))))
- #f))))
-
- (define (has-escape-2 x)
- (let ((n (len x)))
- (let lp ((i 0))
- (if (< i n)
- (let ((a (string-ref x i)))
- (if (or (eq? a quotechar)
- (eq? a delimiter)
- (member a terms))
- #t
- (lp (+ i 1))))
- #f))))
-
- (define (quote-it x)
- (let ((n (len x)))
- (let lp ((i 0) (r '()))
- (if (< i n)
- (let ((a (string-ref x i)))
- (cond
- ((eq? a quotechar)
- (if doublequote
- (lp (+ i 1) (cons* a a r))
- (if escapechar
- (lp (+ i 1) (cons* a escapechar r))
- (raise (Error "no escapechar defined")))))
- ((eq? a escapechar)
- (lp (+ i 1) (cons* a a r)))
- (else
- (lp (+ i 1) (cons a r)))))
- (list->string (reverse! r))))))
-
- (define (is-numeric x)
- (catch #t
- (lambda ()
- (string->number x))
- (lambda x #f)))
-
-
-
- (for ((x : l)) ((r '()))
- (let/ec ret
- (cons
- (cond
- ((eq? quoting 'none)
- (let ((x (get-str x)))
- (if (has-escape-1 x)
- (if strict
- (raise (Error "None quoting and nonspecial chars"))
- (ret r))
- x)))
-
- ((eq? quoting 'nonnumeric)
- (let ((x (get-str x)))
- (aif it (is-numeric x)
- (number->string it)
- (quote-it x))))
-
- ((eq? quoting 'none)
- (get-str x))
-
- ((eq? quoting 'minimal)
- (let ((x (get-str x)))
- (if (has-escape-2 x)
- (quote-it x)
- x))))
- r)
- #:final
- (write
- (string-join
- (reverse
- (cons lineterminator r)) (string-ref delimiter 0)))))))))
-
diff --git a/modules/language/python/number.scm b/modules/language/python/number.scm
deleted file mode 100644
index 3744fec..0000000
--- a/modules/language/python/number.scm
+++ /dev/null
@@ -1,637 +0,0 @@
-(define-module (language python number)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (rnrs bytevectors)
- #:use-module (language python hash)
- #:use-module (language python list)
- #:use-module (language python try)
- #:use-module (language python for)
- #:use-module (language python def)
- #:use-module (language python exceptions)
- #:use-module (language python bytes)
- #:use-module (language python persist)
- #:export (py-int py-float py-complex
- py-/ py-logand py-logior py-logxor py-abs py-trunc
- py-lshift py-rshift py-mod py-floordiv py-round py-iadd
- py-lognot py-matmul
- <py-int> <py-float> <py-complex>
- py-divmod pyfloat-listing pyint-listing pycomplex-listing
- py-as-integer-ratio py-conjugate py-fromhex py-hex py-imag
- py-is-integer py-real hex py-bin py-index
- py-ifloordiv py-ilshift py-imod py-imul py-imatmul
- py-bit-length py-to-bytes
- py-ilogior py-ilogand py-ipow py-isub py-i/
- py-irshift py-ilogxor))
-
-(define-method (> (o <boolean>) x)
- (> (if o 1 0) x))
-(define-method (> x (o <boolean>))
- (> x (if o 1 0)))
-(define-method (>= (o <boolean>) x)
- (>= (if o 1 0) x))
-(define-method (>= x (o <boolean>))
- (>= x (if o 1 0)))
-(define-method (< (o <boolean>) x)
- (< (if o 1 0) x))
-(define-method (< x (o <boolean>))
- (< x (if o 1 0)))
-(define-method (<= (o <boolean>) x)
- (<= (if o 1 0) x))
-(define-method (<= x (o <boolean>))
- (<= x (if o 1 0)))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-syntax-rule (mki py-iadd __iadd__)
- (define (py-iadd x y)
- ((ref x '__iadd__) y)))
-
-(mki py-iadd __iadd__)
-
-(mki py-matmul __matmul__)
-(mki py-ifloordiv __ifloordiv__)
-(mki py-ilshift __ilshift__)
-(mki py-imod __imod__)
-(mki py-imul __imul__)
-(mki py-imatmul __imatmul__)
-(mki py-ilogior __ior__)
-(mki py-ilogand __iand__)
-(mki py-ipow __ipow__)
-(mki py-isub __isub__)
-(mki py-irshift __irshift__)
-(mki py-ilogxor __ixor__)
-(mki py-i/ __itruediv__)
-
-
-(define-class <py-int> () x)
-(define-class <py-float> () x)
-(define-class <py-complex> () x)
-
-(name-object <py-int>)
-(name-object <py-float>)
-(name-object <py-complex>)
-
-(define-syntax-rule (mk <py-int>)
- (cpit <py-int> (o (lambda (o x) (slot-set! o 'x x)) (list (slot-ref o 'x)))))
-
-(mk <py-int>)
-(mk <py-float>)
-(mk <py-complex>)
-
-(define-syntax-rule (b0 op)
- (begin
- (define-method (op (o1 <py-int>) o2)
- (op (slot-ref o1 'x) o2))
- (define-method (op (o1 <py-float>) o2)
- (op (slot-ref o1 'x) o2))
- (define-method (op (o1 <py-complex>) o2)
- (op (slot-ref o1 'x) o2))
- (define-method (op o2 (o1 <py-int>))
- (op o2 (slot-ref o1 'x)))
- (define-method (op o2 (o1 <py-complex>))
- (op o2 (slot-ref o1 'x)))
- (define-method (op o2 (o1 <py-float>))
- (op o2 (slot-ref o1 'x)))))
-
-(define-syntax-rule (mk-biop1 mk-biop0 op r1)
- (begin
- (mk-biop0 op)
- (define-method (op (o <p>) v)
- (aif it (ref o 'r1)
- (it v)
- (next-method)))))
-
-(define-syntax-rule (mk-biop2 mk-biop0 rop op r1 r2)
- (begin
- (define-syntax-rule (rop x y) (op y x))
- (mk-biop1 mk-biop0 op r1)
- (define-method (op v (o <p>))
- (aif it (ref o 'r2)
- (it v)
- (next-method)))))
-
-(define-syntax-rule (i0 op)
- (begin
- (define-method (op (o1 <py-int>) o2)
- (op (slot-ref o1 'x) o2))
- (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__)
-
-(mk-biop1 b0 < __le__)
-(mk-biop1 b0 > __ge__)
-(mk-biop1 b0 <= __lt__)
-(mk-biop1 b0 >= __gt__)
-(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>))
- (ash o1 (- o2)))
-
-(mk-biop2 i0 py-rlshift py-lshift __lshift__ __rlshift__)
-(mk-biop2 i0 py-rrshift py-rshift __rshift__ __rrshift__)
-
-(define-method (py-logand (o1 <integer>) (o2 <integer>))
- (logand o1 o2))
-(define-method (py-logior (o1 <integer>) (o2 <integer>))
- (logior o1 o2))
-(define-method (py-logxor (o1 <integer>) (o2 <integer>))
- (logxor o1 o2))
-(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)))
-(define-method (py-/ (o1 <number>) (o2 <number>))
- (/ o1 o2))
-
-(define-method (py-divmod (o1 <integer>) (o2 <integer>))
- (values
- (floor-quotient o1 o2)
- (modulo o1 o2)))
-
-(define-method (py-divmod (o1 <number>) (o2 <number>))
- (values
- (floor-quotient o1 o2)
- (floor-remainder o1 o2)))
-
-(define-method (py-floordiv (o1 <number>) (o2 <number>))
- (floor-quotient o1 o2))
-
-(mk-biop2 b0 py-rfloordiv py-floordiv __floordiv__ __rfloordiv__)
-(mk-biop2 b0 py-rdivmod py-divmod __divmod__ __rdivmod__)
-(mk-biop2 b0 py-r/ py-/ __truediv__ __rtruediv__)
-
-(mk-biop2 i0 py-rlogand py-logand __and__ __rand__)
-(mk-biop2 i0 py-rlogior py-logior __or__ __ror__)
-(mk-biop2 i0 py-rlogxor py-logxor __xor__ __rxor__)
-
-(define-method (py-mod (o1 <integer>) (o2 <integer>))
- (modulo o1 o2))
-(define-method (py-mod (o1 <real>) (o2 <real>))
- (floor-remainder o1 o2))
-
-(mk-biop2 i0 py-rmod py-mod __mod__ __rmod__)
-
-
-(define-method (py-floor (o1 <integer>)) o1)
-(define-method (py-floor (o1 <number> )) (inexact->exact (floor o1)))
-(define-method (py-trunc (o1 <integer>)) (exact->inexact o1))
-(define-method (py-trunc (o1 <number> ))
- (floor o1))
-
-(define-syntax-rule (u0 f)
- (begin
- (define-method (f (o <py-int> )) (f (slot-ref o 'x)))
- (define-method (f (o <py-float>)) (f (slot-ref o 'x)))
- (define-method (f (o <py-complex>)) (f (slot-ref o 'x)))))
-
-(define-syntax-rule (i0 f)
- (begin
- (define-method (f (o <py-int> )) (f (slot-ref o 'x)))))
-
-(define-syntax-rule (mk-unop u0 f r)
- (begin
- (u0 f)
- (define-method (f (o <p>))
- ((ref o 'r)))))
-
-(u0 py-hash )
-(mk-unop u0 - __neg__ )
-(mk-unop u0 py-trunc __trunc__ )
-(mk-unop i0 py-lognot __invert__)
-
-(define-method (py-bit-length (i <integer>))
- (integer-length (abs i)))
-
-(define-method (py-conjugate (i <complex>))
- (make-rectangular (real-part i) (- (imag-part i))))
-(define-method (py-conjugate (i <number>)) i)
-
-(define-method (py-imag (i <complex>)) (imag-part i))
-(define-method (py-imag (i <number>)) i)
-
-(define-method (py-real (i <complex>)) (real-part i))
-(define-method (py-real (i <number>)) i)
-
-(define-method (py-denominator (o <integer>)) 0)
-(define-method (py-denominator (o <real>))
- (denominator (inexact->exact o)))
-
-(define-method (py-numerator (o <integer>)) o)
-(define-method (py-numerator (o <real> ))
- (numerator (inexact->exact o)))
-
-(define-method (py-as-integer-ratio (o <integer>))
- (list o 0))
-(define-method (py-as-integer-ratio (o <real>))
- (let ((r (inexact->exact o)))
- (list (numerator r) (denominator r))))
-
-(define-method (py-fromhex (o <real>))
- (error "1.2.fromhex('0x1.ap4') is not implemented"))
-
-(define (py-hex x)
- (+ "0x" (number->string (py-index x) 16)))
-
-(define-method (py-is-integer (o <real>))
- (= 1 (denominator (inexact->exact o))))
-(define-method (py-is-integer (o <integer>)) #t)
-
-(define-method (hex (o <integer>))
- (+ "0x" (number->string o 16)))
-
-(define-method (py-abs (o <complex>))
- (magnitude o))
-(define-method (py-abs (o <number>))
- (abs o))
-(define-method (py-index (o <integer>)) o)
-(mk-unop u0 py-abs __abs__)
-(mk-unop u0 py-conjugate conjugate)
-(mk-unop u0 py-imag imag)
-(mk-unop u0 py-real real)
-(mk-unop u0 py-denominator denominator)
-(mk-unop u0 py-numerator numerator)
-(mk-unop u0 py-as-integer-ratio as_integer_ratio)
-(mk-unop u0 py-fromhex fromhex)
-(mk-unop i0 hex __hex__)
-(mk-unop u0 py-is-integer is_integer)
-(mk-unop u0 py-index __index__)
-
-(define-method (write (o <py-float>) . l)
- (apply write (slot-ref o 'x) l))
-(define-method (write (o <py-int>) . l)
- (apply write (slot-ref o 'x) l))
-
-(define-method (py-from-bytes (o <p>) . l)
- (aif it (ref o 'from_bytes)
- (apply it l)
- (next-method)))
-
-(define-method (py-from-bytes (o <integer>) . l)
- (apply py-from-bytes int l))
-
-(define-method (py-to-bytes (o <p>) . l)
- (aif it (ref o 'to_bytes)
- (apply it l)
- (aif it (ref o '__int__)
- (apply py-to-bytes (int) l)
- (next-method))))
-
-(define-method (py-to-bytes (o <integer>) . l)
- (apply
- (lam (length (= byteorder "big") (= signed #f))
- (let ((big? (cond
- ((equal? byteorder "little")
- #f)
- ((equal? byteorder "big")
- #t)
- (else
- (raise (ValueError "to_bytes with wrong byteorder"))))))
-
- (if (and (< o 0) (not signed))
- (raise (OverflowError
- "to_byted, integer negative but not signed")))
-
- (if signed
- (let ((mask (ash 1 (- (* 8 length) 1))))
- (set! o (+ mask o))))
-
- (let lp ((o o) (l '()))
- (if (= o 0)
- (let ((n (len l)))
- (if (> n length)
- (raise (OverflowError
- "to bytes number larger than size")))
- (let lp ((i (len l)) (l l))
- (if (< i length)
- (lp (+ i 1) (cons 0 l))
- (begin
- (if signed
- (let ((x (car l)))
- (if (> (logand x #x80) 0)
- (raise
- "OverflowError to large number compared to size in to_bytes"))
- (set-car! l (logior #x80 x))))
-
- (bytes
- (if big?
- l
- (reverse l)))))))
- (lp (ash o -8) (cons (logand o #xff) l))))))
- l))
-
-
-
-
-
-(define-python-class int (<py> <py-int>)
- (define from_bytes
- (class-method
- (lam (self bytes byteorder (= signed #f))
- (for ((x : bytes)) ((l '()))
- (cons
- (let ((i (if (and (number? x) (integer? x))
- x
- (list-ref (bv-scm x) 0))))
- (if (not (and (number? i) (integer? i)
- (>= i 0) (<= i 356)))
- (raise (ValueError "wrong bytevector in from_bytes"))
- i))
- l)
- #:final
- (begin
- (if (equal? byteorder "little")
- (set! l (reverse l)))
- (let lp ((s 0) (i 0) (l l))
- (if (pair? l)
- (let ((x (car l)))
- (if (null? (cdr l))
- (if (and signed (not (= 0 (logand x #x80))))
- (set! x (logand x #x7f))
- (set! signed #f)))
- (lp (logior s (ash x i)) (+ i 8) (cdr l)))
- (if signed
- (let ((mask (ash 1 (- i 1))))
- (- s mask))
- s))))))))
- (define __newobj__
- (lambda (cls n)
- (let ((obj ((rawref object '__new__) cls)))
- (slot-set! obj 'x (__new__ cls n))
- obj)))
-
- (define __new__
- (letrec ((__new__
- (case-lambda
- ((self)
- 0)
-
- ((self n)
- (let lp ((n n))
- (cond
- ((and (number? n) (integer? n))
- (inexact->exact n))
- ((boolean? n)
- (if n 1 0))
- ((number? n)
- (lp (py-floor n)))
-
- ((string? n)
- (lp (aif it (string->number n)
- it
- (raise
- (ValueError
- "invalid literal for int() with base 10")))))
- (else
- (catch #t
- (lambda ()
- (aif it (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)
- (__new__ self (string->number n k))))))
- __new__)))
-
-(name-object int)
-
-(define (proj? x)
- (if (number? x)
- x
- (and
- (or (is-a? x <py-complex>)
- (is-a? x <py-int>)
- (is-a? x <py-float>))
- (slot-ref x 'x))))
-
-(define (projc? x)
- (if (number? x)
- (cond
- ((or (integer? x) (rational? x))
- (exact->inexact x))
- ((real? x)
- x)
- (raise (ValueError "cannot make a float out of a complex")))
- (and
- (or (is-a? x <py-complex>)
- (is-a? x <py-int>)
- (is-a? x <py-float>))
- (let ((ret (slot-ref x 'x)))
- (if (not (complex? ret))
- ret
- #f)))))
-
-(define-python-class float (<py> <py-float>)
- (define __init__
- (case-lambda
- ((self n)
- (let lp ((n n))
- (cond
- ((projc? n) =>
- (lambda (x) x))
- ((string? n)
- (cond
- ((equal? n "nan")
- (nan))
- ((equal? n "inf")
- (inf))
- ((equal? n "-inf")
- (- (inf)))
- (else
- (string->number n))))
- ((is-a? n <py-float>)
- (slot-ref n '__float__)))))))
-
- (define __new__
- (lambda (cls a . l)
- (__init__ cls a))))
-
-
-
-
-(name-object float)
-
-(define-python-class py-complex (<py> <py-complex>)
- (define __init__
- (case-lambda
- ((self n)
- (cond
- ((proj? n) =>
- (lambda (n)
- (slot-set! self 'x n)))
- (else
- (raise ValueError "could not make complex from " n))))
- ((self n m)
- (cond
- ((projc? n) =>
- (lambda (n)
- (cond
- ((projc? m)
- (lambda (m)
- (slot-set! self 'x (make-rectangular n m))))
- (else
- (raise ValueError "could not make complex from " n m)))))
- (else
- (raise ValueError "could not make complex from " n m)))))))
-
-(name-object py-complex)
-
-(define-method (py-class (o <integer> )) int)
-(define-method (py-class (o <real> )) float)
-(u0 py-class)
-
-(define py-int int)
-(define py-float float)
-
-(define-method (mk-int (o <number>)) (slot-ref (py-int o) 'x))
-(define-method (mk-float (o <number>)) (slot-ref (py-float o) 'x))
-
-(mk-unop u0 mk-int __int__)
-(mk-unop u0 mk-float __float__)
-
-(define (pyint-listing)
- (let ((l
- (to-pylist
- (map symbol->string
- '(__abs__ __add__ __and__ __class__ __cmp__ __coerce__
- __delattr__ __div__ __divmod__ __doc__ __float__
- __floordiv__ __format__ __getattribute__
- __getnewargs__ __hash__ __hex__ __index__ __init__
- __int__ __invert__ __long__ __lshift__ __mod__
- __mul__ __neg__ __new__ __nonzero__ __oct__ __or__
- __pos__ __pow__ __radd__ __rand__ __rdiv__
- __rdivmod__ __reduce__ __reduce_ex__ __repr__
- __rfloordiv__ __rlshift__ __rmod__ __rmul__ __ror__
- __rpow__ __rrshift__ __rshift__ __rsub__ __rtruediv__
- __rxor__ __setattr__ __sizeof__ __str__ __sub__
- __subclasshook__ __truediv__ __trunc__ __xor__
- bit_length conjugate denominator imag numerator from_bytes to_bytes
- real)))))
- (pylist-sort! l)
- l))
-
-(define (pyfloat-listing)
- (let ((l
- (to-pylist
- (map symbol->string
- '(__abs__ __add__ __class__ __coerce__ __delattr__ __div__
- __divmod__ __doc__ __eq__ __float__ __floordiv__
- __format__ __ge__ __getattribute__ __getformat__
- __getnewargs__ __gt__ __hash__ __init__ __int__
- __le__ __long__ __lt__ __mod__ __mul__ __ne__
- __neg__ __new__ __nonzero__ __pos__ __pow__
- __radd__ __rdiv__ __rdivmod__ __reduce__
- __reduce_ex__ __repr__ __rfloordiv__ __rmod__
- __rmul__ __rpow__ __rsub__ __rtruediv__
- __setattr__ __setformat__ __sizeof__ __str__
- __sub__ __subclasshook__ __truediv__ __trunc__
- as_integer_ratio conjugate fromhex hex imag
- is_integer real)))))
- (pylist-sort! l)
- l))
-
-(define (pycomplex-listing)
- (let ((l
- (to-pylist
- (map symbol->string
- '(__abs__ __add__ __class__ __coerce__ __delattr__ __div__
- __divmod__ __doc__ __eq__ __float__ __floordiv__
- __format__ __ge__ __getattribute__ __getnewargs__
- __gt__ __hash__ __init__ __int__ __le__ __long__
- __lt__ __mod__ __mul__ __ne__ __neg__ __new__
- __nonzero__ __pos__ __pow__ __radd__ __rdiv__
- __rdivmod__ __reduce__ __reduce_ex__ __repr__
- __rfloordiv__ __rmod__ __rmul__ __rpow__ __rsub__
- __rtruediv__ __setattr__ __sizeof__ __str__
- __sub__ __subclasshook__ __truediv__
- conjugate imag real)))))
- (pylist-sort! l)
- l))
-
-(define* (py-round x #:optional (digits 0))
- (let* ((f (expt 10.0 digits)))
- (inexact->exact
- (if (equal? digits 0)
- (round x)
- (/ (round (* x f)) f)))))
-
-(define-method (py-bin (o <integer>))
- (number->string o 2))
-(define-method (py-bin (o <py-int>))
- (number->string (slot-ref o 'x) 2))
-(define (py-bin o)
- (+ "0b" (number->string (py-index o) 2)))
-
-
-(set! (@@ (language python list) int) int)
diff --git a/modules/language/python/parser-tool.scm b/modules/language/python/parser-tool.scm
deleted file mode 100644
index 75da429..0000000
--- a/modules/language/python/parser-tool.scm
+++ /dev/null
@@ -1,46 +0,0 @@
-(define-module (language python parser-tool)
- #:use-module (ice-9 pretty-print)
- #:use-module (logic guile-log parsing scanner)
- #:use-module ((logic guile-log parser)
- #:select (setup-parser
- f-nl f-nl!
- *current-file-parsing*
- make-file-reader file-next-line file-skip))
- #:use-module (logic guile-log)
- #:re-export (f-nl f-nl!)
- #:export (f-seq f-seq! f-or f-or! f-not f-not! f-true f-false f-cons f-cons*
- f-list INDENT <p-lambda> f* ff* ff? f? ff+ f+
- f-reg f-reg! f-tag f-tag! f-eof f-out f-and f-and!
- mk-token p-freeze parse f-append
- .. xx <p-cc>
- f-pk))
-
-;; Preliminary
-(define do-print #f)
-(define pp
- (case-lambda
- ((s x)
- (when do-print
- (pretty-print `(,s ,(syntax->datum x))))
- x)
- ((x)
- (when do-print
- (pretty-print (syntax->datum x)))
- x)))
-
-
-(begin
- (define-guile-log-parser-tool (<p-lambda> (X XL N M INDENT)) <p-define> ..
- xx <p-cc>)
-
-
- (make-guile-log-scanner-tools <p-lambda> <fail> <p-cc> <succeds> ..
- (X XL N M INDENT)
- (c) (d)
- s-false s-true s-mk-seq s-mk-and s-mk-or)
-
- ;; Sets up a standar parser functionals with INDENT field added
- (setup-parser
- <p-define> <p-lambda> <fail> <p-cc> <succeds> .. xx
- X XL ((N 0) (M 0) (INDENT (list 0)))
- s-false s-true s-mk-seq s-mk-and s-mk-or))
diff --git a/modules/language/python/parser.scm b/modules/language/python/parser.scm
deleted file mode 100644
index 55fc02e..0000000
--- a/modules/language/python/parser.scm
+++ /dev/null
@@ -1,849 +0,0 @@
-(define-module (language python parser)
- #:use-module (logic guile-log)
- #:use-module ((logic guile-log parser) #:select (*whitespace*))
- #:use-module (ice-9 match)
- #:use-module (ice-9 pretty-print)
- #:use-module (language python parser-tool)
- #:export (p python-parser))
-
-(define do-print #f)
-(define pp
- (case-lambda
- ((s x)
- (when do-print
- (pretty-print `(,s ,(syntax->datum x))))
- x)
- ((x)
- (when do-print
- (pretty-print (syntax->datum x)))
- x)))
-(define ppp
- (case-lambda
- ((s x)
- (pretty-print `(,s ,(syntax->datum x)))
- x)
- ((x)
- (pretty-print (syntax->datum x))
- x)))
-
-(define-syntax-rule (Ds f) (lambda x (apply f x)))
-(define-syntax-rule (DDs op f ...) (op (lambda x (apply f x)) ...))
-
-(define divide truncate/)
-;; +++++++++++++++++++++++++++++++++++++ SCANNER SUBSECTION
-(define nl (f-or f-nl f-eof))
-(define com (f-seq "#" (f* (f-not f-nl)) nl))
-(define w (f-reg "[\t\r| ]"))
-(define ws+ (f+ (f-or (f-reg "[\t\r| ]") com)))
-(define ws* (f+ (f-or (f-reg "[\t\r| ]") com)))
-(define ws ws*)
-
-
-(define (wn_ n i)
- (<p-lambda> (c)
- (cond
- ((> i n) <fail>)
- ((= i n)
- (.. ((f-and (f-not w) f-true) c)))
- ((< i n)
- (<or>
- (<and!>
- (.. (c) ((f-tag " ") c))
- (.. ((wn_ n (+ i 1)) c)))
- (<and!>
- (.. (c) ((f-tag "\t") c))
- (.. ((wn_ n (divide (+ i 8) 8)) c)))
- (<and!>
- (.. (c) ((f-tag "\r") c))
- (.. ((wn_ n i) c))))))))
-
-(define (wn+_ n i)
- (<p-lambda> (c)
- (<pp> `(,n ,i))
- (<or>
- (<and!>
- (.. (c) ((f-tag " ") c))
- (.. ((wn+_ n (+ i 1)) c)))
- (<and!>
- (.. (c) ((f-tag "\t") c))
- (.. ((wn+_ n (divide (+ i 8) 8)) c)))
- (<and!>
- (.. (c) ((f-tag "\r") c))
- (.. ((wn+_ n i) c)))
- (<and!>
- (when (> i n))
- (<with-bind> ((INDENT (cons i INDENT)))
- (<p-cc> c))))))
-
-(define wn+
- (<p-lambda> (c)
- (<let> ((n (car INDENT)))
- (.. ((wn+_ n 0) c)))))
-
-(define wn
- (<p-lambda> (c)
- (<let> ((n (car INDENT)))
- (.. ((wn_ n 0) c)))))
-
-(define indent= wn)
-(define indent+ wn+)
-(define indent-
- (<p-lambda> (c)
- (<with-bind> ((INDENT (cdr INDENT)))
- (<p-cc> c))))
-
-(define identifier__
- (let ()
- (define ih (f-reg! "[a-zA-Z_]"))
- (define i.. (f-or! 'or ih (f-reg! "[0-9]")))
- (mk-token
- (f-seq ih (f* i..)))))
-
-(define keyw (make-hash-table))
-(for-each
- (lambda (x) (hash-set! keyw (symbol->string x) #t))
- '(False None True and as assert break class continue def
- del elif else except finally for from global if import
- in is lambda nonlocal not or pass raise return try
- while with yield))
-
-(define decimal (mk-token (f-seq (f-reg! "[1-9]") (f* (f-reg! "[0-9]")))))
-(define oct (mk-token
- (f-seq "0" (f-reg "[oO]") (f+ (f-reg! "[0-7]")))))
-(define hex (mk-token
- (f-seq "0" (f-reg "[xX]") (f+ (f-reg! "[0-7a-fA-F]")))))
-(define bin (mk-token
- (f-seq "0" (f-reg "[bB]") (f+ (f-reg! "[01]")))))
-
-(define integer
- (<p-lambda> (c)
- (<and!>
- (<or>
- (<and>
- (.. (c) (decimal c))
- (<p-cc> (string->number c 10)))
- (<and>
- (.. (c) (oct c))
- (<p-cc> (string->number c 8)))
- (<and>
- (.. (c) (hex c))
- (<p-cc> (string->number c 16)))
- (<and>
- (.. (c) (bin c))
- (<p-cc> (string->number c 2)))))))
-
-(define intpart (f+ (f-reg! "[0-9]")))
-(define fraction (f-seq (f-tag! ".") intpart))
-(define exponent (f-seq (f-reg! "[eE]") (f? (f-reg! "[+-]")) intpart))
-(define pointfloat (f-or! (f-seq (f? intpart) fraction)
- (f-seq intpart (f-tag! "."))))
-(define exponentfloat (f-seq (f-or intpart pointfloat) exponent))
-
-(define floatnumber (mk-token (f-or! exponentfloat pointfloat)))
-(define float
- (<p-lambda> (c)
- (.. (c) (floatnumber c))
- (<p-cc> (string->number c))))
-
-(define imagnumber (mk-token (f-seq (f-or floatnumber integer) (f-reg "[jJ]"))))
-(define imag
- (<p-lambda> (c)
- (.. (c) (imagnumber c))
- (<p-cc> (string->number (string-append "0+" c "i")))))
-
-(define (mk-id S c cc) cc)
-
-(define number
- (p-freeze 'number
- (f-or! imag float integer)
- mk-id))
-
-(define identifier_
- (let ()
- (define (__*__ i)
- (match (string->list i)
- ((#\_ #\_ . l)
- (match (reverse l)
- ((#\_ #\_ . l) #t)
- (_ #f)))
- (_ #f)))
-
- (define (__* i)
- (match (string->list i)
- ((#\_ #\_ . l)
- #t)
- (_ #f)))
-
- (define (_* i)
- (match (string->list i)
- ((#\_ . l)
- #t)
- (_ #f)))
-
- (<p-lambda> (c)
- (.. (i) (identifier__ c))
- (cond
- ((__*__ i)
- (<p-cc> `(#:identifier ,i #:system)))
- ((__* i)
- (<p-cc> `(#:identifier ,i #:private)))
- ((_* i)
- (<p-cc> `(#:identifier ,i #:local)))
- ((eq? i '_)
- (<p-cc> #:_))
- ((hash-ref keyw i)
- (<p-cc> `(#:keyword ,i)))
- (else
- (<p-cc> `(#:identifier ,i)))))))
-
-(define identifier
- (<p-lambda> (c)
- (.. (i) (identifier_ c))
- (if (not (eq? (car i) #:keyword))
- (<p-cc> i)
- <fail>)))
-
-;;;; +++++++++++++++++++++++++++++++++++++++++++++++ STRING +++++++++++++++
-(define string-prefix (mk-token (f-reg! "[ruRU]")))
-(define short-string-char (f-not! (f-reg "[\n\"']")))
-(define long-string-char (f-not! "\n"))
-(define string-esc (f-seq (f-tag "\\") (f-reg! ".")))
-(define short-string-item (f-or short-string-char string-esc))
-(define long-string-item (f-or long-string-char string-esc))
-
-(define long-string
- (mk-token
- (f-or
- (f-seq! "'''" (f* long-string-item) "'''")
- (f-seq! "\"\"\"" (f* long-string-item) "\"\"\""))))
-
-(define short-string
- (mk-token
- (f-or
- (f-seq! "'" (f* short-string-item) "'")
- (f-seq! "\"" (f* short-string-item) "\""))))
-
-(define string
- (p-freeze 'string-literal
- (f-list #:string
- (ff? string-prefix)
- (f-or! long-string short-string))
- mk-id))
-
-;; ++++++++++++++++++++++++++++++++++++++++++ BYTE ++++++++++++++++++++++++++
-
-(define bytes-prefix
- (mk-token
- (f-or!
- (f-seq! (f-tag! "b") (f-or f-true (f-reg! "[rR]")))
- (f-seq! (f-tag! "B") (f-or f-true (f-reg! "[rR]")))
- (f-seq! (f-tag! "r") (f-or f-true (f-reg! "[bB]")))
- (f-seq! (f-tag! "R") (f-or f-true (f-reg! "[bB]"))))))
-
-(define bytes-esc (f-seq "\\" (f-reg ".")))
-
-(define short-bytes-char (f-not! (f-reg "[\\\n'\"]")))
-(define long-bytes-char (f-not! (f-reg "[\\]")))
-
-(define short-bytes-item
- (f-or short-bytes-char bytes-esc))
-
-(define long-bytes-item
- (f-or long-bytes-char bytes-esc))
-
-(define short-bytes
- (mk-token
- (f-or! (f-seq! "'" (f* short-bytes-item) "'")
- (f-seq! "\"" (f* short-bytes-item) " \""))))
-
-(define long-bytes
- (mk-token
- (f-or! (f-seq! "'''" (f* long-bytes-item) "'''")
- (f-seq! "\"\"\"" (f* long-bytes-item) "\"\"\""))))
-
-(define bytes-literal
- (p-freeze 'string-literal
- (<p-lambda> (c)
- (.. (pre) (bytes-prefix c))
- (.. (str) ((f-or! long-bytes short-bytes) pre))
- (<p-cc> (#:bytes pre str)))
- mk-id))
-
-
-; +++++++++++++++++++++++++++++++++++ PARSER SUBSECTION +++++++++++++++++
-(define stmt #f)
-(define testlist #f)
-(define dottaed_name #f)
-(define arglist #f)
-(define classdef #f)
-(define funcdef #f)
-(define test #f)
-(define small_stmt #f)
-
-
-(define expr_stmt #f)
-(define del_stmt #f)
-(define pass_stmt #f)
-(define flow_stmt #f)
-(define import_stmt #f)
-(define global_stmt #f)
-(define nonlocal_stmt #f)
-(define assert_stmt #f)
-(define testlist_star_expr #f)
-(define augassign #f)
-(define yield_expr #f)
-(define star_expr #f)
-(define exprlist #f)
-(define import_name #f)
-(define import_from #f)
-(define dotted_as_names #f)
-(define import_as_names #f)
-(define if_stmt #f)
-(define while_stmt #f)
-(define for_stmt #f)
-(define try_stmt #f)
-(define with_stmt #f)
-(define suite #f)
-(define except_clause #f)
-(define with_item #f)
-(define expr #f)
-(define or_test #f)
-(define lambdef #f)
-(define lambdef_nocond #f)
-(define and_test #f)
-(define not_test #f)
-(define comparison #f)
-(define comp_op #f)
-(define xor_expr #f)
-(define and_expr #f)
-(define or_expr #f)
-(define arith_expr #f)
-(define shift_expr #f)
-(define term #f)
-(define factor #f)
-(define power #f)
-(define atom #f)
-(define trailer #f)
-(define subscriptlist #f)
-(define testlist_comp #f)
-(define dictorsetmaker #f)
-(define comp_for #f)
-(define subscript #f)
-(define sliceop #f)
-(define argument #f)
-(define comp_if #f)
-(define yield_arg #f)
-(define dotted_name #f)
-
-(define file-input (f-seq (f* (f-or nl (f-seq indent= stmt))) f-eof))
-
-(define eval-input (f-seq testlist (f* nl) f-eof))
-
-(define decorator (f-cons (f-seq ws "@" ws (Ds dotted_name) ws)
- (f-seq (ff? (f-seq "(" ws (ff? (Ds arglist))
- ws ")" ws))
- f-nl)))
-
-(define decorators (ff+ decorator))
-
-
-(define decorated (f-list #:decorated
- decorators
- (f-or classdef funcdef)))
-
-(define FALSE (f-out #f))
-(define tfpdef
- (f-cons identifier (f-or
- (f-seq ":" ws test ws)
- FALSE)))
-
-(define vfpdef identifier)
-(define mk-py-list
- (lambda (targlist tfpdef)
- (let* ((t (f-or (f-seq "=" (Ds test)) FALSE))
- (arg (f-list tfpdef t))
- (arg.. (ff* (f-seq "," arg)))
- (args (f-cons arg arg..))
- (arg* (f-seq "*" (f-list tfpdef arg..)))
- (arg** (f-seq "**" tfpdef)))
- (f-cons
- targlist
- (f-or!
- (f-cons args
- (f-or (f-list arg* (f-or arg** FALSE))
- (f-list FALSE FALSE)))
- (f-list FALSE arg* (f-or arg** FALSE))
- (f-list FALSE FALSE arg**)
- (f-list 'a1 '() FALSE FALSE))))))
-
-(define typedargslist (mk-py-list #:types-args-list tfpdef))
-(define varargslist (mk-py-list #:var-args-list vfpdef))
-
-(define parameters (f-seq! 'parameters
- "(" (f-or typedargslist
- (f-out (list #f #f #f)))
- ")"))
-
-(set! funcdef
- (p-freeze 'funcdef
- (f-list 'fundef
- #:def
- (f-seq "def" identifier)
- parameters
- (ff? (f-seq! "->" (Ds test)))
- (f-seq ":" (Ds suite)))
- mk-id))
-
-(define simple_stmt (f-list 'simple_stmt #:stmt
- (f-seq
- (f-cons (Ds small_stmt)
- (ff* (f-seq ";" (Ds small_stmt))))
- (f? ";") (f? ws) (f-or nl f-eof))))
-(set! small_stmt
- (Ds
- (f-or 'small expr_stmt del_stmt pass_stmt flow_stmt import_stmt global_stmt
- nonlocal_stmt assert_stmt)))
-
-(set! expr_stmt
- (f-list 'expr_stmt
- #:expr-stmt
- (Ds testlist_star_expr)
- (f-or!
- (f-list 'augassign #:augassign
- (Ds augassign)
- (f-or (Ds yield_expr) (Ds testlist)))
- (f-cons 'assign #:assign
- (ff* (f-seq "="
- (f-or (Ds yield_expr)
- (Ds testlist_star_expr))))))))
-
-(set! testlist_star_expr
- (f-cons 'testlist_star_expr
- (f-or (Ds test) (Ds star_expr))
- (f-seq
- (ff* (f-seq "," (f-or (Ds test) (Ds star_expr))))
- (f? ","))))
-
-
-(set! augassign
- (mk-token
- (f-seq 'augassign
- ws
- (apply f-or!
- (map f-tag
- '("+=" "-=" "*=" "/=" "%=" "&=" "|=" "^="
- "<<=" ">>=" "**=" "//=")))
- ws)))
-
-(set! del_stmt (f-cons 'del_stmt #:del (f-seq "del" (Ds exprlist))))
-
-(set! pass_stmt (f-seq 'pass_stmt "pass" #:pass))
-
-(set! flow_stmt
- (f-or 'flow_stmt
- (f-seq "break" #:break)
- (f-seq "continue" #:continue)
- (f-cons #:return (f-seq "return" (ff? (Ds testlist))))
- (Ds yield_expr)
- (f-cons #:raise (f-seq "raise"
- (f-or (f-cons (Ds test)
- (ff?
- (f-seq "from" (Ds test))))
- (f-cons FALSE FALSE))))))
-
-(set! import_name (f-seq "import" dotted_as_names))
-(set! import_stmt (f-list #:import
- (f-or 'import_stmt import_name (Ds import_from))))
-
-
-
-(define dottir (mk-token (f-or! (f-tag! "...") (f-tag! "."))))
-(define dots* (ff* dottir))
-(define dots+ (ff+ dottir))
-
-(set! import_from
- (f-seq 'import_from "from"
- (f-cons
- (f-or (f-cons dots* (Ds dotted_name)) dots+)
- (f-seq "import" (f-or "*"
- (f-seq "(" (Ds import_as_names) ")")
- (Ds import_as_names))))))
-
-(define import_as_name
- (f-cons identifier (ff? (f-seq "as" identifier))))
-
-(define dotted_as_name
- (f-cons (Ds dotted_name) (ff? (f-seq "as" identifier))))
-
-(set! import_as_names
- (f-seq
- (f-cons import_as_name (ff* (f-seq "," import_as_name)))
- (f? ",")))
-
-(set! dotted_as_names
- (f-cons dotted_as_name (ff* (f-seq "," dotted_as_name))))
-
-(set! dotted_name
- (f-cons identifier (ff* (f-seq "." identifier))))
-
-(define comma_name
- (f-cons identifier (ff* (f-seq "," identifier))))
-
-(set! global_stmt
- (f-cons 'global #:global (f-seq "global" comma_name)))
-
-(set! nonlocal_stmt
- (f-cons 'nonlocal #:nonlocal (f-seq "nonlocal" comma_name)))
-
-(set! assert_stmt
- (f-cons 'assert #:assert
- (f-seq "assert" (f-cons (Ds test) (ff* (f-seq "," (Ds test)))))))
-
-
-(define compound_stmt
- (Ds
- (f-or! 'compound
- if_stmt while_stmt for_stmt try_stmt with_stmt funcdef classdef
- decorated)))
-
-(define single_input (f-or! (f-seq indent= simple_stmt)
- (f-seq indent= compound_stmt nl)
- (f-seq (f-or nl f-eof))))
-
-
-(set! stmt (f-or 'stmt simple_stmt compound_stmt))
-
-(set! if_stmt
- (f-cons 'if_stmt
- #:if
- (f-seq
- "if"
- (f-cons (Ds test)
- (f-seq ":"
- (f-cons (Ds suite)
- (f-cons
- (ff* (f-seq "elif"
- (f-cons (Ds test)
- (f-seq ":" (Ds suite)))))
- (ff? (f-seq "else" ":" (Ds suite))))))))))
-
-(set! while_stmt
- (f-cons 'while
- #:while
- (f-seq "while"
- (f-cons (Ds test)
- (f-seq ":"
- (f-cons (Ds suite)
- (ff? (f-seq "else" ":" (Ds suite)))))))))
-
-(set! for_stmt
- (f-cons 'for
- #:for
- (f-seq "for"
- (f-cons (Ds exprlist)
- (f-seq "in"
- (f-cons (Ds testlist)
- (f-cons (f-seq ":" (Ds suite))
- (ff? (f-seq "else" ":" (Ds suite))))))))))
-
-(set! try_stmt
- (f-cons 'try
- #:try
- (f-seq ws "try" ":"
- (f-cons (Ds suite)
- (f-or
- (f-cons
- (ff+ (f-list (Ds except_clause) ":" (Ds suite)))
- (f-cons
- (ff? (f-seq "else" ":" (Ds suite)))
- (ff? (f-seq "finally" ":" ws (Ds suite)))))
- (f-cons
- FALSE
- (f-cons
- FALSE
- (f-seq "finally" ":" (Ds suite)))))))))
-
-(set! with_item
- (f-cons (Ds test) (f-seq "as" (Ds expr))))
-
-(set! with_stmt
- (f-cons 'with
- #:with
- (f-seq "with"
- (f-cons
- (f-cons with_item
- (ff* (f-seq "," with_item)))
- (f-seq ":" (Ds suite))))))
-
-
-(set! except_clause
- (f-seq 'except "except"
- (ff? (f-cons (Ds test) (ff? (f-seq "as" identifier))))))
-
-(set! suite
- (f-cons #:suite
- (f-or! (f-list simple_stmt)
- (f-seq nl indent+
- (f-cons stmt
- (ff* (f-seq indent= stmt)))
- indent-))))
-
-(set! test
- (f-or! 'test
- (f-list #:test
- (Ds or_test)
- (ff? (f-list
- (f-seq "if" (Ds or_test))
- (f-seq "else" test))))
- (Ds lambdef)))
-
-(define test_nocond
- (f-or 'nocond (Ds or_test) (Ds lambdef_nocond)))
-
-(set! lambdef
- (f-list 'lambdef
- #:lambdef
- (f-seq "lambda" (ff? (Ds varargslist) '()))
- (f-seq ":" (Ds test))))
-
-(set! lambdef_nocond
- (f-list 'lambdef_nocond
- 'lambdef #:lambdef
- (f-seq "lambda" (ff? (Ds varargslist) '()))
- (f-seq ":" test_nocond)))
-
-(set! or_test
- (p-freeze 'or_test
- (f-or! 'or_test
- (f-cons #:or (f-cons (Ds and_test) (ff+ (f-seq "or" (Ds and_test)))))
- (Ds and_test))
- mk-id))
-
-(set! and_test
- (p-freeze 'and_test
- (f-or! 'and_test
- (f-cons #:and (f-cons (Ds not_test) (ff+ (f-seq "and" (Ds not_test)))))
- (Ds not_test))
- mk-id))
-
-(set! not_test
- (f-or! 'not_test
- (f-cons #:not (f-seq "not" not_test))
- (Ds comparison)))
-
-(set! comparison
- (p-freeze 'comparison
- (f-or! 'comparison
- (f-cons #:comp
- (f-cons (Ds expr)
- (ff+ (f-cons (Ds comp_op) (Ds expr)))))
- (Ds expr))
- mk-id))
-
-(set! comp_op
- (f-or! 'comp_op
- (f-seq (f-seq "not" "in" ) (f-out "notin"))
- (f-seq (f-seq "is" "not") (f-out "isnot"))
- (apply f-or!
- (map (lambda (x) (f-seq x (f-out x)))
- '("==" ">=" "<=" "<>" "!=" "in" "is" "<" ">" )))))
-
-
-(set! star_expr (f-cons 'star_expr #:starexpr (f-seq "*" (Ds expr))))
-(set! expr
- (p-freeze 'expr
- (f-or! 'expr
- (f-cons #:bor (f-cons (Ds xor_expr) (ff+ (f-seq "|" (Ds xor_expr)))))
- (Ds xor_expr))
- mk-id))
-
-(set! xor_expr
- (p-freeze 'xor
- (f-or! 'xor
- (f-cons #:bxor (f-cons (Ds and_expr) (ff+ (f-seq "^" (Ds and_expr)))))
- (Ds and_expr))
- mk-id))
-
-(set! and_expr
- (p-freeze 'and
- (f-or! 'and
- (f-cons #:band (f-cons (Ds shift_expr)
- (ff+ (f-seq "&" (Ds shift_expr)))))
- (Ds shift_expr))
- mk-id))
-
-(set! shift_expr
- (p-freeze 'shift
- (f-or! 'shift
- (f-cons #:<< (f-cons (Ds arith_expr) (ff+ (f-seq "<<" (Ds arith_expr) ))))
- (f-cons #:>> (f-cons (Ds arith_expr) (ff+ (f-seq ">>" (Ds arith_expr) ))))
- (Ds arith_expr))
- mk-id))
-
-(set! arith_expr
- (p-freeze 'arith
- (f-or! 'arith
- (f-cons #:+ (f-cons (Ds term) (ff+ (f-seq 'rest "+" (Ds term) ))))
- (f-cons #:- (f-cons (Ds term) (ff+ (f-seq "-" (Ds term) ))))
- (f-seq 'single_term (Ds term)))
- mk-id))
-
-(set! term
- (p-freeze 'term
- (f-or! 'term
- (f-cons #:* (f-cons (Ds factor) (ff+ (f-seq "*" (Ds factor) ))))
- (f-cons #:// (f-cons (Ds factor) (ff+ (f-seq "//" (Ds factor) ))))
- (f-cons #:/ (f-cons (Ds factor) (ff+ (f-seq "/" (Ds factor) ))))
- (f-cons #:% (f-cons (Ds factor) (ff+ (f-seq "%" (Ds factor) ))))
- (f-seq 'single-factor (Ds factor)))
- mk-id))
-
-
-(set! factor
- (p-freeze 'factor
- (f-or! 'factor
- (f-cons #:u+ (f-seq "+" factor))
- (f-cons #:u- (f-seq "-" factor))
- (f-cons #:u~ (f-seq "~" factor))
- (Ds power))
- mk-id))
-
-(set! power
- (p-freeze 'power
- (f-cons 'power #:power
- (f-cons (f-or (f-list #:f (Ds identifier) ":" (Ds atom)) (Ds atom))
- (f-cons (ff* (Ds trailer))
- (f-or! (f-seq "**" factor)
- FALSE))))
- mk-id))
-
-(set! trailer
- (f-or! 'trailer
- (f-seq "(" (ff? (Ds arglist)) ")")
- (f-seq "[" (Ds subscriptlist) "]")
- (f-seq (f-list #:dot (ff+ "." identifier))))
-
-(set! atom
- (p-freeze 'atom
- (f-or! 'atom
- (f-cons
- #:subexpr
- (f-seq "(" (ff? (f-or! (Ds yield_expr) (Ds testlist_comp))) ")"))
- (f-cons
- #:list
- (f-seq "[" (ff? (Ds testlist_comp)) ")"))
- (f-cons
- #:dict
- (f-seq "{" (ff? (Ds dictorsetmaker)) "}"))
- (f-seq 'identifier identifier)
- (f-seq 'number number)
- (ff+ string)
- (f-seq #:... "...")
- (f-seq #:None "None")
- (f-seq #:True "True")
- (f-seq #:false "False"))
- mk-id))
-
-(set! testlist_comp
- (f-cons
- (f-or! star_expr test)
- (f-or!
- comp_for
- (f-seq (ff* (f-seq "," (f-or! star_expr test)))
- (f? ",")))))
-
-(set! subscriptlist
- (f-cons* 'subscriptlist
- #:subscripts
- (Ds subscript)
- (f-seq (ff* (f-seq "," (Ds subscript))) (f? ","))))
-
-(set! subscript
- (f-or! 'subscript
- (f-list (ff? test '()) (f-seq ":" (ff? test '())) (ff? (Ds sliceop)))
- (f-list test FALSE FALSE)))
-
-(set! sliceop
- (f-seq ":" (ff? test '())))
-
-(define exprlist
- (let ((f (f-or expr star_expr)))
- (f-cons f (f-seq (ff* (f-seq "," f)) (f? ",")))))
-
-(set! testlist
- (f-cons
- test
- (f-seq (ff* (f-seq "," test)) (f? ","))))
-
-(set! dictorsetmaker
- (let ((f (f-cons test (f-seq ":" test))))
- (f-or!
- (f-cons* f (f-seq (ff* (f-seq "," f)) (f? ",")))
- (f-cons f (Ds comp_for))
- (f-cons test (Ds comp_for))
- (f-cons test (f-seq (ff* (f-seq "," test)) (f? ","))))))
-
-(set! classdef
- (f-list
- #:classdef
- (f-seq "class" identifier)
- (ff? (f-seq "(" (ff? (Ds arglist) '()) ")"))
- (f-seq ":" suite)))
-
-(set! arglist
- (f-or! 'arglist
- (f-list 'arg0
- #:arglist
- (f-seq (ff* (f-seq (Ds argument) ",")))
- (f-seq "*" (f-cons test (ff* (f-seq "," (Ds argument)))))
- (ff? (f-seq "," "**" test)))
-
- (f-list 'arg1
- #:arglist
- (f-seq (ff* (f-seq (Ds argument) ",")))
- FALSE
- (f-seq "**" test))
-
- (f-list 'arg2
- #:arglist
- (f-seq (f-append (ff* (f-seq (Ds argument) ","))
- (f-seq (Ds argument) (f? ","))))
- FALSE FALSE)))
-
-(set! argument
- (f-or!
- (f-list #:= test (f-seq "=" test))
- (f-list #:comp test (ff? (Ds comp_for)))))
-
-(define comp_iter (f-or! (Ds comp_for) (Ds comp_if)))
-(define comp_for (f-list (f-seq "for" exprlist)
- (f-seq "in" or_test)
- (ff? comp_iter)))
-(set! comp_if (f-list (f-seq "if" test_nocond)
- (ff? comp_iter)))
-
-(set! yield_expr
- (f-list #:yield (f-seq "yield" (ff? (Ds yield_arg)))))
-
-(set! yield_arg
- (f-or!
- (f-list #:from (f-seq "from" test))
- (f-list #:list testlist)))
-
-
-(define input (f-seq
- (ff+ (f-seq (f? ws)
- (f-or! (f-seq indent= simple_stmt)
- (f-seq indent= compound_stmt nl))))
-
- (f-seq (f? ws) (f-or nl f-eof))))
-
-(define (p str)
- (with-fluids ((*whitespace* (f* (f-reg "[ \t\r]"))))
- (parse str input)))
-
-(define (python-parser . l)
- (with-fluids ((*whitespace* (f* (f-reg "[ \t\r]"))))
- (ppp (apply parse (append l (list (f-seq nl ws single_input ws)))))))
-
-
diff --git a/modules/language/python/persist.scm b/modules/language/python/persist.scm
deleted file mode 100644
index 4ee46fc..0000000
--- a/modules/language/python/persist.scm
+++ /dev/null
@@ -1,114 +0,0 @@
-(define-module (language python persist)
- #:use-module (ice-9 match)
- #:use-module (ice-9 vlist)
- #:use-module (ice-9 pretty-print)
- #:use-module (oop goops)
- #:use-module (oop pf-objects)
- #:use-module (logic guile-log persistance)
- #:re-export(pcopyable? deep-pcopyable? pcopy deep-pcopy name-object
- name-object-deep)
- #:export (reduce cp red cpit))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define (vhash->assoc v)
- (let ((t (make-hash-table)))
- (vhash-fold
- (lambda (k v s)
- (if (hash-ref t k)
- s
- (begin
- (hash-set! t k #t)
- (cons (cons k v) s))))
- '() v)))
-
-(define-method (pcopyable? (o <p>)) #t)
-(define-method (deep-pcopyable? (o <p>)) #t)
-
-(define (cp o)
- (match (red o)
- ((#:reduce mk f)
- (let ((oo (mk)))
- (for-each (lambda (x) (apply (car x) oo (cdr x))) f)
- oo))))
-
-(define (red o)
- (fluid-set! first #t)
- (list #:reduce
- (let ((cl (class-of o)))
- (lambda () (make cl)))
- (reduce o)))
-
-
-(define-method (pcopy (o <p>))
- (list #:obj
- (aif it (ref o '__copy__)
- (it)
- (cp o))))
-
-(define-method (deep-pcopy (o <p>) p?)
- (aif it (and p? (ref o '__deepcopy__))
- (list #:obj (it))
- (red o)))
-
-(define first (make-fluid #f))
-(define-method (reduce o) '())
-(define-method (reduce (o <p>))
- (if (fluid-ref first)
- (begin
- (fluid-set! first #f)
- (cons
- (aif it (ref o '__reduce__)
- (it)
- (cons
- (lambda (o args)
- (let ((h (make-hash-table)))
- (slot-set! o 'h h)
- (for-each
- (lambda (x) (hash-set! h (car x) (cdr x)))
- args)))
- (list
- (hash-fold
- (lambda (k v s) (cons (cons k v) s))
- '()
- (slot-ref o 'h)))))
- (next-method)))
- (next-method)))
-
-(define (fold f s l)
- (if (pair? l)
- (fold f (f (car l) s) (cdr l))
- s))
-
-(define-method (reduce (o <pf>))
- (if (fluid-ref first)
- (begin
- (fluid-set! first #f)
- (cons*
- (cons
- (lambda (o n args)
- (slot-set! o 'size n)
- (slot-set! o 'n n)
- (let ((h
- (fold
- (lambda (k v s) (vhash-assoc k v s))
- vlist-null
- args)))
- (slot-set! o 'h h)))
- (list (slot-ref o 'n) (vhash->assoc (slot-ref o 'h))))
- (next-method)))
- (next-method)))
-
-(define-syntax cpit
- (lambda (x)
- (syntax-case x ()
- ((_ <c> (o lam a))
- #'(begin
- (define-method (pcopyable? (o <c>) ) #t)
- (define-method (deep-pcopyable? (o <c>) ) #t)
- (define-method (pcopy (o <c>) ) (cp o))
- (define-method (deep-pcopy (o <c>) p?) (red o))
- (define-method (reduce (o <c>) )
- (cons*
- (cons lam a)
- (next-method))))))))
diff --git a/modules/language/python/procedure.scm b/modules/language/python/procedure.scm
deleted file mode 100644
index e408225..0000000
--- a/modules/language/python/procedure.scm
+++ /dev/null
@@ -1,165 +0,0 @@
-(define-module (language python procedure)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (language python dir)
- #:use-module (language python try)
- #:use-module (language python def)
- #:use-module (language python list)
- #:use-module (language python for)
- #:use-module (language python exceptions)
- #:use-module (language python dict)
- #:export (function))
-
-(define procedure-property- (@@ (oop pf-objects) procedure-property-))
-(define procedure-properties- (@@ (oop pf-objects) procedure-properties-))
-(define set-procedure-property!- (@@ (oop pf-objects) set-procedure-property!-))
-(define set-procedure-properties!- (@@ (oop pf-objects) set-procedure-properties!-))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-python-class function ()
- (define __init__
- (lambda x (error "function objects not implemented")))
-
- (define __call__
- (lam ((* l) (** kw))
- (py-apply (* l) (** kw)))))
-
-(define e (list 'e))
-
-(define-method (ref (f <procedure>) tag . l)
- (apply ref-f f tag l))
-
-(define-method (ref (f <generic>) tag . l)
- (apply ref-f f tag l))
-
-(define-method (rawref (f <procedure>) tag . l)
- (apply ref-f f tag l))
-
-(define-method (rawref (f <generic>) tag . l)
- (apply ref-f f tag l))
-
-(define (ref-f f tag . l)
- (set! tag (if (symbol? tag) tag (string->symbol tag)))
-
- (cond
- ((equal? tag '__class__)
- function)
-
- ((equal? tag '__name__)
- (let ((r (procedure-property- f '__name__)))
- (if (not r)
- (symbol->string (procedure-name f))
- r)))
-
- ((equal? tag '__doc__)
- (let ((r (procedure-property- f tag)))
- (if (not r)
- ""
- r)))
-
- ((equal? tag '__qualname__)
- (aif it (procedure-property- f '__qualname__)
- it
- (procedure-name f)))
-
- ((equal? tag '__dict__)
- (dict (let lp ((l (procedure-properties- f)))
- (if (pair? l)
- (cons (list (car l) (cdr l))
- (lp (cdr l)))
- '()))))
-
- ((equal? tag '__annotations__)
- (procedure-property- f '__annotations__))
-
- ((equal? tag '__closure__)
- (error "closure property is not implemented"))
-
- ((equal? tag '__code__)
- (error "code tag is not implemented"))
-
- ((equal? tag '__defaults)
- (error "defaults tag is not implemented"))
-
- ((equal? tag '__kwdefaults__)
- (error "kwdefaults tag is not implemented"))
-
- (else
- (let ((r (procedure-property- f tag)))
- (if (not r)
- (if (pair? l) (car l) #f)
- r)))))
-
-(define fixed '(__class__
- __call__
- __get__
- __annotations__
- __closure__
- __dict__
- __globals__
- __defaults__
- __kwdefaults__))
-
-(define fixed-str (map symbol->string fixed))
-
-(define-method (set (x <procedure>) key val)
- (set-f x key val))
-
-(define-method (set (x <generic>) key val)
- (set-f x key val))
-
-(define-method (rawset (x <procedure>) key val)
- (set-f x key val))
-
-(define-method (rawset (x <generic>) key val)
- (set-f x key val))
-
-(define-method (py-class (o <procedure>))
- (ref o '__class__))
-
-(define-method (py-class (o <generic>))
- (ref o '__class__))
-
-(define (set-f f tag val)
- (set! tag (if (symbol? tag) tag (string->symbol tag)))
-
- (cond
- ((equal? tag '__name__)
- (set-procedure-property!- f 'name
- (if (symbol? val)
- val
- (string->symbol val))))
- ((equal? tag '__dict__)
- (set-procedure-properties!- f
- (for ((k v : val)) ((l '()))
- (cons (cons k v) l)
- #:final
- (reverse l))))
- (else
- (set-procedure-property!- f tag val))))
-
-(define-method (dir (o <procedure>))
- (let ((ret (+ (to-pylist '("__name__" "__qualname__"))
- (to-pylist fixed-str)
- (to-pylist (map (lambda (x)
- (let ((x (car x)))
- (if (symbol? x)
- (symbol->string x)
- x)))
- (procedure-properties- o))))))
- (pylist-sort! ret)
- ret))
-
-(define-method (dir (o <generic>))
- (let ((ret (+ (to-pylist '("__name__" "__qualname__"))
- (to-pylist fixed-str)
- (to-pylist (map (lambda (x)
- (let ((x (car x)))
- (if (symbol? x)
- (symbol->string x)
- x)))
- (procedure-properties- o))))))
- (pylist-sort! ret)
- ret))
-
diff --git a/modules/language/python/property.scm b/modules/language/python/property.scm
deleted file mode 100644
index 132de35..0000000
--- a/modules/language/python/property.scm
+++ /dev/null
@@ -1,48 +0,0 @@
-(define-module (language python property)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (language python def)
- #:use-module (language python exceptions)
- #:use-module (language python persist)
- #:export (property))
-
-(cpit <property> (o (lambda (o get set del)
- (slot-set! o 'get get)
- (slot-set! o 'set set)
- (slot-set! o 'del del))
- (list
- (slot-ref o 'get)
- (slot-ref o 'set)
- (slot-ref o 'del))))
-
-(define-python-class property (<property>)
- (define __init__
- (lam (o (= getx None) (= setx None) (= delx None))
- (slot-set! o 'get getx)
- (slot-set! o 'set setx)
- (slot-set! o 'del delx)
- o))
-
- (define __get__
- (lambda (self obj class)
- ((slot-ref self 'get) obj)))
-
- (define setter
- (lambda (self f)
- (slot-set! self 'set f)
- self))
-
- (define getter
- (lambda (self f)
- (slot-set! self 'get f)
- self))
-
- (define deleter
- (lambda (self f)
- (slot-set! self 'del f)
- self))
-
- (define fget (lambda (self) (slot-ref self 'get)))
- (define fset (lambda (self) (slot-ref self 'set)))
- (define fdel (lambda (self) (slot-ref self 'del))))
-
diff --git a/modules/language/python/python.scm b/modules/language/python/python.scm
deleted file mode 100644
index e8621ad..0000000
--- a/modules/language/python/python.scm
+++ /dev/null
@@ -1,265 +0,0 @@
-(define-module (language python python)
- #:use-module (language python parser)
- #:use-module (language python expr)
- #:use-module (ice-9 match)
- #:export (compile-python-string compile-python-file))
-
-;;; VARIABLES ----------------------------------------------------------------
-(define (find-global-variables vars tree)
- (define (for-each* f l)
- (match l
- ((x . l)
- (f x)
- (for-each* f l))
- (x
- (f x))))
-
- (define (local tree)
- (match tree
- ((#:global l)
- (for-each*
- (lambda (x) (hash-set! vars x #t)) l))
- ((x . l)
- (for-each* local tree))
- (_
- #t)))
-
- (define (collect tree)
- (match tree
- ((#:lambdef . _)
- #t)
- ((#:identifier . l)
- (hash-set! vars tree #t))
- ((_ . _)
- (for-each* collect tree))
- (_
- #t)))
-
- (let lp ((tree tree))
- (match tree
- ((#:def . l)
- (for-each* local l))
- ((#:lambdef . l)
- (for-each* local l))
- ((#:class . l)
- (for-each* local l))
- ((#:expr-stmt
- a (#:assign x ... e))
- (collect a)
- (collect x))
- ((x . l)
- (for-each* lp tree))
- (_
- #t))))
-;; COMPILATION
-
-(define (expr stx out tree)
- (define (expr-lhs tree)
- (match tree
- ((#:test (#:power (#:identifier v . _)))
- (datum->syntax stx (string->symbol v)))))
-
-
- (define (expr-rhs tree)
- (define (comp-tr op)
- (match op
- ("notin" #'py-notin)
- ("isnot" #'py-isnot)
- ("==" #'py_==)
- (">=" #'py_>=)
- ("<=" #'py_<=)
- ("<>" #'py_<>)
- ("!=" #'py_!=)
- ("in" #'py_in)
- ("is" #'py_is)
- ("<" #'py_< )
- (">" #'py_> )))
-
- (let lp ((tree tree))
- (match tree
- ((#:test x #f)
- (lp x))
- ((#:test x (a b))
- #`(if #,(py-true? (lp a)) #,(lp x) #,(lp b)))
- ((#:or x . y)
- #`(py-or #,(lp x) #,@(map lp y)))
- ((#:and x y)
- #`(py-and #,(lp x) #,@(map lp y)))
- ((#:not x)
- #`(py-not #,(lp x)))
- ((#:comp x)
- (lp x))
- ((#:comp x (op . y) . l)
- #'(#,(comp-tr op) #,(lp x) #,(lp (cons* #:comp y l))))
- ((#:bor x y)
- #`(py-bor #,(lp x) #,@(map lp y)))
- ((#:bxor x y)
- #`(py-bxor #,(lp x) #,@(map lp y)))
- ((#:xand x y)
- #`(py-band #,(lp x) #,@(map lp y)))
- ((#:<< x y)
- #`(py-<< #,(lp x) #,@(map lp y)))
- ((#:>> x y)
- #`(py->> #,(lp x) #,@(map lp y)))
- ((#:+ x y)
- #`(py-+ #,(lp x) #,@(map lp y)))
- ((#:- x y)
- #`(py-- #,(lp x) #,@(map lp y)))
- ((#:* x y)
- #`(py-* #,(lp x) #,@(map lp y)))
- ((#:/ x y)
- #`(py-/ #,(lp x) #,@(map lp y)))
- ((#:// x y)
- #`(py-// #,(lp x) #,@(map lp y)))
- ((#:% x y)
- #`(py-% #,(lp x) #,@(map lp y)))
- ((#:u+ x)
- #`(py-u+ #,(lp x)))
- ((#:u- x)
- #`(py-u- #,(lp x)))
- ((#:u~ x)
- #`(py-u~ #,(lp x)))
- ((#:power x trailer . #f)
- (compile-trailer trailer (lp x)))
- ((#:power x trailer . l)
- #'(py-power ,#(compile-trailer trailer (lp x)) #,(lp l)))
- ((#:identifier x . _)
- (datum->syntax stx (string->symbol x)))
- ((not (_ . _))
- tree))))
-
-
-
- (lambda (tree)
- (match tree
- ((test1 (#:assign))
- (expr-rhs test1))
- ((test1 (#:assign tests ... last))
- (with-syntax (((rhs ...) (map expr-rhs last))
- ((lhs1 ...) (map expr-lhs test1))
- (((lhs ...) ...) (reverse (map (lambda (l)
- (map expr-lhs l))
- tests))))
- (with-syntax (((v ...) (generate-temporaries #'(lhs1 ...))))
- (out #'(call-with-values (lambda () (values rhs ...))
- (lambda (v ...)
- (begin
- (set! lhs v) ...)
- ...
- (set! lhs1 v) ...)))))))))
-
-
-(define (compile-outer state out tree)
- (define (compile-stmt state tree)
- (match tree
- ((#:expr-stmt l)
- (compile-expr l))
-
- ((#:del l)
- (compile-del l))
-
- (#:pass
- (out #'(if #f #f)))
-
- (#:break
- (break out))
-
- (#:continue
- (continue out))
-
- ((#:return . l)
- (compile-return state l))
-
- ((#:raise . l)
- (compile-raise state l))
-
- ((#:import l)
- (compile-import state l))
-
- ((#:global . _)
- #t)
-
- ((#:nonlocal . _)
- #t)
-
- ((#:assert . l)
- (compile-assert state l))))
-
- (match tree
- ((#:stmt x)
- (for-each* compile-stmt tree))
- ((#:if . l)
- (compile-if state l))
- ((#:while . l)
- (compile-while state l))
- ((#:for . l)
- (compile-for state l))
- ((#:try . l)
- (compile-try state l))
- ((#:with . l)
- (compile-with state l))
- ((#:def . l)
- (compile-def state l))
- ((#:decorated . l)
- (compile-decorated state l))))
-
-
-(define (compile-python0 stx tree output)
- (define global-variables (make-hash-table))
-
- (find-global-variables global-variables tree)
- (set! all-variables
- (hash-fold
- (lambda (k v e)
- (match k
- ((_ v . _)
- (cons (datum->syntax stx (string->symbol v)) e))))
- '() global-variables))
- (set! all-globals
- (hash-fold
- (lambda (k v e)
- (match k
- ((_ v)
- (cons (datum->syntax stx (string->symbol v)) e))))
- '() global-variables))
-
- (output (with-syntax (((v ...) all-variables))
- #'(begin (define v (if #f #f)) ...)))
-
- (output (with-syntax (((v ...) all-globals))
- #'(export v ...)))
-
- (output #`(begin #,@(compile-outer))))
-
-
-(define (compile-python1 stx tree)
- (let ((out '()))
- (define (out x) (set! out (cons x out)))
- (compile-python0 stx tree out)
- (cons* #'begin (reverse out))))
-
-(define-syntax compile-python-string
- (lambda (x)
- (syntax-case x ()
- ((_ y)
- (if (string? (syntax->datum #'y))
- (compile-python1 x (python-parser (syntax->datum #'y))))))))
-
-(define-syntax compile-python-file
- (lambda (x)
- (syntax-case x ()
- ((_ y)
- (if (string? (syntax->datum #'y))
- (with-input-from-file (syntax->datum #'y)
- (lambda () (compile-python1 x (python-parser))))
- #f)))))
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/language/python/range.scm b/modules/language/python/range.scm
deleted file mode 100644
index 8cc2741..0000000
--- a/modules/language/python/range.scm
+++ /dev/null
@@ -1,204 +0,0 @@
-(define-module (language python range)
- #:use-module (oop pf-objects)
- #:use-module (language python exceptions)
- #:use-module (language python number)
- #:use-module (language python list)
- #:use-module (language python yield)
- #:use-module (language python try)
- #:use-module (language python persist)
- #:export (range))
-
-(define-python-class range ()
- (define __init__
- (case-lambda
- ((self n)
- (let ((n (py-index n)))
- (set self '_a 0)
- (set self '_b (max 0 n))
- (set self '_c 1)))
-
- ((self n m)
- (let ((n (py-index n))
- (m (py-index m)))
- (set self '_a n)
- (set self '_b (max m n))
- (set self '_c 1)))
-
- ((self n m k)
- (let ((n (py-index n))
- (m (py-index m))
- (k (py-index k)))
- (cond
- ((= k 0)
- (raise TypeError "range does not allow 0 as a step"))
- ((> k 0)
- (set self '_a n)
- (set self '_b (if (< m n) n m))
- (set self '_c k))
- ((< k 0)
- (set self '_a n)
- (set self '_b (if (> m n) n m))
- (set self '_c k)))))))
-
- (define __iter__
- (lambda (self)
- ((make-generator ()
- (lambda (yield)
- (let* ((a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c))
- (aa (if (> c 0) a a))
- (op (if (> c 0) < >)))
- (let lp ((i aa))
- (if (op i b)
- (begin
- (yield i)
- (lp (+ i c)))))))))))
-
- (define __reversed__
- (lambda (self)
- (__getslice__ self None None -1)))
-
- (define __repr__
- (lambda (self)
- (format #f "range(~a,~a,~a)"
- (ref self '_a)
- (ref self '_b)
- (ref self '_c))))
-
- (define __contains__
- (lambda (self x)
- (let ((x (py-index x ))
- (a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c)))
- (if (> c 0)
- (and
- (>= x a)
- (< x b)
- (= (modulo (- x a) c) 0))
- (and
- (<= x a)
- (> x b)
- (= (modulo (- x a) c) 0))))))
-
- (define __getitem__
- (lambda (self x)
- (let* ((x (py-index x))
- (a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c))
- (m (+ a (* c x))))
- (if (> c 0)
- (if (and (>= x 0)
- (< m b))
- m
- (raise IndexError "getitem out of range"))
- (if (and (<= x 0)
- (> m b))
- m
- (raise IndexError "getitem out of range"))))))
-
- (define __min__
- (lambda (self)
- (let* ((a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c))
- (n (abs (py-floordiv (- a b) c))))
- (if (> c 0)
- a
- (+ a (* c (- n 1)))))))
-
- (define __max__
- (lambda (self)
- (let* ((a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c))
- (n (abs (py-floordiv (- a b) c))))
- (if (> c 0)
- (+ a (* c (- n 1)))
- n))))
-
- (define __len__
- (lambda (self)
- (let* ((a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c)))
- (abs (py-floordiv (- a b) c)))))
-
- (define __getslice__
- (lambda (self x y z)
- (let* ((a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c))
- (x (if (eq? x None) None (py-index x)))
- (y (if (eq? y None) None (py-index y)))
- (z (if (eq? z None) None (py-index z)))
- (n (abs (py-floordiv (- a b) c))))
- (if (or (eq? z None) (> (* z c) 0))
- (begin
- (if (eq? z 'None) (set! z 1))
- (if (eq? y 'None) (set! y n))
- (if (eq? x 'None) (set! x 0))
- (if (< x 0) (set! x 0))
- (if (> x n) (set! x n))
- (if (< y 0) (set! y 0))
- (if (> y n) (set! y n))
- (let* ((cc (* c z))
- (xx (+ a (* c x)))
- (yy (+ a (* c y)))
- (aa (min xx yy))
- (bb (max xx yy)))
- (range aa bb cc)))
- (begin
- (if (eq? y 'None) (set! y 0))
- (if (eq? x 'None) (set! x n))
- (if (< x 0) (set! x 0))
- (if (> x n) (set! x n))
- (if (< y 0) (set! y 0))
- (if (> y n) (set! y n))
- (let* ((cc (* c z))
- (xx (+ a (* c x)))
- (yy (+ a (* c y)))
- (aa (max xx yy))
- (bb (min xx yy)))
- (range aa bb cc)))))))
-
- (define __index__
- (case-lambda
- ((self x)
- (let ((x (py-index x ))
- (a (ref self '_a))
- (b (ref self '_b))
- (c (ref self '_c)))
- (if (> c 0)
- (if (and
- (>= x a)
- (< x b)
- (= (modulo (- x a) c) 0))
- (py-floordiv (- x a) c)
- (raise IndexError))
-
- (if (and
- (<= x a)
- (> x b)
- (= (modulo (- x a) c) 0))
- (py-floordiv (- x a) c)
- (raise IndexError)))))
-
- ((self x i)
- (py-index (pylist-slice None i 1) x))
- ((self x i j)
- (py-index (pylist-slice i j 1) x))))
-
- (define __count__
- (lambda (self i)
- (if (__contains__ self i)
- 1
- 0))))
-
-(name-object range)
-
-
-
-
diff --git a/modules/language/python/set.scm b/modules/language/python/set.scm
deleted file mode 100644
index 23fb552..0000000
--- a/modules/language/python/set.scm
+++ /dev/null
@@ -1,295 +0,0 @@
-(define-module (language python set)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (language python exceptions)
- #:use-module (language python dict)
- #:use-module (language python for)
- #:use-module (language python try)
- #:use-module (language python list)
- #:use-module (language python yield)
- #:use-module (language python persist)
- #:use-module (language python bool)
- #:export (py-set frozenset weak-set))
-
-(define-class <set> () dict)
-(name-object <set>)
-
-(cpit <set>
- (o (lambda (o a)
- (slot-set! o 'dict
- (let ((h (make-py-hashtable)))
- (let lp ((a a))
- (if (pair? a)
- (begin
- (py-hash-set! h (caar a) (cdar a))
- (lp (cdr a))))))))
- (list
- (hash-fold (lambda (k v s) (cons (cons k v) s))
- '()
- (slot-ref o 'dict)))))
-
-
-(define miss (list 'miss))
-
-(define-method (< (o1 <set>) ( o2 <set>))
- (and (not (equal? o1 o2))
- (for ((k : o1)) ()
- (if (in k o2)
- (values)
- (break #f))
- #:final #t)))
-
-(define-method (> (o1 <set>) ( o2 <set>))
- (and (not (equal? o1 o2))
- (for ((k : o2)) ()
- (if (in k o1)
- (values)
- (break #f))
- #:final #t)))
-
-(define-method (<= (o1 <set>) ( o2 <set>))
- (for ((k : o1)) ()
- (if (in k o2)
- (values)
- (break #f))
- #:final #t))
-
-(define-method (>= (o1 <set>) ( o2 <set>))
- (for ((k : o2)) ()
- (if (in k o1)
- (values)
- (break #f))
- #:final #t))
-
-(define-method (in k (o <set>))
- (in k (slot-ref o 'dict)))
-
-(define-syntax-rule (mk set make-py-hashtable)
-(define-python-class set (<set>)
- (define __init__
- (case-lambda
- ((self)
- (slot-set! self 'dict (make-py-hashtable)))
- ((self x)
- (let ((d (make-py-hashtable)))
- (slot-set! self 'dict d)
- (if (eq? x '())
- (values)
- (for ((y : x)) ()
- (pylist-set! d y #t)))))))
-
- (define __bool__
- (lambda (self)
- (bool (slot-ref self 'dict))))
-
- (define pop
- (lambda (self)
- (call-with-values (lambda () (pylist-pop! (slot-ref self 'dict)))
- (lambda (k v) k))))
-
- (define add
- (lambda (self k)
- (pylist-set! (slot-ref self 'dict) k #t)))
-
- (define copy
- (lambda (self)
- (let ((dict (py-copy (slot-ref self 'dict))))
- (set dict))))
-
- (define difference
- (lambda (self . l)
- (let* ((d (slot-ref self 'dict))
- (r (py-copy d)))
- (let lp ((l l))
- (if (pair? l)
- (begin
- (for ((x : (car l))) ()
- (when (in x d)
- (pylist-delete! r x)))
- (lp (cdr l)))))
- (set r))))
-
- (define difference_update
- (lambda (self . l)
- (let* ((r (slot-ref self 'dict)))
- (let lp ((l l))
- (if (pair? l)
- (begin
- (for ((x : (car l))) ()
- (when (in x r)
- (pylist-delete! r x)))
- (lp (cdr l)))))
- (values))))
-
- (define discard
- (lambda (self . l)
- (let* ((r (slot-ref self 'dict)))
- (let lp ((l l))
- (if (pair? l)
- (begin
- (pylist-delete! r (car l))
- (lp (cdr l))))))))
-
- (define intersection
- (lambda (self . l)
- (let* ((d (slot-ref self 'dict))
- (r (py-copy d)))
- (let lp ((l l))
- (if (pair? l)
- (let ((y (car l)))
- (for ((k v : r)) ((dels '()))
- (if (not (__contains__ y k))
- (cons k dels)
- dels)
- #:final
- (let lp ((dels dels))
- (if (pair? dels)
- (begin
- (pylist-delete! r (car dels))
- (lp (cdr dels))))))
- (lp (cdr l)))))
- (set r))))
-
- (define intersection_update
- (lambda (self . l)
- (let* ((r (slot-ref self 'dict)))
- (let lp ((l l))
- (if (pair? l)
- (let ((y (car l)))
- (for ((k v : r)) ((dels '()))
- (if (not (__contains__ y k))
- (cons k dels)
- dels)
- #:final
- (let lp ((dels dels))
- (if (pair? dels)
- (begin
- (pylist-delete! r (car dels))
- (lp (cdr dels))))))
- (lp (cdr l))))))))
-
- (define isdisjoint
- (lambda (self x)
- (let* ((r (slot-ref self 'dict))
- (n1 (len r))
- (n2 (len x)))
- (if (< n2 n1)
- (let ((xx x))
- (set! x r)
- (set! r xx)))
- (for ((k v : r)) ()
- (if (in k x)
- (break #f))
- #:final
- #t))))
-
- (define issubset
- (lambda (self x)
- (let* ((r (slot-ref self 'dict)))
- (for ((k v : r)) ()
- (if (not (__contains__ x k))
- (break #f))
- #:final
- #t))))
-
- (define issuperset
- (lambda (self x)
- (let* ((r (slot-ref self 'dict)))
- (for ((x v : r)) ()
- (if (not (in x r))
- (break #f))
- #:final
- #t))))
-
- (define remove
- (lambda (self x)
- (let* ((r (slot-ref self 'dict)))
- (if (not (in x r))
- (raise KeyError "missing key in set at remove")
- (pylist-delete! r x)))))
-
- (define symmetric_difference
- (lambda (self x)
- (union (difference self x) (difference x self))))
-
- (define symmetric_difference_update
- (lambda (self x)
- (difference_update self x)
- (update self (difference x self))))
-
- (define union
- (lambda (self . l)
- (let* ((d (slot-ref self 'dict))
- (r (py-copy d)))
- (let lp ((l l))
- (if (pair? l)
- (begin
- (for ((k : (car l))) ()
- (pylist-set! r k #t))
- (lp (cdr l)))
- (set r))))))
-
- (define update
- (lambda (self . l)
- (let* ((r (slot-ref self 'dict)))
- (let lp ((l l))
- (if (pair? l)
- (begin
- (for ((k v : (car l))) ()
- (pylist-set! r k #t))
- (lp (cdr l)))
- (values))))))
-
- (define __repr__
- (lambda (self)
- (let* ((r (py-keys (slot-ref self 'dict)))
- (n (len r))
- (l (to-list r)))
- (cond
- ((= n 0)
- (format #f "set([])"))
- (else
- (format #f "set([~a~{, ~a~}])" (car l) (cdr l)))))))
-
- (define __contains__
- (lambda (self x)
- (let* ((d (slot-ref self 'dict))
- (t (slot-ref d 't)))
- (not (eq? miss (py-hash-ref t x miss))))))
-
- (define __and__
- (lambda (self op)
- (intersection self op)))
-
- (define __or__
- (lambda (self op)
- (union self op)))
-
- (define __sub__
- (lambda (self op)
- (difference self op)))
-
- (define __xor__
- (lambda (self op)
- (symmetric_difference self op)))
-
- (define __eq__
- (lambda (self x)
- (and
- (is-a? x <p>)
- (eq? (ref self '__class__ 1) (ref x '__class__ 2))
- (equal? (ref self 'd 1) (ref x 'd 2)))))
-
- (define __iter__
- (lambda (self)
- ((make-generator ()
- (lambda (yield)
- (for ((k v : (slot-ref self 'dict))) ()
- (yield k)
- (values)))))))))
-
-(mk set make-py-hashtable)
-(mk weak-set make-py-weak-key-hashtable)
-
-(define py-set set)
-(define-python-class frozenset (set))
diff --git a/modules/language/python/spec.scm b/modules/language/python/spec.scm
deleted file mode 100644
index 8451222..0000000
--- a/modules/language/python/spec.scm
+++ /dev/null
@@ -1,63 +0,0 @@
-(define-module (language python spec)
- #:use-module (parser stis-parser lang python3-parser)
- #:use-module ((language python module python) #:select ())
- #:use-module (language python compile)
- #:use-module (language python completer)
- #:use-module (rnrs io ports)
- #:use-module (ice-9 pretty-print)
- #:use-module (ice-9 readline)
- #:use-module (system base compile)
- #:use-module (system base language)
- #:use-module (language scheme compile-tree-il)
- #:use-module (language scheme decompile-tree-il)
- #:use-module (ice-9 rdelim)
- #:export (python))
-
-;;;
-;;; Language definition
-;;;
-
-(define (pr . x)
- (define port (open-file "/home/stis/src/python-on-guile/log.txt" "a"))
- (with-output-to-port port
- (lambda ()
- (pretty-print x) (car (reverse x))))
- (close port)
- (car (reverse x)))
-
-(define (c x) (pr (comp (pr (p (pr x))))))
-(define (cc port x)
- (if (equal? x "") (read port) (c x)))
-
-(define (e x) (eval (c x) (current-module)))
-
-(set! (@@ (ice-9 readline) *readline-completion-function*) (complete-fkn e))
-
-(define-language python
- #:title "python"
- #:reader (lambda (port env)
- (if (not (fluid-ref (@@ (system base compile) %in-compile)))
- (cc port (read-line port))
- (cc port (read-string port))))
-
- #:compilers `((tree-il . ,compile-tree-il))
- #:decompilers `((tree-il . ,decompile-tree-il))
- #:evaluator (lambda (x module) (primitive-eval x))
- #:printer write
- #:make-default-environment
- (lambda ()
- ;; Ideally we'd duplicate the whole module hierarchy so that `set!',
- ;; `fluid-set!', etc. don't have any effect in the current environment.
- (let ((m (make-fresh-user-module)))
- ;; Provide a separate `current-reader' fluid so that
- ;; compile-time changes to `current-reader' are
- ;; limited to the current compilation unit.
- (module-define! m 'current-reader (make-fluid))
-
- ;; Default to `simple-format', as is the case until
- ;; (ice-9 format) is loaded. This allows
- ;; compile-time warnings to be emitted when using
- ;; unsupported options.
- (module-set! m 'format simple-format)
-
- m)))
diff --git a/modules/language/python/string.scm b/modules/language/python/string.scm
deleted file mode 100644
index 864a7a1..0000000
--- a/modules/language/python/string.scm
+++ /dev/null
@@ -1,747 +0,0 @@
-(define-module (language python string)
- #:use-module (parser stis-parser)
- #:use-module (oop goops)
- #:use-module (oop pf-objects)
- #:use-module (language python hash)
- #:use-module (ice-9 match)
- #:use-module (ice-9 iconv)
- #:use-module (language python list)
- #:use-module (language python exceptions)
- #:use-module (language python for)
- #:use-module (language python def)
- #:use-module (language python bool)
- #:use-module (language python persist)
- #:use-module (rnrs bytevectors)
- #:export (py-format py-capitalize py-center py-endswith
- py-expandtabs py-find py-rfind
- py-isalnum py-isalpha py-isdigit py-islower
- py-isspace py-isupper py-istitle py-join py-ljust
- py-rjust py-format-map py-encode
- py-rljust py-lower py-upper py-lstrip py-rstrip
- py-partition py-replace py-strip py-title
- py-rpartitio py-rindex py-split py-rsplit py-splitlines
- py-startswith py-swapcase py-translate py-zfill
- pystring-listing <py-string> pystring py-string?
- scm-str scm-sym py-identifier?))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define (scm-str x)
- (if (string? x)
- x
- (slot-ref (pystring x) 'str)))
-
-(define (scm-sym x)
- (if (symbol? x)
- x
- (string->symbol (scm-str x))))
-
-(define (py-string? x)
- (or (string? x)
- (is-a? x <py-string>)))
-
-(define-class <py-string> () str)
-(name-object <py-string>)
-
-(cpit <py-string> (o (lambda (o s) (slot-set! o 'str s))
- (list (slot-ref o 'str))))
-
-(define-syntax-rule (define-py (f n o . u) code ...)
- (begin
- (define-method (f (o <string>) . u) code ...)
- (define-method (f (o <py-string>) . l) (apply f (slot-ref o 'str) l))
- (define-method (f (o <p>) . l)
- (aif it (ref o 'n)
- (apply it l)
- (next-method)))))
-
-(define-syntax-rule (define-py0 (f o . u) code ...)
- (begin
- (define-method (f (o <string>) . u) code ...)
- (define-method (f (o <py-string>) . l) (apply f (slot-ref o 'str) l))))
-
-(define-py0 (pylist-ref s i)
- (list->string (list (string-ref s (if (< i 0)
- (+ (len s) i)
- i)))))
-
-(define-py0 (bool s)
- (if (= (len s) 0)
- #f
- s))
-
-(define-py (py-capitalize capitalize s)
- (let* ((n (len s))
- (w (make-string n)))
- (let lp ((i 0) (first? #t))
- (if (< i n)
- (let ((ch (string-ref s i)))
- (if (and first? (char-alphabetic? ch))
- (begin
- (string-set! w i (char-upcase ch))
- (lp (+ i 1) #f))
- (begin
- (string-set! w i ch)
- (lp (+ i 1) first?))))
- w))))
-
-(define-py (py-center center o w . l)
- (let* ((ws (if (pair? l)
- (car (string->list (car l)))
- #\space))
- (n (string-length o))
- (w (if (< w n) n w))
- (d (- w n))
- (e (floor-quotient (- w n) 2))
- (s (make-string w #\space)))
- (let lp ((i 0) (j e))
- (if (< i n)
- (begin
- (string-set! s j (string-ref o i))
- (lp (+ i 1) (+ j 1)))))
- s))
-
-
-
-(define-py (py-endswith endswith o (suff <string>) . l)
- (let* ((n (string-length o))
- (ns (string-length suff))
- (f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (string-suffix? suff o 0 ns start end)))))
-
-(define-py (py-startswith startswith o (suff <string>) . l)
- (let* ((n (string-length o))
- (ns (string-length suff))
- (f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (string-prefix? suff o 0 ns start end)))))
-
-(define-py (py-expandtabs expandtabs s . l)
- (let* ((tabsize (match l (() 8) ((x) x)))
- (u (string->list (make-string tabsize #\space)))
- (n (string-length s)))
- (let lp ((l (string->list s)) (r '()))
- (if (pair? l)
- (let ((x (car l)))
- (if (eq? x #\tab)
- (lp (cdr l) (append u r))
- (lp (cdr l) (cons x r))))
- (list->string (reverse r))))))
-
-(define-py (py-find find s sub . l)
- (let* ((n (string-length s))
- (f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (aif it (string-contains s sub start end)
- it
- -1)))))
-
-(define-py (py-rfind rfind s sub . l)
- (let* ((n (string-length s))
- (s (string-reverse s))
- (sub (string-reverse sub))
- (f (lambda (x) (< x 0) (+ n x) x)))
- (call-with-values (lambda ()
- (match l
- (() (values 0 n ))
- ((x) (values (f x) n ))
- ((x y) (values (f x) (f y)))))
- (lambda (start end)
- (aif it (string-contains s sub start end)
- (- n it (len sub))
- -1)))))
-
-(define formatter #f)
-(define-py (py-strformat format s . l)
- (apply (ref formatter 'format) s l))
-
-(define-py (py-format-map format_map s map)
- (apply (ref formatter 'vformat) s '() map))
-
-(define format (lambda (a b) a))
-(define-py (py-format format s format-string)
- (format s format-string))
-
-(define-syntax-rule (mk-is py-isalnum isalnum x ...)
- (define-py (py-isalnum isalnum s)
- (and (> (len s) 0)
- (string-fold
- (lambda (ch s)
- (if (or (x ch) ...)
- s
- #f))
- #t s))))
-
-(mk-is py-isalnum isalnum char-alphabetic? char-numeric?)
-(mk-is py-isalpha isalpha char-alphabetic?)
-(mk-is py-isdigit isdigit char-numeric?)
-(mk-is py-islower islower (lambda (ch) (or (eq? ch #\_) (char-lower-case? ch))))
-(mk-is py-isspace isspace char-whitespace?)
-(mk-is py-isupper isupper (lambda (ch) (or (eq? ch #\_) (char-upper-case? ch))))
-
-(define-py (py-identifier? isidentifier s)
- (let lp ((l (string->list s)) (first? #t))
- (if (pair? l)
- (let ((x (car l)))
- (if first?
- (if (or (char-alphabetic? x)
- (eq? x #\_))
- (lp (cdr l) #f)
- #f)
- (if (or (char-alphabetic? x)
- (char-numeric? x)
- (eq? x #\_))
- (lp (cdr l) #f)
- #f)))
- (if ((@ (language python module keyword) iskeyword) s)
- #f
- #t))))
-
-(define-py (py-istitle istitle s)
- (let ((n (len s)))
- (if ((> n 0))
- (let lp ((i 0) (space? #t))
- (if (< i n)
- (let ((ch (string-ref s i)))
- (if space?
- (cond
- ((char-whitespace? ch)
- (lp (+ i 1) #t))
- ((char-upper-case? ch)
- (lp (+ i 1) #f))
- (else
- #f))
- (cond
- ((char-whitespace? ch)
- (lp (+ i 1) #t))
- ((char-upper-case? ch)
- #f)
- ((char-lower-case? ch)
- (lp (+ i 1) #f))
- (else
- #f))))
- #t))
- #f)))
-
-
-(define-py (py-join join s iterator)
- (string-join (to-list iterator) s))
-
-(define-py (py-ljust ljust s width . l)
- (let* ((n (len s))
- (ch (match l
- ((x . l)
- (if (string? x)
- (string-ref x 0)
- x))
- (()
- #\space))))
- (if (< width n)
- (pylist-slice s 0 width 1)
- (let ((ret (make-string width ch)))
- (let lp ((i 0))
- (if (< i n)
- (begin
- (string-set! ret i (string-ref s i))
- (lp (+ i 1)))
- ret))))))
-
-(define-py (py-rjust rjust s width . l)
- (let* ((n (len s))
- (ch (match l
- ((x . l)
- (if (string? x)
- (string-ref x 0)
- x))
- (()
- #\space))))
- (if (< width n)
- (pylist-slice s (- width) (len s) 1)
- (let ((ret (make-string width ch)))
- (let lp ((i 0) (j (- width n)))
- (if (< i n)
- (begin
- (string-set! ret j (string-ref s i))
- (lp (+ i 1) (+ j 1)))
- ret))))))
-
-(define-py (py-lower lower s)
- (string-downcase s))
-
-(define-py (py-upper upper s)
- (string-upcase s))
-
-(define-py (py-lstrip lstrip s . l)
- (match l
- (()
- (string-trim s))
- ((x . _)
- (let ((l (map (lambda (x) (if (string? x) (string-ref x 0) x)) (to-list x))))
- (string-trim s (lambda (ch) (member ch l)))))))
-
-(define-py (py-rstrip rstrip s . l)
- (match l
- (()
- (string-trim-right s))
- ((x . _)
- (let ((l (map (lambda (x) (if (string? x) (string-ref x 0) x))
- (to-list x))))
- (string-trim-right s (lambda (ch) (member ch l)))))))
-
-(define-py (py-partition partition s (sep <string>))
- (let ((n (len s))
- (m (len sep)))
- (define (test i)
- (let lp ((i i) (j 0))
- (if (< i n)
- (if (< j m)
- (if (eq? (string-ref s i) (string-ref sep j))
- (lp (+ i 1) (+ j 1))
- #f)
- #t)
- #f)))
- (let lp ((i 0))
- (if (< i n)
- (if (test i)
- (list (pylist-slice s 0 i 1) sep (pylist-slice s (+ i m) n 1))
- (lp (+ i 1)))
- (list s "" "")))))
-
-(define-py (py-partition partition s (sep <py-string>))
- (py-partition s (slot-ref sep 'str)))
-
-
-(define-py (py-rpartition rpartition ss (ssep <string>))
- (let* ((s (string-reverse ss))
- (sep (string-reverse ssep))
- (n (len s))
- (m (len sep)))
- (define (test i)
- (let lp ((i i) (j 0))
- (if (< i n)
- (if (< j m)
- (if (eq? (string-ref s i) (string-ref sep j))
- (lp (+ i 1) (+ j 1))
- #f)
- #t)
- #f)))
- (let lp ((i 0))
- (if (< i n)
- (if (test i)
- (list (string-reverse
- (pylist-slice s (+ i m) n 1))
- ssep
- (string-reverse
- (pylist-slice s 0 i 1)))
- (lp (+ i 1)))
- (list "" "" s)))))
-
-(define-py (py-rpartition rpartition s (sep <py-string>))
- (py-rpartition s (slot-ref sep 'str)))
-
-(define-py (py-replace replace s old new . l)
- (let ((n (match l (() #f) ((n . _) n))))
- (string-join
- (reverse
- (let lp ((s s) (r '()))
- (let ((l (py-partition s old)))
- (if (equal? (cadr l) "")
- (cons s r)
- (lp (list-ref l 2) (cons (car l) r))))))
- new)))
-
-(define-py (py-strip strip s . l)
- (apply py-rstrip (apply py-lstrip s l) l))
-
-(define-py (py-title title s)
- (string-titlecase s))
-
-(define-py (py-rindex rindex s . l)
- (let ((n (len s)))
- (- n (apply pylist-index (string-reverse s) l) 1)))
-
-(define bytes #f)
-
-(define (geterr errors)
- (set! errors (py-lower (scm-str errors)))
- (cond
- ((equal? errors "strict")
- 'error)
- ((equal? errors "escape")
- 'escape)
- ((equal? errors "replace")
- 'substitute)
- ((equal? errors "ignore")
- (warn
- (string-append
- "not possible to use ignore "
- "encodong error strategy "
- "using replace in stead"))
- 'substitute)
- (else
- (warn
- "not a correct encodong error strategy")
- 'error)))
-
-(define-py (py-encode encode s . l)
- (apply (lam ((= encoding "UTF-8") (= errors "strict"))
- (set! encoding (py-upper (scm-str encoding)))
- (set! errors (geterr errors))
- (bytes (string->bytevector (scm-str s) encoding errors)))
- l))
-
-(define-py (py-split split s . l)
- (define N 1000000000000)
-
- (define ws? #f)
- (define ws (list #\space #\newline #\tab #\return))
- (define (to-ch x) (string-ref (scm-str x) 0))
-
- (define (mksep sep)
- (for ((x : sep)) ((l '()))
- (cons
- (cond
- ((and (number? x) (integer? x))
- (integer->char x))
- ((char? x)
- x)
- (else
- (to-ch x))) l)
- #:final
- (reverse l)))
-
- (call-with-values
- (lambda ()
- (match l
- (()
- (set! ws? #t)
- (values '() N))
-
- ((sep)
- (values (mksep sep) N))
-
- ((sep n)
- (values (mksep sep) n))))
-
- (lambda (sep n)
- (let lp ((l (string->list (scm-str s))) (i 0) (v '()) (r '()))
- (if (= i n)
- (reverse (cons (list->string l) r))
- (if (pair? l)
- (let ((ch (car l)))
- (if ws?
- (if (member ch ws)
- (let lp2 ((l (cdr l)))
- (if (pair? l)
- (let ((ch (car l)))
- (if (member ch ws)
- (lp2 (cdr l))
- (lp l (+ i 1) '()
- (cons
- (list->string (reverse v))
- r))))
- (lp l (+ i 1) '()
- (cons
- (list->string (reverse v))
- r))))
- (lp (cdr l) i (cons ch v) r))
- (if (eq? ch (car sep))
- (let lp2 ((ll (cdr l)) (s (cdr sep)))
- (if (pair? s)
- (if (pair? ll)
- (let ((ch2 (car ll)))
- (if (eq? ch2 (car s))
- (lp2 (cdr ll) (cdr sep))
- (lp (cdr l) i (cons ch v) r)))
- (lp (cdr l) i (cons ch v) r))
- (lp ll (+ i 1) '()
- (cons
- (list->string (reverse v))
- r))))
- (lp (cdr l) i (cons ch v) r))))
- (reverse (cons (list->string (reverse v)) r))))))))
-
-
-
-
-
-
-
-
-
-
-
-
-
-(define-py (py-rsplit rsplit s . l)
- (reverse
- (map string-reverse
- (apply py-split
- (string-reverse s)
- (match l
- (() '())
- ((sep . l) (cons (string-reverse sep) l)))))))
-
-
-(define-py (py-splitlines splitlines s . l)
- (let ((n (len s))
- (keep? (match l
- ((#:keepends v)
- v)
- ((v)
- v)
- (_ #f))))
- (let lp ((i 0) (r '()) (old 0))
- (if (< i n)
- (let ((ch (string-ref s i)))
- (if (eq? ch #\newline)
- (if keep?
- (lp (+ i 1)
- (cons
- (pylist-slice s old (+ i 1) 1)
- r)
- (+ i 1))
- (lp (+ i 1)
- (cons
- (pylist-slice s old i 1)
- r)
- (+ i 1)))
- (lp (+ i 1) r old)))
- (reverse r)))))
-
-(define-py (py-swapcase swapcase s)
- (list->string
- (string-fold
- (lambda (ch s)
- (cons
- (cond
- ((char-upper-case? ch)
- (char-downcase ch))
- ((char-lower-case? ch)
- (char-upcase ch))
- (else ch))
- s))
- '()
- s)))
-
-(define-py (py-translate translate s table . l)
- (let* ((n (len s))
- (w (make-string n))
- (t (if (eq? table None)
- #f
- table))
- (d (match l (() #f) ((x) x))))
- (define (tr ch)
- (define (e)
- (if t
- (let ((i (char->integer ch)))
- (catch #t
- (lambda () (integer->char (pylist-ref t i)))
- (lambda x ch)))
- ch))
-
- (if d
- (if (string-contains d (list->string (list ch)))
- #f
- (e))
- (e)))
-
- (let lp ((i 0) (k 0))
- (if (< i n)
- (let ((ch (tr (string-ref s i))))
- (if ch
- (begin
- (string-set! w k ch)
- (lp (+ i 1) (+ k 1)))
- (lp (+ i 1) k)))
- (if (= k n)
- w
- (pylist-slice w 0 k 1))))))
-
-(define-syntax-rule (a b x y) (b (symbol->string x) (symbol->string y)))
-
-(define-syntax-rule (mkop op)
- (begin
- (define-method (op (s1 <string>) (s2 <py-string>))
- (op s1 (slot-ref s2 'str)))
- (define-method (op (s2 <py-string>) (s1 <string>))
- (op s1 (slot-ref s2 'str)))))
-
-(mkop <)
-(mkop <=)
-(mkop >)
-(mkop >=)
-(mkop +)
-(mkop *)
-
-(define-method (< (s1 <string>) (s2 <string>)) (string-ci< s1 s2))
-(define-method (<= (s1 <string>) (s2 <string>)) (string-ci<= s1 s2))
-(define-method (> (s1 <string>) (s2 <string>)) (string-ci> s1 s2))
-(define-method (>= (s1 <string>) (s2 <string>)) (string-ci>= s1 s2))
-
-(define-method (< (s1 <symbol>) (s2 <symbol>)) (a string-ci< s1 s2))
-(define-method (<= (s1 <symbol>) (s2 <symbol>)) (a string-ci<= s1 s2))
-(define-method (> (s1 <symbol>) (s2 <symbol>)) (a string-ci> s1 s2))
-(define-method (>= (s1 <symbol>) (s2 <symbol>)) (a string-ci>= s1 s2))
-
-
-(define-py (py-zfill zfill s width)
- (let* ((n (len s))
- (w (pylist-slice s 0 n 1)))
- (let lp ((i 0))
- (if (< i n)
- (let ((ch (string-ref s i)))
- (if (char-numeric? ch)
- (let lp ((j (max 0 (- i width))))
- (if (< j i)
- (begin
- (string-set! w j #\0)
- (lp (+ j 1)))
- w))
- (lp (+ i 1))))
- s))))
-
-(define b? #f)
-(define b-decode #f)
-(define-python-class string (<py> <py-string>)
- (define __init__
- (case-lambda
- ((self)
- "")
- ((self s . l)
- (cond
- ((is-a? s <py-string>)
- (slot-ref s 'str))
- ((is-a? s <string>)
- s)
- ((b? s)
- (apply b-decode s l))
- (else
- (aif it (ref s '__str__)
- (it)
- (__init__ self ((@ (guile) format) #f "~a" s))))))))
-
-
- (define __new__
- (lambda x
- (apply __init__ x)))
-
- (define __newobj__
- (lambda (cls value)
- (let ((obj ((rawref object '__new__) cls)))
- (slot-set! obj 'str (__new__ cls value))
- obj)))
-
- (define __repr__
- (lambda (self)
- (slot-ref self 'str))))
-
-(name-object string)
-
-(define pystring string)
-
-(define-method (py-class (o <string>)) string)
-(define-method (py-class (o <py-string>)) string)
-
-(define-method (pyhash (o <py-string>)) (hash (slot-ref o 'str) pyhash-N))
-
-(define-method (py-equal? (o <py-string>) x)
- (equal? (slot-ref o 'str) x))
-(define-method (py-equal? x (o <py-string>))
- (equal? (slot-ref o 'str) x))
-
-(define-class <string-iter> (<py-string>) str i d)
-(name-object <string-iter>)
-(cpit <string-iter> (o
- (lambda (o str i d)
- (slot-set! o 'str str)
- (slot-set! o 'i i )
- (slot-set! o 'd d ))
- (list
- (slot-ref o 'str)
- (slot-ref o 'i)
- (slot-ref o 'd))))
-
-
-(define-method (write (o <string-iter>) . l)
- (define port (if (null? l) #t (car l)))
- (for ((x : o)) ((l '()))
- (cons (string-ref x 0) l)
- #:final
- ((@ (guile) format) port "iter(~s)" (list->string (reverse l)))))
-
-(define-method (wrap-in (o <string-iter> ))
- (let ((out (make <string-iter>)))
- (slot-set! out 'str (slot-ref o 'str))
- (slot-set! out 'i (slot-ref o 'i))
- (slot-set! out 'd (slot-ref o 'd))
- out))
-
-(define-method (wrap-in (s <string>))
- (let ((out (make <string-iter>)))
- (slot-set! out 'str s)
- (slot-set! out 'i 0)
- (slot-set! out 'd 1)
- out))
-
-(define-method (py-reversed (s <string>))
- (let ((out (make <string-iter>)))
- (slot-set! out 'str s)
- (slot-set! out 'i (- (string-length s) 1))
- (slot-set! out 'd -1)
- out))
-
-(define-method (next (o <string-iter>))
- (let ((i (slot-ref o 'i ))
- (d (slot-ref o 'd))
- (str (slot-ref o 'str)))
- (if (> d 0)
- (if (< i (string-length str))
- (let ((ret (string-ref str i)))
- (slot-set! o 'i (+ i d))
- (list->string (list ret)))
- (throw StopIteration))
- (if (>= i 0)
- (let ((ret (string-ref str i)))
- (slot-set! o 'i (+ i d))
- (list->string (list ret)))
- (throw StopIteration)))))
-
-(define (pystring-listing)
- (let ((l (to-pylist
- (map symbol->string
- '(__add__ __class__ __contains__ __delattr__ __doc__
- __eq__ __format__ __ge__ __getattribute__
- __getitem__ __getnewargs__ __getslice__ __gt__
- __hash__ __init__ __le__ __len__ __lt__ __mod__
- __mul__ __ne__ __new__ __reduce__ __reduce_ex__
- __repr__ __rmod__ __rmul__ __setattr__ __sizeof__
- __str__ __subclasshook__
- _formatter_field_name_split _formatter_parser
- capitalize center count encode endswith
- expandtabs find format index isalnum isalpha
- isdigit islower isspace istitle isupper join
- ljust lower lstrip partition replace rfind rindex
- rjust rpartition rsplit rstrip split splitlines
- startswith strip swapcase format_map
- title translate upper zfill)))))
- (pylist-sort! l)
- l))
-
-
diff --git a/modules/language/python/try.scm b/modules/language/python/try.scm
deleted file mode 100644
index 50ca23f..0000000
--- a/modules/language/python/try.scm
+++ /dev/null
@@ -1,122 +0,0 @@
-(define-module (language python try)
- #:use-module (language python exceptions)
- #:use-module (language python yield)
- #:use-module (oop pf-objects)
- #:use-module (oop goops)
- #:use-module (ice-9 control)
- #:use-module (ice-9 match)
- #:replace (raise)
- #:export (try))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-inlinable (standard-check class obj l)
- (cond
- ((eq? class #t)
- #t)
- ((struct? obj)
- (if (is-a? obj <p>)
- (if (is-a? class <p>)
- (is-a? obj (ref class '__goops__))
- (is-a? obj class))
- (if (is-a? obj <object>)
- (is-a? obj class)
- (eq? obj class))))
- ((and (procedure? class) (not (pyclass? class)))
- (apply class obj l))
- (else
- (eq? class obj))))
-
-
-(define (check class obj l)
- (standard-check class obj l))
-
-(define-syntax compile-error
- (lambda (x)
- (syntax-case x ()
- ((_ x)
- (error (syntax->datum #'x))))))
-
-(define-syntax check-exception
- (syntax-rules (and or not)
- ((_ (or E ...) tag l)
- (or (check-exception E tag l) ...))
- ((_ (and E ...) tag l)
- (and (check-exception E tag l) ...))
- ((_ (not E) tag l)
- (not (check-exception E tag l)))
- ((_ E tag l)
- (check E tag l))))
-
-(define (m code)
- (let ((c code))
- (lambda (k . l)
- (if (eq? k StopIteration)
- (apply c 'python k l)
- (apply c k l)))))
-
-(define-syntax handler
- (lambda (x)
- (syntax-case x ()
- ((_ . l) #'(handler_ . l)))))
-
-(define-syntax handler_
- (syntax-rules (=>)
- ((handler ecx)
- (m
- (lambda (k tag . l)
- (handler ecx tag l))))
-
- ((handler ((#:except E => lam) . ecx) tag l)
- (if (check-exception E tag l)
- (lam tag l)
- (handler ecx tag l)))
-
- ((handler ((#:except E) . ecx) tag l)
- (if (check-exception E tag l)
- (begin (values))
- (handler ecx tag l)))
-
- ((handler ((#:except E code ...) . ecx) tag l)
- (if (check-exception E tag l)
- (begin code ...)
- (handler ecx tag l)))
-
- ((handler ((#:else code ...)) tag l)
- (begin code ...))
-
- ((handler () tag l)
- (apply throw 'python tag l))
-
- ((a ...)
- (compile-error "not a proper python macro try block"))))
-
-
-
-(define-syntax try
- (syntax-rules ()
- ((try code exc ... #:finally fin)
- (dynamic-wind
- (lambda () #f)
- (lambda ()
- (catch #t
- code
- (handler (exc ...))))
- (lambda ()
- (if (not (fluid-ref in-yield))
- (fin)))))
-
- ((try code exc ...)
- (catch #t
- code
- (handler (exc ...))))))
-
-
-(define raise
- (case-lambda
- ((x . l)
- (if (pyclass? x)
- (throw 'python (apply x l))
- (apply throw 'python x l)))
-
- (() (raise Exception))))
diff --git a/modules/language/python/tuple.scm b/modules/language/python/tuple.scm
deleted file mode 100644
index 4ba83b1..0000000
--- a/modules/language/python/tuple.scm
+++ /dev/null
@@ -1,49 +0,0 @@
-(define-module (language python tuple)
- #:use-module (oop goops)
- #:use-module (oop pf-objects)
- #:use-module (language python hash)
- #:use-module (language python for)
- #:use-module (language python bool)
- #:use-module (language python persist)
- #:export (tuple <py-tuple> defpair))
-
-
-(define-class <py-tuple> () l)
-(name-object <py-tuple>)
-(cpit <py-tuple>
- (o (lambda (o l)
- (slot-set! o 'l (map (lambda (x) x) l)))
- (list
- (slot-ref o 'l))))
-
-(define-method (py-hash (o <py-tuple>)) (py-hash (slot-ref o 'l)))
-(define-method (py-class (o <py-tuple>) tuple))
-(define-method (py-equal? (o1 <py-tuple>) o2) (equal? (slot-ref o1 'l) o2))
-(define-method (py-equal? o1 (o2 <py-tuple>)) (equal? o1 (slot-ref o2 'l)))
-(define-method (bool (o <py-tuple>)) (pair? (slot-ref o 'l)))
-(define-method (wrap-in (o <py-tuple>))
- (wrap-in (slot-ref o 'l)))
-
-(define-python-class tuple (<py-tuple>)
- (define __init__
- (case-lambda
- ((self)
- (slot-set! self 'l '()))
- ((self it)
- (slot-set! self 'l
- (for ((x : it)) ((l '()))
- (cons x l)
- #:final
- (reverse l))))))
- (define __repr__
- (lambda (self) (format #f "~a" (slot-ref self 'l)))))
-
-(name-object tuple)
-
-(define-syntax-rule (defpair (f o . u) code ...)
- (begin
- (define-method (f (o <pair>) . u)
- code ...)
- (define-method (f (o <py-tuple>) . l)
- (let ((o (slot-ref o 'l)))
- (apply f o l)))))
diff --git a/modules/language/python/util.scm b/modules/language/python/util.scm
deleted file mode 100644
index 40206f0..0000000
--- a/modules/language/python/util.scm
+++ /dev/null
@@ -1,2 +0,0 @@
-(define-module (language python util)
- #:export ())
diff --git a/modules/language/python/with.scm b/modules/language/python/with.scm
deleted file mode 100644
index 0193189..0000000
--- a/modules/language/python/with.scm
+++ /dev/null
@@ -1,53 +0,0 @@
-(define-module (language python with)
- #:use-module (language python try)
- #:use-module (language python exceptions)
- #:use-module (oop pf-objects)
- #:export (with))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define-syntax with
- (syntax-rules ()
- ((_ () . code)
- (begin . code))
- ((_ (x . l) . code)
- (with0 x (with l . code)))))
-
-(define-syntax with0
- (syntax-rules ()
- ((_ (id exp) . code)
- (let ((type None)
- (value None)
- (trace None))
- (aif exit (ref exp '__exit__)
- (aif enter (ref exp '__enter__)
- (try
- (lambda ()
- (let ((id (enter))) . code))
- (#:except #t =>
- (lambda (tag l)
- (set! type (if (pyclass? tag)
- tag
- (aif it (ref tag '__class__)
- it
- tag)))
- (set! value
- (aif it (ref tag 'value)
- it
- (if (pair? l)
- (car l)
- None)))))
- #:finally
- (lambda ()
- (exit type value trace)))
- (raise TypeError "no __enter__ member"))
- (raise TypeError "no __exit__ member"))))
-
- ((_ (exp) . code)
- (with0 (id exp) . code))))
-
-
-
-
-
-
diff --git a/modules/language/python/yield.scm b/modules/language/python/yield.scm
deleted file mode 100644
index 9fb5d8e..0000000
--- a/modules/language/python/yield.scm
+++ /dev/null
@@ -1,138 +0,0 @@
-(define-module (language python yield)
- #:use-module (oop pf-objects)
- #:use-module (language python exceptions)
- #:use-module (oop goops)
- #:use-module (ice-9 control)
- #:use-module (ice-9 match)
- #:use-module (language python persist)
- #:replace (send)
- #:export (<yield>
- in-yield define-generator
- make-generator
- sendException sendClose))
-
-(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-
-(define in-yield (make-fluid #f))
-
-(define-syntax-parameter YIELD (lambda (x) #f))
-
-(define-syntax yield
- (lambda (x)
- (syntax-case x ()
- ((_ x ...)
- #'(begin
- (fluid-set! in-yield #t)
- ((abort-to-prompt YIELD x ...))))
- (x
- #'(lambda x
- (fluid-set! in-yield #t)
- ((apply abort-to-prompt YIELD x)))))))
-
-(define-syntax make-generator
- (syntax-rules ()
- ((_ closure)
- (make-generator () closure))
- ((_ args closure)
- (lambda a
- (let ()
- (define obj (make <yield>))
- (define ab (make-prompt-tag))
- (syntax-parameterize ((YIELD (lambda x #'ab)))
- (slot-set! obj 'k #f)
- (slot-set! obj 'closed #f)
- (slot-set! obj 's
- (lambda ()
- (call-with-prompt
- ab
- (lambda ()
- (apply closure yield a)
- (slot-set! obj 'closed #t)
- (throw StopIteration))
- (letrec ((lam
- (lambda (k . l)
- (fluid-set! in-yield #f)
- (slot-set! obj 'k
- (lambda (a)
- (call-with-prompt
- ab
- (lambda ()
- (k a))
- lam)))
- (apply values l))))
- lam))))
- obj))))))
-
-(define-syntax define-generator
- (lambda (x)
- (syntax-case x ()
- ((_ (f y . args) code ...)
- #'(define f (make-generator args (lambda (y . args) code ...)))))))
-
-(define-class <yield> () s k closed)
-(name-object <yield>)
-(cpit <yield> (o (lambda (o s k closed)
- (slot-set! o 's s )
- (slot-set! o 'k k )
- (slot-set! o 'closed closed))
- (list
- (slot-ref o 's)
- (slot-ref o 'k)
- (slot-ref o 'closed))))
-
-(define-method (send (l <yield>) . u)
- (let ((k (slot-ref l 'k))
- (s (slot-ref l 's))
- (c (slot-ref l 'closed)))
- (if (not c)
- (if k
- (k (lambda ()
- (if (null? u)
- 'Null
- (apply values u))))
- (throw 'python (Exception))))))
-
-
-(define-method (sendException (l <yield>) e . ls)
- (let ((k (slot-ref l 'k))
- (s (slot-ref l 's))
- (c (slot-ref l 'closed)))
- (if (not c)
- (if k
- (k (lambda ()
- (if (pyclass? e)
- (throw 'python (apply e ls))
- (apply throw 'python e ls))))
- (throw 'python (Exception))))))
-
-(define-method (sendClose (l <yield>))
- (let ((k (slot-ref l 'k))
- (s (slot-ref l 's))
- (c (slot-ref l 'closed)))
- (if c
- (values)
- (if k
- (catch #t
- (lambda ()
- (k (lambda () (throw 'python GeneratorExit)))
- (slot-set! l 'closed #t)
- (throw 'python RuntimeError))
- (lambda (k tag . v)
- (slot-set! l 'closed #t)
- (if (eq? tag 'python)
- (match v
- ((tag . l)
- (if (eq? tag GeneratorExit)
- (values)
- (apply throw tag l))))
- (apply throw tag v))))
- (slot-set! l 'closed #t)))))
-
-(define-method (send (l <p>) . u)
- (apply (ref l '__send__) u))
-
-(define-method (sendException (l <p>) . u)
- (apply (ref l '__exception__) u))
-
-(define-method (sendClose (l <p>))
- ((ref l '__close__)))