(root)/
Python-3.12.0/
Lib/
lib2to3/
fixes/
fix_exec.py
       1  # Copyright 2006 Google, Inc. All Rights Reserved.
       2  # Licensed to PSF under a Contributor Agreement.
       3  
       4  """Fixer for exec.
       5  
       6  This converts usages of the exec statement into calls to a built-in
       7  exec() function.
       8  
       9  exec code in ns1, ns2 -> exec(code, ns1, ns2)
      10  """
      11  
      12  # Local imports
      13  from .. import fixer_base
      14  from ..fixer_util import Comma, Name, Call
      15  
      16  
      17  class ESC[4;38;5;81mFixExec(ESC[4;38;5;149mfixer_baseESC[4;38;5;149m.ESC[4;38;5;149mBaseFix):
      18      BM_compatible = True
      19  
      20      PATTERN = """
      21      exec_stmt< 'exec' a=any 'in' b=any [',' c=any] >
      22      |
      23      exec_stmt< 'exec' (not atom<'(' [any] ')'>) a=any >
      24      """
      25  
      26      def transform(self, node, results):
      27          assert results
      28          syms = self.syms
      29          a = results["a"]
      30          b = results.get("b")
      31          c = results.get("c")
      32          args = [a.clone()]
      33          args[0].prefix = ""
      34          if b is not None:
      35              args.extend([Comma(), b.clone()])
      36          if c is not None:
      37              args.extend([Comma(), c.clone()])
      38  
      39          return Call(Name("exec"), args, prefix=node.prefix)