%PDF- %PDF-
Direktori : /lib/python3/dist-packages/pythran/transformations/ |
Current File : //lib/python3/dist-packages/pythran/transformations/expand_builtins.py |
""" ExpandBuiltins replaces builtins by their full paths. """ from pythran.analyses import Globals, Locals from pythran.passmanager import Transformation from pythran.syntax import PythranSyntaxError from pythran.tables import MODULES import gast as ast class ExpandBuiltins(Transformation): """ Expands all builtins into full paths. >>> import gast as ast >>> from pythran import passmanager, backend >>> node = ast.parse("def foo(): return list()") >>> pm = passmanager.PassManager("test") >>> _, node = pm.apply(ExpandBuiltins, node) >>> print(pm.dump(backend.Python, node)) def foo(): return builtins.list() """ def __init__(self): Transformation.__init__(self, Locals, Globals) def visit_NameConstant(self, node): self.update = True return ast.Attribute( ast.Name('builtins', ast.Load(), None, None), str(node.value), ast.Load()) def visit_Name(self, node): s = node.id if(isinstance(node.ctx, ast.Load) and s not in self.locals[node] and s not in self.globals and s in MODULES['builtins']): if s == 'getattr': raise PythranSyntaxError("You fool! Trying a getattr?", node) self.update = True return ast.Attribute( ast.Name('builtins', ast.Load(), None, None), s, node.ctx) else: return node