File: module_finder.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
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)