1.1 --- a/micropython/inspect.py Sat Jun 12 23:09:30 2010 +0200
1.2 +++ b/micropython/inspect.py Sun Jun 13 02:24:35 2010 +0200
1.3 @@ -273,7 +273,7 @@
1.4 # Store in the module.
1.5
1.6 if not self.namespaces:
1.7 - if self.used_in_scope(name, "builtins"):
1.8 + if self.in_loop and self.used_in_scope(name, "builtins"):
1.9 raise InspectError("Name %r already used as a built-in." % name)
1.10 else:
1.11 self.set(name, obj, not self.in_loop)
1.12 @@ -283,9 +283,9 @@
1.13 else:
1.14 locals = self.namespaces[-1]
1.15
1.16 - if locals.used_in_scope(name, "global") and not name in locals.globals:
1.17 + if self.in_loop and locals.used_in_scope(name, "global") and not name in locals.globals:
1.18 raise InspectError("Name %r already used as global." % name)
1.19 - elif locals.used_in_scope(name, "builtins"):
1.20 + elif self.in_loop and locals.used_in_scope(name, "builtins"):
1.21 raise InspectError("Name %r already used as a built-in." % name)
1.22 else:
1.23 locals.set(name, obj, not self.in_loop)
1.24 @@ -939,6 +939,7 @@
1.25
1.26 if self.importer.predefined_constants.has_key(name):
1.27 attr = self.importer.get_predefined_constant(name)
1.28 + node._scope = "constant"
1.29
1.30 # Locals.
1.31
1.32 @@ -948,6 +949,7 @@
1.33 # Note usage of the local (potentially a class attribute).
1.34
1.35 self.use_specific_attribute(None, name)
1.36 + node._scope = "local"
1.37
1.38 # Globals.
1.39
1.40 @@ -957,27 +959,26 @@
1.41 # Note usage of the module attribute.
1.42
1.43 self.use_specific_attribute(self.full_name(), name)
1.44 + node._scope = "global"
1.45
1.46 # Note global usage in any local namespace.
1.47
1.48 if self.namespaces:
1.49 - if not self.namespaces[-1].note_scope(name, "global"):
1.50 - raise InspectError("Name %r cannot be used as global." % name)
1.51 + self.namespaces[-1].note_scope(name, "global")
1.52
1.53 # Builtins.
1.54
1.55 elif self.builtins is not None and self.builtins.has_key(name):
1.56 attr = self.builtins[name]
1.57 self.use_specific_attribute(self.builtins.full_name(), name)
1.58 + node._scope = "builtins"
1.59
1.60 # Note builtins usage in any local namespace.
1.61
1.62 if self.namespaces:
1.63 - if not self.namespaces[-1].note_scope(name, "builtins"):
1.64 - raise InspectError("Name %r cannot be used as a built-in." % name)
1.65 + self.namespaces[-1].note_scope(name, "builtins")
1.66 else:
1.67 - if not self.note_scope(name, "builtins"):
1.68 - raise InspectError("Name %r cannot be used as a built-in." % name)
1.69 + self.note_scope(name, "builtins")
1.70
1.71 # Unknown.
1.72
1.73 @@ -1005,7 +1006,10 @@
1.74
1.75 visitRightShift = _visitBinary
1.76
1.77 - visitSlice = OP
1.78 + def visitSlice(self, node):
1.79 + self.use_name("slice", node)
1.80 + self.use_name("__getitem__", node)
1.81 + self.OP(node)
1.82
1.83 visitSliceobj = OP
1.84