/usr/lib64/python2.7/compiler
NameSizeModeActions
ast.py375080644editdlrm
ast.pyc721250644editdlrm
ast.pyo721250644editdlrm
consts.py4680644editdlrm
consts.pyc7370644editdlrm
consts.pyo7370644editdlrm
future.py18930644editdlrm
future.pyc29560644editdlrm
future.pyo29560644editdlrm
misc.py17940644editdlrm
misc.pyc37330644editdlrm
misc.pyo37330644editdlrm
pyassem.py242680644editdlrm
pyassem.pyc259510644editdlrm
pyassem.pyo253770644editdlrm
pycodegen.py478090644editdlrm
pycodegen.pyc565150644editdlrm
pycodegen.pyo560710644editdlrm
symbols.py144890644editdlrm
symbols.pyc176770644editdlrm
symbols.pyo176430644editdlrm
syntax.py14440644editdlrm
syntax.pyc18820644editdlrm
syntax.pyo18820644editdlrm
transformer.py531160644editdlrm
transformer.pyc476450644editdlrm
transformer.pyo458300644editdlrm
visitor.py38960644editdlrm
visitor.pyc41870644editdlrm
visitor.pyo41870644editdlrm
__init__.py10230644editdlrm
__init__.pyc12970644editdlrm
__init__.pyo12970644editdlrm
Edit: /usr/lib64/python2.7/compiler/future.py (1893B)
"""Parser for future statements """ from compiler import ast, walk def is_future(stmt): """Return true if statement is a well-formed future statement""" if not isinstance(stmt, ast.From): return 0 if stmt.modname == "__future__": return 1 else: return 0 class FutureParser: features = ("nested_scopes", "generators", "division", "absolute_import", "with_statement", "print_function", "unicode_literals") def __init__(self): self.found = {} # set def visitModule(self, node): stmt = node.node for s in stmt.nodes: if not self.check_stmt(s): break def check_stmt(self, stmt): if is_future(stmt): for name, asname in stmt.names: if name in self.features: self.found[name] = 1 else: raise SyntaxError, \ "future feature %s is not defined" % name stmt.valid_future = 1 return 1 return 0 def get_features(self): """Return list of features enabled by future statements""" return self.found.keys() class BadFutureParser: """Check for invalid future statements""" def visitFrom(self, node): if hasattr(node, 'valid_future'): return if node.modname != "__future__": return raise SyntaxError, "invalid future statement " + repr(node) def find_futures(node): p1 = FutureParser() p2 = BadFutureParser() walk(node, p1) walk(node, p2) return p1.get_features() if __name__ == "__main__": import sys from compiler import parseFile, walk for file in sys.argv[1:]: print file tree = parseFile(file) v = FutureParser() walk(tree, v) print v.found print