1.1 --- a/micropython/branch.py Fri Oct 25 19:41:48 2013 +0200
1.2 +++ b/micropython/branch.py Sat Oct 26 01:04:48 2013 +0200
1.3 @@ -1,7 +1,7 @@
1.4 #!/usr/bin/env python
1.5
1.6 """
1.7 -Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Paul Boddie <paul@boddie.org.uk>
1.8 +Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Paul Boddie <paul@boddie.org.uk>
1.9
1.10 This program is free software; you can redistribute it and/or modify it under
1.11 the terms of the GNU General Public License as published by the Free Software
1.12 @@ -328,7 +328,7 @@
1.13
1.14 return users[name]
1.15
1.16 - def _define_attribute_user(self, node):
1.17 + def _define_attribute_user(self, node, value):
1.18
1.19 """
1.20 Define 'node' as the user of attributes, indicating the point where the
1.21 @@ -336,11 +336,14 @@
1.22 """
1.23
1.24 name = node.name
1.25 - self._define_attribute_user_for_name(node, name)
1.26 + self._define_attribute_user_for_name(node, name, value)
1.27 +
1.28 + def _define_attribute_user_for_name(self, node, name, value=None):
1.29
1.30 - def _define_attribute_user_for_name(self, node, name):
1.31 -
1.32 - "Define 'node' as the user of attributes for the given 'name'."
1.33 + """
1.34 + Define 'node' as the user of attributes for the given 'name', having the
1.35 + specified 'value'.
1.36 + """
1.37
1.38 users = self.attribute_users[-1]
1.39
1.40 @@ -350,19 +353,26 @@
1.41
1.42 # Record the attribute combinations for the name.
1.43
1.44 - self._init_attribute_user_for_name(node, name)
1.45 + self._init_attribute_user_for_name(node, name, value)
1.46
1.47 # Remember this user.
1.48
1.49 self.all_attribute_users.add(node)
1.50
1.51 - def _init_attribute_user_for_name(self, node, name):
1.52 + def _init_attribute_user_for_name(self, node, name, value=None):
1.53
1.54 "Make sure that 'node' is initialised for 'name'."
1.55
1.56 self._init_attribute_user(node)
1.57 node._attrnames[name] = None
1.58
1.59 + # Assigned values for names.
1.60 +
1.61 + if value:
1.62 + if node._values is None:
1.63 + node._values = {}
1.64 + node._values[name] = value
1.65 +
1.66 def _init_attribute_user(self, node):
1.67
1.68 # Attribute usage for names.
2.1 --- a/micropython/data.py Fri Oct 25 19:41:48 2013 +0200
2.2 +++ b/micropython/data.py Sat Oct 26 01:04:48 2013 +0200
2.3 @@ -259,15 +259,6 @@
2.4 self.namespace[name] = Attr(None, self, name)
2.5 attr = self.namespace[name]
2.6
2.7 - # Also direct assignments to individual name users.
2.8 -
2.9 - users = self.attribute_users[-1]
2.10 -
2.11 - if users.has_key(name):
2.12 - for user in users[name]:
2.13 - user._values = user._values or {}
2.14 - user._values[name] = attr_or_value
2.15 -
2.16 # Update the attribute records.
2.17
2.18 self._set_using_attr(attr, attr_or_value, single_assignment)
2.19 @@ -1440,13 +1431,13 @@
2.20 self.importer.use_name(attrname, self.full_name(), value)
2.21 return []
2.22
2.23 - def _define_attribute_user_for_name(self, node, name):
2.24 + def _define_attribute_user_for_name(self, node, name, value=None):
2.25 if self.can_use_name_for_usage(name):
2.26 - NamespaceDict._define_attribute_user_for_name(self, node, name)
2.27 + NamespaceDict._define_attribute_user_for_name(self, node, name, value)
2.28
2.29 - def _init_attribute_user_for_name(self, node, name):
2.30 + def _init_attribute_user_for_name(self, node, name, value=None):
2.31 if self.can_use_name_for_usage(name):
2.32 - NamespaceDict._init_attribute_user_for_name(self, node, name)
2.33 + NamespaceDict._init_attribute_user_for_name(self, node, name, value)
2.34
2.35 def _define_attribute_accessor(self, name, attrname, node, value):
2.36 if self.can_use_name_for_usage(name):
3.1 --- a/micropython/inspect.py Fri Oct 25 19:41:48 2013 +0200
3.2 +++ b/micropython/inspect.py Sat Oct 26 01:04:48 2013 +0200
3.3 @@ -566,14 +566,14 @@
3.4 def resume_abandoned_branches(self):
3.5 self.get_namespace()._resume_abandoned_branches()
3.6
3.7 - def define_attribute_user(self, node):
3.8 + def define_attribute_user(self, node, value):
3.9
3.10 """
3.11 Define 'node' as the user of attributes, indicating the point where the
3.12 user is defined.
3.13 """
3.14
3.15 - self.get_namespace()._define_attribute_user(node)
3.16 + self.get_namespace()._define_attribute_user(node, value)
3.17
3.18 def use_attribute(self, name, attrname, value=None):
3.19
3.20 @@ -919,7 +919,7 @@
3.21 self._visitAssName(node)
3.22
3.23 def _visitAssName(self, node):
3.24 - self.define_attribute_user(node)
3.25 + self.define_attribute_user(node, self.expr)
3.26 self.store(node.name, self.expr)
3.27
3.28 # Ensure the presence of the given name in this namespace.
3.29 @@ -1034,7 +1034,7 @@
3.30
3.31 self.namespaces.pop()
3.32 self.store(node.name, cls, static_def=True)
3.33 - self.define_attribute_user(node)
3.34 + self.define_attribute_user(node, cls)
3.35 self.add_object(cls)
3.36
3.37 # Process the class body in its own namespace.