summaryrefslogtreecommitdiffstats
path: root/Lib/lib2to3/fixes/fix_intern.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/lib2to3/fixes/fix_intern.py')
-rw-r--r--Lib/lib2to3/fixes/fix_intern.py27
1 files changed, 22 insertions, 5 deletions
diff --git a/Lib/lib2to3/fixes/fix_intern.py b/Lib/lib2to3/fixes/fix_intern.py
index d752843..285c126 100644
--- a/Lib/lib2to3/fixes/fix_intern.py
+++ b/Lib/lib2to3/fixes/fix_intern.py
@@ -6,8 +6,9 @@
intern(s) -> sys.intern(s)"""
# Local imports
+from .. import pytree
from .. import fixer_base
-from ..fixer_util import ImportAndCall, touch_import
+from ..fixer_util import Name, Attr, touch_import
class FixIntern(fixer_base.BaseFix):
@@ -30,10 +31,26 @@ class FixIntern(fixer_base.BaseFix):
# PATTERN above but I don't know how to do it so...
obj = results['obj']
if obj:
+ if obj.type == self.syms.star_expr:
+ return # Make no change.
if (obj.type == self.syms.argument and
- obj.children[0].value in {'**', '*'}):
+ obj.children[0].value == '**'):
return # Make no change.
- names = ('sys', 'intern')
- new = ImportAndCall(node, results, names)
- touch_import(None, 'sys', node)
+ 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