Speed up directives by skipping debug info in stack traversal.

- `caller_locals()` doesn't need debug info, only frame locals.
- `get_calling_module()` doesn't either.

- Changed calls to `inspect.stack()` -> `inspect.stack(0)`
This commit is contained in:
Todd Gamblin 2016-03-26 00:56:19 -07:00
parent 42ec822379
commit b0b882cbb3

View File

@ -117,7 +117,8 @@ def caller_locals():
scope. Yes, this is some black magic, and yes it's useful
for implementing things like depends_on and provides.
"""
stack = inspect.stack()
# Passing zero here skips line context for speed.
stack = inspect.stack(0)
try:
return stack[2][0].f_locals
finally:
@ -128,7 +129,8 @@ def get_calling_module_name():
"""Make sure that the caller is a class definition, and return the
enclosing module's name.
"""
stack = inspect.stack()
# Passing zero here skips line context for speed.
stack = inspect.stack(0)
try:
# Make sure locals contain __module__
caller_locals = stack[2][0].f_locals