home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 July / maximum-cd-2011-07.iso / DiscContents / LibO_3.3.2_Win_x86_install_multi.exe / libreoffice1.cab / fix_exec.py < prev    next >
Encoding:
Python Source  |  2011-03-15  |  985 b   |  40 lines

  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 pytree
  14. from .. import fixer_base
  15. from ..fixer_util import Comma, Name, Call
  16.  
  17.  
  18. class FixExec(fixer_base.BaseFix):
  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].set_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.get_prefix())
  40.