1.1 --- a/micropython/data.py Sun Oct 27 01:54:07 2013 +0200
1.2 +++ b/micropython/data.py Sun Oct 27 02:39:45 2013 +0200
1.3 @@ -188,7 +188,7 @@
1.4
1.5 users = self.attribute_users[-1]
1.6 if users.has_key(name):
1.7 - return LocalAttr(None, self, name, nodes=users[name])
1.8 + return LocalAttr(None, self, name, nodes=users[name], attr=attr)
1.9 else:
1.10 return attr
1.11
1.12 @@ -285,8 +285,12 @@
1.13
1.14 for user in users[name]:
1.15 user._values = user._values or {}
1.16 - attr = user._values[name] = Attr(None, self, name)
1.17 - self._set_using_attr(attr, attr_or_value) # enforce single assignment
1.18 + if isinstance(attr_or_value, BaseAttr):
1.19 + attr = attr_or_value
1.20 + else:
1.21 + attr = Attr(None, self, name)
1.22 + self._set_using_attr(attr, attr_or_value) # enforce single assignment
1.23 + user._values[name] = attr
1.24
1.25 # Add and/or obtain the namespace entry.
1.26
1.27 @@ -312,6 +316,8 @@
1.28 # Attempt to fix the context if not explicitly defined.
1.29
1.30 if isinstance(attr_or_value, BaseAttr):
1.31 + if isinstance(attr_or_value, LocalAttr):
1.32 + attr_or_value = attr_or_value.attr
1.33 return self.get_updated_context_values(attr_or_value.get_context_values())
1.34 else:
1.35 return self.get_updated_context_values([get_context_and_value(attr_or_value)])
1.36 @@ -561,9 +567,10 @@
1.37 later point.
1.38 """
1.39
1.40 - def __init__(self, position, parent, name, nodes):
1.41 + def __init__(self, position, parent, name, nodes, attr):
1.42 BaseAttr.__init__(self, position, parent, name)
1.43 self.nodes = nodes or set()
1.44 + self.attr = attr
1.45 self.users = None
1.46
1.47 def _get_defining_users(self):