15e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis# Copyright 2006 Georg Brandl. 25e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis# Licensed to PSF under a Contributor Agreement. 35e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 45e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis"""Fixer for intern(). 55e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 65e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwisintern(s) -> sys.intern(s)""" 75e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 85e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis# Local imports 95e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwisfrom .. import pytree 10e607823af57c176c3be23985f5bbf9260f6bd836Benjamin Petersonfrom .. import fixer_base 1143caaa09ea364aab6cbd7ede2aa9c3d004a129a5Benjamin Petersonfrom ..fixer_util import Name, Attr, touch_import 125e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 135e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 14e607823af57c176c3be23985f5bbf9260f6bd836Benjamin Petersonclass FixIntern(fixer_base.BaseFix): 15a81eae1fd71eed670d1c28bf940ea99b4bfa2335Benjamin Peterson BM_compatible = True 16a81eae1fd71eed670d1c28bf940ea99b4bfa2335Benjamin Peterson order = "pre" 175e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 185e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis PATTERN = """ 195e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis power< 'intern' 205e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis trailer< lpar='(' 215e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis ( not(arglist | argument<any '=' any>) obj=any 225e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis | obj=arglist<(not argument<any '=' any>) any ','> ) 235e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis rpar=')' > 245e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis after=any* 255e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis > 265e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis """ 275e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 285e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis def transform(self, node, results): 2988c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% if results: 3088c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% # I feel like we should be able to express this logic in the 3188c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% # PATTERN above but I don't know how to do it so... 3288c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% obj = results['obj'] 3388c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% if obj: 3488c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% if obj.type == self.syms.star_expr: 3588c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% return # Make no change. 3688c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% if (obj.type == self.syms.argument and 3788c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% obj.children[0].value == '**'): 3888c00132ccdced2645e78e0059eab93590adecbdGregory P. Smith ext:(% return # Make no change. 395e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis syms = self.syms 405e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis obj = results["obj"].clone() 415e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis if obj.type == syms.arglist: 425e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis newarglist = obj.clone() 435e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis else: 445e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis newarglist = pytree.Node(syms.arglist, [obj.clone()]) 455e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis after = results["after"] 465e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis if after: 475e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis after = [n.clone() for n in after] 485e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis new = pytree.Node(syms.power, 4984ad84e0bb15e7c64109e88060afdcb60ae7b740Benjamin Peterson Attr(Name(u"sys"), Name(u"intern")) + 505e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis [pytree.Node(syms.trailer, 515e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis [results["lpar"].clone(), 525e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis newarglist, 535e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis results["rpar"].clone()])] + after) 546118040b7aee905bcddcb949c6815dc19ca23070Benjamin Peterson new.prefix = node.prefix 5584ad84e0bb15e7c64109e88060afdcb60ae7b740Benjamin Peterson touch_import(None, u'sys', node) 565e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis return new 57