Martin v. Löwis | ef04c44 | 2008-03-19 05:04:44 +0000 | [diff] [blame] | 1 | # Copyright 2006 Georg Brandl. |
| 2 | # Licensed to PSF under a Contributor Agreement. |
| 3 | |
| 4 | """Fixer for intern(). |
| 5 | |
| 6 | intern(s) -> sys.intern(s)""" |
| 7 | |
| 8 | # Local imports |
| 9 | from .. import pytree |
Benjamin Peterson | df6dc8f | 2008-06-15 02:57:40 +0000 | [diff] [blame] | 10 | from .. import fixer_base |
Benjamin Peterson | 0b24b3d | 2008-12-16 03:57:54 +0000 | [diff] [blame] | 11 | from ..fixer_util import Name, Attr, touch_import |
Martin v. Löwis | ef04c44 | 2008-03-19 05:04:44 +0000 | [diff] [blame] | 12 | |
| 13 | |
Benjamin Peterson | df6dc8f | 2008-06-15 02:57:40 +0000 | [diff] [blame] | 14 | class FixIntern(fixer_base.BaseFix): |
Benjamin Peterson | f37eb3a | 2010-10-14 23:00:04 +0000 | [diff] [blame] | 15 | BM_compatible = True |
| 16 | order = "pre" |
Martin v. Löwis | ef04c44 | 2008-03-19 05:04:44 +0000 | [diff] [blame] | 17 | |
| 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 Peterson | 2c3ac6b | 2009-06-11 23:47:38 +0000 | [diff] [blame] | 44 | new.prefix = node.prefix |
Benjamin Peterson | 0b24b3d | 2008-12-16 03:57:54 +0000 | [diff] [blame] | 45 | touch_import(None, 'sys', node) |
Martin v. Löwis | ef04c44 | 2008-03-19 05:04:44 +0000 | [diff] [blame] | 46 | return new |