# HG changeset patch # User Paul Boddie # Date 1382745316 -7200 # Node ID 41314b2f9ec87c6e98cc576a2833f4d34aaf4896 # Parent e57bf0bb98f1a42829055dc9cc76b0ad676d21ce Introduced dynamic attribute construction from path-sensitive information. diff -r e57bf0bb98f1 -r 41314b2f9ec8 micropython/data.py --- a/micropython/data.py Fri Oct 25 19:41:48 2013 +0200 +++ b/micropython/data.py Sat Oct 26 01:55:16 2013 +0200 @@ -184,25 +184,33 @@ module = self.module builtins = module and module.builtins or None importer = module and module.importer or None + users = self.attribute_users[-1] # Constants. - if importer is not None and importer.predefined_constants.has_key(name): + if importer and importer.predefined_constants.has_key(name): return importer.get_predefined_constant(name), "constant", None # Locals. + elif not external and users.has_key(name): + attr = Attr(None, self, name) + for user in users[name]: + if user._values and user._values.has_key(name): + self._set_using_attr(attr, user._values[name]) + return attr, "local", self.full_name() + elif not external and self.has_key(name): return self[name], "local", self.full_name() # Globals. - elif module is not None and module is not self and module.has_key(name): + elif module and module is not self and module.has_key(name): return module[name], "global", module.full_name() # Builtins. - elif builtins is not None and builtins.has_key(name): + elif builtins and builtins.has_key(name): return builtins[name], "builtins", builtins.full_name() # Unknown. @@ -266,7 +274,8 @@ if users.has_key(name): for user in users[name]: user._values = user._values or {} - user._values[name] = attr_or_value + userattr = user._values[name] = Attr(None, self, name) + self._set_using_attr(userattr, attr_or_value, single_assignment) # Update the attribute records.