code: def visit_loop(self, node, cond=None):
          
          # visit once to gather newly declared vars
          for stmt in node.body:
              self.visit(stmt)
  
          # freeze current state
          old_range = self.result.copy()
  
          # extra round
          for stmt in node.body:
              self.visit(stmt)
  
          # widen any change
          for expr, range_ in old_range.items():
              self.result[expr] = self.result[expr].widen(range_)
  
          # propagate  the new informations
          cond and self.visit(cond)
          for stmt in node.body:
              self.visit(stmt)
  
          for stmt in node.orelse:
              self.visit(stmt)
docs: Handle incremented variables in loop body.
  
          >>> import gast as ast
          >>> from pythran import passmanager, backend
          >>> node = ast.parse('''
          ... def foo():
          ...     a = b = c = 2
          ...     while a > 0:
          ...         a -= 1
          ...         b += 1''')
          >>> pm = passmanager.PassManager("test")
          >>> res = pm.gather(RangeValues, node)
          >>> res['a']
          Interval(low=-inf, high=2)
          >>> res['b']
          Interval(low=2, high=inf)
          >>> res['c']
          Interval(low=2, high=2)