/Lib/lib2to3/fixes/fix_intern.py

http://unladen-swallow.googlecode.com/ · Python · 44 lines · 32 code · 6 blank · 6 comment · 4 complexity · 00e20c0723e807004c3fd0ae88d26b09 MD5 · raw file

  1. # Copyright 2006 Georg Brandl.
  2. # Licensed to PSF under a Contributor Agreement.
  3. """Fixer for intern().
  4. intern(s) -> sys.intern(s)"""
  5. # Local imports
  6. from .. import pytree
  7. from .. import fixer_base
  8. from ..fixer_util import Name, Attr, touch_import
  9. class FixIntern(fixer_base.BaseFix):
  10. PATTERN = """
  11. power< 'intern'
  12. trailer< lpar='('
  13. ( not(arglist | argument<any '=' any>) obj=any
  14. | obj=arglist<(not argument<any '=' any>) any ','> )
  15. rpar=')' >
  16. after=any*
  17. >
  18. """
  19. def transform(self, node, results):
  20. syms = self.syms
  21. obj = results["obj"].clone()
  22. if obj.type == syms.arglist:
  23. newarglist = obj.clone()
  24. else:
  25. newarglist = pytree.Node(syms.arglist, [obj.clone()])
  26. after = results["after"]
  27. if after:
  28. after = [n.clone() for n in after]
  29. new = pytree.Node(syms.power,
  30. Attr(Name("sys"), Name("intern")) +
  31. [pytree.Node(syms.trailer,
  32. [results["lpar"].clone(),
  33. newarglist,
  34. results["rpar"].clone()])] + after)
  35. new.set_prefix(node.get_prefix())
  36. touch_import(None, 'sys', node)
  37. return new