From 03e16c53f6579a969c285b89b8cb86140f1411a6 Mon Sep 17 00:00:00 2001 From: Stefan Israelsson Tampe Date: Wed, 21 Feb 2018 13:57:57 +0100 Subject: deepcopy copy works --- modules/language/python/bytes.scm | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'modules/language/python/bytes.scm') 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 ( pybytes-listing bytes bytearray bytes->bytevector pybytesarray-listing)) @@ -24,6 +25,42 @@ (define-class () bytes) (define-class () n vec) +(name-object ) +(name-object ) + +(cpit (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 (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 )) o) (define-method (b-get (o )) @@ -81,6 +118,8 @@ (lp (- i 1) (cdr r))) (slot-set! self 'bytes bytes))))))))))) +(name-object bytes) + (define-python-class 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 ) . u) code ...) -- cgit v1.2.3