blob: 6be11cd39dc8987f74fb3632f9a7f4b7c8f7d856 [file] [log] [blame]
Martin v. Löwisef04c442008-03-19 05:04:44 +00001# Copyright 2006 Georg Brandl.
2# Licensed to PSF under a Contributor Agreement.
3
4"""Fixer for intern().
5
6intern(s) -> sys.intern(s)"""
7
8# Local imports
9from .. import pytree
Benjamin Petersondf6dc8f2008-06-15 02:57:40 +000010from .. import fixer_base
Benjamin Peterson0b24b3d2008-12-16 03:57:54 +000011from ..fixer_util import Name, Attr, touch_import
Martin v. Löwisef04c442008-03-19 05:04:44 +000012
13
Benjamin Petersondf6dc8f2008-06-15 02:57:40 +000014class FixIntern(fixer_base.BaseFix):
Benjamin Petersonf37eb3a2010-10-14 23:00:04 +000015 BM_compatible = True
16 order = "pre"
Martin v. Löwisef04c442008-03-19 05:04:44 +000017
18 PATTERN = """
19 power< 'intern'
20 trailer< lpar='('
21 ( not(arglist | argument<any '=' any>) obj=any
22 | obj=arglist<(not argument<any '=' any>) any ','> )
23 rpar=')' >
24 after=any*
25 >
26 """
27
28 def transform(self, node, results):
29 syms = self.syms
30 obj = results["obj"].clone()
31 if obj.type == syms.arglist:
32 newarglist = obj.clone()
33 else:
34 newarglist = pytree.Node(syms.arglist, [obj.clone()])
35 after = results["after"]
36 if after:
37 after = [n.clone() for n in after]
38 new = pytree.Node(syms.power,
39 Attr(Name("sys"), Name("intern")) +
40 [pytree.Node(syms.trailer,
41 [results["lpar"].clone(),
42 newarglist,
43 results["rpar"].clone()])] + after)
Benjamin Peterson2c3ac6b2009-06-11 23:47:38 +000044 new.prefix = node.prefix
Benjamin Peterson0b24b3d2008-12-16 03:57:54 +000045 touch_import(None, 'sys', node)
Martin v. Löwisef04c442008-03-19 05:04:44 +000046 return new