summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/language/python/def.scm14
-rw-r--r--modules/language/python/module/python.scm12
-rw-r--r--modules/oop/pf-objects.scm17
3 files changed, 25 insertions, 18 deletions
diff --git a/modules/language/python/def.scm b/modules/language/python/def.scm
index c65cd07..1b91f85 100644
--- a/modules/language/python/def.scm
+++ b/modules/language/python/def.scm
@@ -17,9 +17,17 @@
(hash-remove! kw s)
it)
v))
- (begin
- (hash-remove! kw s)
- (values (cdr ww*) (car ww*)))))
+ (if (pair? ww*)
+ (begin
+ (hash-remove! kw s)
+ (values (cdr ww*) (car ww*)))
+ (values ww*
+ (aif it (hash-ref kw s #f)
+ (begin
+ (hash-remove! kw s)
+ it)
+ v)))))
+
(define (get-akw l)
(let lp ((l l) (args '()) (kw (make-hash-table)))
diff --git a/modules/language/python/module/python.scm b/modules/language/python/module/python.scm
index 110ae6b..1b8973f 100644
--- a/modules/language/python/module/python.scm
+++ b/modules/language/python/module/python.scm
@@ -18,18 +18,18 @@
#:use-module (language python number )
#:use-module (language python dir )
#:use-module (language python hash )
+ #:use-module (language python property )
#:replace (list abs min max)
#:re-export (Exception StopIteration send sendException next
GeneratorExit sendClose RuntimeError
- len dir next dict None)
+ len dir next dict None property)
#:export (print repr complex float int round
set all any bin callable
chr classmethod staticmethod
divmod enumerate filter format
getattr hasattr hash hex isinstance
- iter map sum id input oct ord pow
- property))
+ iter map sum id input oct ord pow))
(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
@@ -191,12 +191,6 @@
((x y z)
(py-mod (expt x y) z))))
-(def (property (= getx None) (= setx None) (= delx None))
- (let ((o (make <property>)))
- (slot-set! o 'get getx)
- (slot-set! o 'set setx)
- (slot-set! o 'del delx)
- o))
(define min py-min)
diff --git a/modules/oop/pf-objects.scm b/modules/oop/pf-objects.scm
index 05f65be..56247ab 100644
--- a/modules/oop/pf-objects.scm
+++ b/modules/oop/pf-objects.scm
@@ -165,9 +165,10 @@ explicitly tell it to not update etc.
(define not-implemented (cons 'not 'implemeneted))
(define-syntax-rule (prop-ref xx x)
- (let ((r x))
- (if (is-a? r <property>)
- ((slot-ref r 'get) xx)
+ (let ((y xx)
+ (r x))
+ (if (and (is-a? r <property>) (not (pyclass? y)))
+ ((slot-ref r 'get) y)
r)))
(define-syntax-rule (mrefx-py- x key l)
@@ -300,7 +301,7 @@ explicitly tell it to not update etc.
(define-syntax-rule (mset-py- x key val)
(let ((v (mref- x key fail)))
- (if (or (eq? v fail) (not (is-a? v <property>)))
+ (if (or (eq? v fail) (not (and (is-a? v <property>) (not (pyclass? x)))))
(let ((f (mref-py- x '__setattr__ '())))
(if (or (eq? f not-implemented) (not f))
(mset- x key val)
@@ -308,7 +309,11 @@ explicitly tell it to not update etc.
((slot-ref v 'set) x val))))
(define-syntax-rule (mklam (mset a ...) val)
- (if (procedure? val)
+ (if (and (procedure? val)
+ (not (pyclass? val))
+ (if (is-a? val <p>)
+ (ref val '__call__)
+ #t))
(if (procedure-property val 'py-special)
(mset a ... val)
(mset a ... (object-method val)))
@@ -592,7 +597,7 @@ explicitly tell it to not update etc.
((ddef dname dval) (... ...)))
(let ()
(define name
- (letrec ((mname sval) (... ...) (dname dval) (... ...))
+ (let* ((mname sval) (... ...) (dname dval) (... ...))
(make-pf-class name
(let ((s (make-pf)))
(set s 'mname mname) (... ...)