summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/language/python/property.scm35
-rw-r--r--modules/language/python/set.scm2
-rw-r--r--modules/oop/pf-objects.scm45
3 files changed, 49 insertions, 33 deletions
diff --git a/modules/language/python/property.scm b/modules/language/python/property.scm
new file mode 100644
index 0000000..eaefc74
--- /dev/null
+++ b/modules/language/python/property.scm
@@ -0,0 +1,35 @@
+(define-module (language python property)
+ #:use-module (oop pf-objects)
+ #:use-module (oop goops)
+ #:use-module (language python def)
+ #:use-module (language python exceptions)
+ #:export (property))
+
+(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 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/set.scm b/modules/language/python/set.scm
index cd12586..f0e2956 100644
--- a/modules/language/python/set.scm
+++ b/modules/language/python/set.scm
@@ -12,7 +12,7 @@
(define-class <set> () dict)
(define miss (list 'miss))
-
+
(define-python-class set (<set>)
(define __init__
(case-lambda
diff --git a/modules/oop/pf-objects.scm b/modules/oop/pf-objects.scm
index 3508d16..ebaa3b7 100644
--- a/modules/oop/pf-objects.scm
+++ b/modules/oop/pf-objects.scm
@@ -144,7 +144,7 @@ explicitly tell it to not update etc.
(if (pair? parents)
(let ((parent (car parents)))
(let* ((h (slot-ref parent 'h))
- (r (hash-ref class-h key fail)))
+ (r (hash-ref h key fail)))
(if (eq? r fail)
(lpp (cdr parents))
r)))
@@ -722,12 +722,13 @@ explicitly tell it to not update etc.
(define *super* (list 'super))
+(define (not-a-super) 'not-a-super)
(define (py-super class obj)
(define (make cl parents)
(let ((c (make-p))
(o (make-p)))
(set c '__super__ #t)
- (set c '__parents__ parents)
+ (set c '__mro__ parents)
(set c '__getattribute__ (lambda (self key . l)
(aif it (ref c key)
(if (procedure? it)
@@ -744,31 +745,15 @@ explicitly tell it to not update etc.
(call-with-values
(lambda ()
- (let lp ((c (ref obj '__class__)))
- (if (eq? class c)
- (let ((p (ref c '__parents__)))
- (if (pair? p)
- (values (car p) p)
- (values #t #t)))
- (let lp2 ((p (ref c 'parents)))
- (if (pair? p)
- (call-with-values (lambda () (lp (car p)))
- (lambda (c ps)
- (cond
- ((eq? c #t)
- (if (pair? p)
- (let ((x (car p)))
- (values
- x
- (append
- (ref x '__parents__)
- (cdr p))))
- (values #t #t)))
- (c
- (values c (append ps (cdr p))))
- (else
- (lp2 (cdr p))))))
- (values #f #f))))))
+ (let lp ((l (ref (ref obj '__class__) '__mro__ '())))
+ (if (pair? l)
+ (if (eq? class (car l))
+ (let ((r (cdr l)))
+ (if (pair? r)
+ (values (car r) r)
+ (values #f #f)))
+ (lp (cdr l)))
+ (values #f #f))))
make))
@@ -870,11 +855,7 @@ explicitly tell it to not update etc.
(if tree
(let ((x (tree-ref tree))
(n (nxt tree)))
- (if (pk 'find (find-tree x n))
+ (if (find-tree x n)
(lp n r)
(lp n (cons x r))))
(reverse r))))
-
-
-
-