diff options
Diffstat (limited to 'modules/language/python/compile.scm')
-rw-r--r-- | modules/language/python/compile.scm | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/modules/language/python/compile.scm b/modules/language/python/compile.scm index 0b3b872..fc4a1c7 100644 --- a/modules/language/python/compile.scm +++ b/modules/language/python/compile.scm @@ -1932,7 +1932,13 @@ (apply values l)))) lam)))) obj))))) - + +(define miss (list 'miss)) +(define-inlinable (wr k x) + (if (eq? x miss) + (raise (AttributeError k)) + x)) + (define-syntax ref-x (lambda (x) (syntax-case x () @@ -1943,7 +1949,7 @@ ((_ v (#:fast-id f _) . l) #'(ref-x (f v) . l)) ((_ v (#:identifier x) . l) - #'(ref-x (ref v x) . l)) + #'(ref-x (wr x (ref v x miss)) . l)) ((_ v (#:call-obj x) . l) #'(ref-x (x v) . l)) ((_ v (#:call x ...) . l) @@ -1960,7 +1966,7 @@ (define-syntax del-x (syntax-rules () ((_ v (#:identifier x)) - (ref-x (ref v 'x))) + (ref-x (wr x (ref v x)))) ((_ v (#:call-obj x)) (values)) ((_ v (#:call x ...)) |