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