17db96d56Sopenharmony_ci# Copyright 2006 Georg Brandl. 27db96d56Sopenharmony_ci# Licensed to PSF under a Contributor Agreement. 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci"""Fixer for intern(). 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ciintern(s) -> sys.intern(s)""" 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci# Local imports 97db96d56Sopenharmony_cifrom .. import fixer_base 107db96d56Sopenharmony_cifrom ..fixer_util import ImportAndCall, touch_import 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ciclass FixIntern(fixer_base.BaseFix): 147db96d56Sopenharmony_ci BM_compatible = True 157db96d56Sopenharmony_ci order = "pre" 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ci PATTERN = """ 187db96d56Sopenharmony_ci power< 'intern' 197db96d56Sopenharmony_ci trailer< lpar='(' 207db96d56Sopenharmony_ci ( not(arglist | argument<any '=' any>) obj=any 217db96d56Sopenharmony_ci | obj=arglist<(not argument<any '=' any>) any ','> ) 227db96d56Sopenharmony_ci rpar=')' > 237db96d56Sopenharmony_ci after=any* 247db96d56Sopenharmony_ci > 257db96d56Sopenharmony_ci """ 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci def transform(self, node, results): 287db96d56Sopenharmony_ci if results: 297db96d56Sopenharmony_ci # I feel like we should be able to express this logic in the 307db96d56Sopenharmony_ci # PATTERN above but I don't know how to do it so... 317db96d56Sopenharmony_ci obj = results['obj'] 327db96d56Sopenharmony_ci if obj: 337db96d56Sopenharmony_ci if (obj.type == self.syms.argument and 347db96d56Sopenharmony_ci obj.children[0].value in {'**', '*'}): 357db96d56Sopenharmony_ci return # Make no change. 367db96d56Sopenharmony_ci names = ('sys', 'intern') 377db96d56Sopenharmony_ci new = ImportAndCall(node, results, names) 387db96d56Sopenharmony_ci touch_import(None, 'sys', node) 397db96d56Sopenharmony_ci return new 40