File: module_finder.py

package info (click to toggle)
pypy 5.6.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 97,040 kB
  • ctags: 185,069
  • sloc: python: 1,147,862; ansic: 49,642; cpp: 5,245; asm: 5,169; makefile: 529; sh: 481; xml: 232; lisp: 45
file content (25 lines) | stat: -rw-r--r-- 757 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

import os, sys, marshal, types, struct, imp

def _all_codes_from(code):
    res = {}
    more = [code]
    while more:
        next = more.pop()
        res[(next.co_firstlineno, next.co_name)] = next
        more += [co for co in next.co_consts
                 if isinstance(co, types.CodeType)]
    return res

def gather_all_code_objs(fname):
    """ Gathers all code objects from a give fname and sorts them by
    starting lineno
    """
    fname = str(fname)
    if fname.endswith('.pyc'):
        code = compile(open(fname[:-1]).read(), fname, 'exec')
    elif fname.endswith('.py'):
        code = compile(open(fname).read(), fname, 'exec')
    else:
        raise Exception("Unknown file extension: %s" % fname)
    return _all_codes_from(code)