summaryrefslogtreecommitdiff
path: root/modules/language/python/#persist.scm#
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/#persist.scm#')
-rw-r--r--modules/language/python/#persist.scm#114
1 files changed, 0 insertions, 114 deletions
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))))))))