|
1 # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 |
|
2 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt |
|
3 |
|
4 """Bytecode manipulation for coverage.py""" |
|
5 |
|
6 import types |
|
7 |
|
8 |
|
9 def code_objects(code): |
|
10 """Iterate over all the code objects in `code`.""" |
|
11 stack = [code] |
|
12 while stack: |
|
13 # We're going to return the code object on the stack, but first |
|
14 # push its children for later returning. |
|
15 code = stack.pop() |
|
16 for c in code.co_consts: |
|
17 if isinstance(c, types.CodeType): |
|
18 stack.append(c) |
|
19 yield code |