diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-02-21 13:57:57 +0100 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-02-21 13:57:57 +0100 |
commit | 03e16c53f6579a969c285b89b8cb86140f1411a6 (patch) | |
tree | d47f3ee31040b7b11339fda849c090f0e2e16724 /modules/language/python/bytes.scm | |
parent | 0a6079db826621c32cdfc89c3daea217582f0bb7 (diff) |
deepcopy copy works
Diffstat (limited to 'modules/language/python/bytes.scm')
-rw-r--r-- | modules/language/python/bytes.scm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/modules/language/python/bytes.scm b/modules/language/python/bytes.scm index 7700a00..1a0a8af 100644 --- a/modules/language/python/bytes.scm +++ b/modules/language/python/bytes.scm @@ -10,6 +10,7 @@ #:use-module (language python exceptions) #:use-module (language python list) #:use-module (language python hash) + #:use-module (language python persist) #:export (<py-bytes> pybytes-listing bytes bytearray bytes->bytevector <py-bytearray> pybytesarray-listing)) @@ -24,6 +25,42 @@ (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>)) @@ -81,6 +118,8 @@ (lp (- i 1) (cdr r))) (slot-set! self 'bytes bytes))))))))))) +(name-object bytes) + (define-python-class bytearray (<py-bytearray>) (define __init__ (case-lambda @@ -125,6 +164,8 @@ (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 ...) |