Issue #1515: Enable use of deepcopy() with instance methods. Patch by Robert Collins.
[python.git] / Lib / lib2to3 / fixes / fix_intern.py
blob67f98efbed37aeaa8a3dc262b98e451c0319db15
1 # Copyright 2006 Georg Brandl.
2 # Licensed to PSF under a Contributor Agreement.
4 """Fixer for intern().
6 intern(s) -> sys.intern(s)"""
8 # Local imports
9 from .. import pytree
10 from .. import fixer_base
11 from ..fixer_util import Name, Attr, touch_import
14 class FixIntern(fixer_base.BaseFix):
16 PATTERN = """
17 power< 'intern'
18 trailer< lpar='('
19 ( not(arglist | argument<any '=' any>) obj=any
20 | obj=arglist<(not argument<any '=' any>) any ','> )
21 rpar=')' >
22 after=any*
24 """
26 def transform(self, node, results):
27 syms = self.syms
28 obj = results["obj"].clone()
29 if obj.type == syms.arglist:
30 newarglist = obj.clone()
31 else:
32 newarglist = pytree.Node(syms.arglist, [obj.clone()])
33 after = results["after"]
34 if after:
35 after = [n.clone() for n in after]
36 new = pytree.Node(syms.power,
37 Attr(Name(u"sys"), Name(u"intern")) +
38 [pytree.Node(syms.trailer,
39 [results["lpar"].clone(),
40 newarglist,
41 results["rpar"].clone()])] + after)
42 new.prefix = node.prefix
43 touch_import(None, u'sys', node)
44 return new