summaryrefslogtreecommitdiff
path: root/modules/language/python/bytes.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-02-21 13:57:57 +0100
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-02-21 13:57:57 +0100
commit03e16c53f6579a969c285b89b8cb86140f1411a6 (patch)
treed47f3ee31040b7b11339fda849c090f0e2e16724 /modules/language/python/bytes.scm
parent0a6079db826621c32cdfc89c3daea217582f0bb7 (diff)
deepcopy copy works
Diffstat (limited to 'modules/language/python/bytes.scm')
-rw-r--r--modules/language/python/bytes.scm41
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 ...)