# Copyright 2006 Georg Brandl. | |
# Licensed to PSF under a Contributor Agreement. | |
"""Fixer for intern(). | |
intern(s) -> sys.intern(s)""" | |
# Local imports | |
from .. import pytree | |
from .. import fixer_base | |
from ..fixer_util import Name, Attr, touch_import | |
class FixIntern(fixer_base.BaseFix): | |
BM_compatible = True | |
order = "pre" | |
PATTERN = """ | |
power< 'intern' | |
trailer< lpar='(' | |
( not(arglist | argument<any '=' any>) obj=any | |
| obj=arglist<(not argument<any '=' any>) any ','> ) | |
rpar=')' > | |
after=any* | |
> | |
""" | |
def transform(self, node, results): | |
syms = self.syms | |
obj = results["obj"].clone() | |
if obj.type == syms.arglist: | |
newarglist = obj.clone() | |
else: | |
newarglist = pytree.Node(syms.arglist, [obj.clone()]) | |
after = results["after"] | |
if after: | |
after = [n.clone() for n in after] | |
new = pytree.Node(syms.power, | |
Attr(Name(u"sys"), Name(u"intern")) + | |
[pytree.Node(syms.trailer, | |
[results["lpar"].clone(), | |
newarglist, | |
results["rpar"].clone()])] + after) | |
new.prefix = node.prefix | |
touch_import(None, u'sys', node) | |
return new |