diff options
Diffstat (limited to 'modules/oop')
-rw-r--r-- | modules/oop/pf-objects.scm | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/modules/oop/pf-objects.scm b/modules/oop/pf-objects.scm index 579a148..eff5853 100644 --- a/modules/oop/pf-objects.scm +++ b/modules/oop/pf-objects.scm @@ -159,15 +159,16 @@ explicitly tell it to not update etc. (cdr r) fail))) +(define inclass (make-fluid #f)) (define-method (find-in-class (klass <p>) key -fail) (let ((h (slot-ref klass 'h))) (aif dict (hash-ref h '__dict__) - (kif it (py-get dict key fail) + (kif it (py-get dict key fail) it - (kif it (py-get dict (symbol->string key) fail) - it - (hash-ref h key -fail))) - (hash-ref h key -fail)))) + (kif it (py-get dict (symbol->string key) fail) + it + (hash-ref h key -fail))) + (hash-ref h key -fail)))) (define-method (find-in-class x key fail) fail) @@ -217,8 +218,6 @@ explicitly tell it to not update etc. (define (mk-getter-object f) (lambda (obj cls) - (find-in-class obj '__name__ #f) - (find-in-class cls '__name__ #f) (if (pytype? obj) f (if (pyclass? obj) @@ -1452,15 +1451,21 @@ explicitly tell it to not update etc. it2 it1)) (kif it2 (ficap self key fail) - it2 + (if (pyobject? self) + it2 + (aif dd1 (ref it2 '__get__) + (dd1 self self) + it2)) (aif it (ficap-raw class '__getattr__ #f) (kif it1 (catch #t (lambda () (it self (symbol->string key))) (lambda x fail)) - (aif dd1 (ref it1 '__get__) - (dd1 self class) - it1) + (if (pyobject? self) + it1 + (aif dd1 (ref it1 '__get__) + (dd1 self self) + it1)) fail) fail))) fail))) |