code: def visit_If(self, node):
          
          self.visit(node.test)
          old_range = self.result
  
          self.result = old_range.copy()
          for stmt in node.body:
              self.visit(stmt)
          body_range = self.result
  
          self.result = old_range.copy()
          for stmt in node.orelse:
              self.visit(stmt)
          orelse_range = self.result
  
          self.result = body_range
          for k, v in orelse_range.items():
              if k in self.result:
                  self.result[k] = self.result[k].union(v)
              else:
                  self.result[k] = v
docs: Handle iterate variable across branches
  
          >>> import gast as ast
          >>> from pythran import passmanager, backend
          >>> node = ast.parse('''
          ... def foo(a):
          ...     if a > 1: b = 1
          ...     else: b = 3''')
  
          >>> pm = passmanager.PassManager("test")
          >>> res = pm.gather(RangeValues, node)
          >>> res['b']
          Interval(low=1, high=3)