class_docstr: Prevents parameter shadowing by creating new variable.
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse("def foo(a): a = 1")
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(UnshadowParameters, node)
  >>> print(pm.dump(backend.Python, node))
  def foo(a):
      a_ = a
      a_ = 1
class_docstr_tok: ["Prevents","parameter","shadowing","by","creating","new","variable",".",">",">",">","import","gast","as","ast",">",">",">","from","pythran","import","passmanager",",","backend",">",">",">","node","=","ast.parse","(","``","def","foo","(","a",")",":","a","=","1","''",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","_",",","node","=","pm.apply","(","UnshadowParameters",",","node",")",">",">",">","print","(","pm.dump","(","backend.Python",",","node",")",")","def","foo","(","a",")",":","a_","=","a","a_","=","1"]
code: def visit_FunctionDef(self, node):
      self.argsid = {arg.id for arg in node.args.args}
      self.renaming = {}
      [self.visit(n) for n in node.body]
      # do it twice to make sure all renaming are done
      [self.visit(n) for n in node.body]
      for k, v in self.renaming.items():
          node.body.insert(
              0,
              ast.Assign(
                  [ast.Name(v, ast.Store(), None, None)],
                  ast.Name(k, ast.Load(), None, None),
                  None,
              ),
          )
      self.update |= bool(self.renaming)
      return node
  
file_path: pythran/pythran/transformations/unshadow_parameters.py
imports: from pythran.analyses import Identifiers
  from pythran.passmanager import Transformation
  import gast
label_desc: Use image node_id 2 for calling the UnshadowParameters obj's underlying member method code with example usage: obj.visit_FunctionDef(node) and returns: node