1.1 --- a/micropython/inspect.py Sun Sep 05 02:20:05 2010 +0200
1.2 +++ b/micropython/inspect.py Sun Sep 05 21:14:40 2010 +0200
1.3 @@ -105,6 +105,7 @@
1.4 # Current expression state.
1.5
1.6 self.expr = None
1.7 + self.in_assignment = 0 # For slice and subscript handling.
1.8
1.9 # Namespace state.
1.10
1.11 @@ -416,12 +417,12 @@
1.12 module = attr.get_value()
1.13 return module
1.14
1.15 - def _visitOperator(self, node):
1.16 + def _visitOperator(self, node, operator_name=None):
1.17
1.18 "Accounting method for the operator 'node'."
1.19
1.20 operator_module = self._ensureOperators()
1.21 - operator_fn = operator_functions[node.__class__.__name__]
1.22 + operator_fn = operator_functions[operator_name or node.__class__.__name__]
1.23 self.use_specific_attribute(operator_module.full_name(), operator_fn)
1.24 return self.OP(node)
1.25
1.26 @@ -552,8 +553,10 @@
1.27
1.28 def visitAssign(self, node):
1.29 self.expr = self.dispatch(node.expr)
1.30 + self.in_assignment = 1
1.31 for n in node.nodes:
1.32 self.dispatch(n)
1.33 + self.in_assignment = 0
1.34 return None
1.35
1.36 def visitAssAttr(self, node):
1.37 @@ -977,15 +980,7 @@
1.38 visitRightShift = _visitBinary
1.39
1.40 def visitSlice(self, node):
1.41 - expr = self.dispatch(node.expr)
1.42 - self._visitAttr(expr, "__getitem__", node)
1.43 -
1.44 - if node.lower is not None:
1.45 - self.dispatch(node.lower)
1.46 - if node.upper is not None:
1.47 - self.dispatch(node.upper)
1.48 -
1.49 - self.use_specific_attribute("__builtins__", "slice")
1.50 + self._visitOperator(node, self.in_assignment and "AssSlice" or "Slice")
1.51
1.52 visitSliceobj = OP
1.53
1.54 @@ -997,11 +992,7 @@
1.55 visitSub = _visitBinary
1.56
1.57 def visitSubscript(self, node):
1.58 - expr = self.dispatch(node.expr)
1.59 - self._visitAttr(expr, "__getitem__", node)
1.60 -
1.61 - for sub in node.subs:
1.62 - self.dispatch(sub)
1.63 + self._visitOperator(node, self.in_assignment and "AssSubscript" or "Subscript")
1.64
1.65 def visitTryExcept(self, node):
1.66 self.dispatch(node.body)