code: def can_use_c_for(self, node):
          
          assert isinstance(node.target, ast.Name)
          if sys.version_info.major == 3:
              range_name = 'range'
          else:
              range_name = 'xrange'
          pattern_range = ast.Call(func=ast.Attribute(
              value=ast.Name(id='__builtin__',
                             ctx=ast.Load(),
                             annotation=None),
              attr=range_name, ctx=ast.Load()),
              args=AST_any(), keywords=[])
          is_assigned = {node.target.id: False}
          [is_assigned.update(self.gather(IsAssigned, stmt))
           for stmt in node.body]
  
          nodes = ASTMatcher(pattern_range).search(node.iter)
          if (node.iter not in nodes or is_assigned[node.target.id]):
              return False
  
          args = node.iter.args
          if len(args) < 3:
              return True
          if isinstance(args[2], ast.Num):
              return True
          return False
docs: Check if a for loop can use classic C syntax.
  
          To use C syntax:
              - target should not be assign in the loop
              - xrange should be use as iterator
              - order have to be known at compile time