diff --git a/py/__init__.py b/py/__init__.py index 57abc8f27..363ca6f27 100644 --- a/py/__init__.py +++ b/py/__init__.py @@ -125,6 +125,7 @@ py.apipkg.initpkg(__name__, dict( '_istext' : '._builtin:_istext', '_getimself' : '._builtin:_getimself', '_getfuncdict' : '._builtin:_getfuncdict', + '_getcode' : '._builtin:_getcode', 'builtins' : '._builtin:builtins', 'execfile' : '._builtin:execfile', 'callable' : '._builtin:callable', diff --git a/py/_builtin.py b/py/_builtin.py index b416cf3dd..3508c9bb9 100644 --- a/py/_builtin.py +++ b/py/_builtin.py @@ -111,6 +111,9 @@ if sys.version_info >= (3, 0): def _getfuncdict(function): return getattr(function, "__dict__", None) + def _getcode(function): + return getattr(function, "__code__", None) + def execfile(fn, globs=None, locs=None): if globs is None: back = sys._getframe(1) @@ -147,6 +150,9 @@ else: def _getfuncdict(function): return getattr(function, "__dict__", None) + def _getcode(function): + return getattr(function, "func_code", None) + def print_(*args, **kwargs): """ minimal backport of py3k print statement. """ sep = ' ' diff --git a/testing/root/test_builtin.py b/testing/root/test_builtin.py index cbf8d8e08..76e0b2839 100644 --- a/testing/root/test_builtin.py +++ b/testing/root/test_builtin.py @@ -1,4 +1,5 @@ import sys +import types import py from py.builtin import set, frozenset, reversed, sorted @@ -146,3 +147,8 @@ def test_tryimport(): assert x == py x = py.builtin._tryimport('asldkajsdl', 'py.path') assert x == py.path + +def test_getcode(): + code = py.builtin._getcode(test_getcode) + assert isinstance(code, types.CodeType) + assert py.builtin._getcode(4) is None