From 7c0c098b89dc33ad1018b6542def4e2d34ddd2a8 Mon Sep 17 00:00:00 2001 From: Stefan Israelsson Tampe Date: Fri, 13 Apr 2018 22:29:49 +0200 Subject: attribute error on missing attribute lookup --- modules/language/python/compile.scm | 12 +++++++++--- modules/language/python/module/enum.py | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'modules/language') 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 ...)) diff --git a/modules/language/python/module/enum.py b/modules/language/python/module/enum.py index 4f388ad..89047cd 100644 --- a/modules/language/python/module/enum.py +++ b/modules/language/python/module/enum.py @@ -548,7 +548,7 @@ class Enum(metaclass=EnumMeta): def __repr__(self): return "<%s.%s: %r>" % ( - self.__class__.__name__, self._name_, self._value_) + self.__class__.__name__, self._name_, self._value_) def __str__(self): return "%s.%s" % (self.__class__.__name__, self._name_) -- cgit v1.2.3