give code objects a filename in the replacement execfile
--HG-- branch : trunk
This commit is contained in:
parent
c7f11745cd
commit
499a982860
|
@ -152,6 +152,7 @@ initpkg(__name__,
|
||||||
'builtin._isbytes' : ('./builtin/builtin31.py', '_isbytes'),
|
'builtin._isbytes' : ('./builtin/builtin31.py', '_isbytes'),
|
||||||
'builtin._istext' : ('./builtin/builtin31.py', '_istext'),
|
'builtin._istext' : ('./builtin/builtin31.py', '_istext'),
|
||||||
'builtin._getimself' : ('./builtin/builtin31.py', '_getimself'),
|
'builtin._getimself' : ('./builtin/builtin31.py', '_getimself'),
|
||||||
|
'builtin._getcode' : ('./builtin/builtin31.py', '_getcode'),
|
||||||
'builtin.builtins' : ('./builtin/builtin31.py', 'builtins'),
|
'builtin.builtins' : ('./builtin/builtin31.py', 'builtins'),
|
||||||
'builtin.execfile' : ('./builtin/builtin31.py', 'execfile'),
|
'builtin.execfile' : ('./builtin/builtin31.py', 'execfile'),
|
||||||
'builtin.callable' : ('./builtin/builtin31.py', 'callable'),
|
'builtin.callable' : ('./builtin/builtin31.py', 'callable'),
|
||||||
|
|
|
@ -22,6 +22,9 @@ if sys.version_info >= (3, 0):
|
||||||
def _getimself(function):
|
def _getimself(function):
|
||||||
return getattr(function, '__self__', None)
|
return getattr(function, '__self__', None)
|
||||||
|
|
||||||
|
def _getcode(function):
|
||||||
|
return function.__code__
|
||||||
|
|
||||||
def execfile(fn, globs=None, locs=None):
|
def execfile(fn, globs=None, locs=None):
|
||||||
if globs is None:
|
if globs is None:
|
||||||
back = sys._getframe(1)
|
back = sys._getframe(1)
|
||||||
|
@ -35,7 +38,8 @@ if sys.version_info >= (3, 0):
|
||||||
source = fp.read()
|
source = fp.read()
|
||||||
finally:
|
finally:
|
||||||
fp.close()
|
fp.close()
|
||||||
exec_(source, globs, locs)
|
co = compile(source, fn, "exec", dont_inherit=True)
|
||||||
|
exec_(co, globs, locs)
|
||||||
|
|
||||||
def callable(obj):
|
def callable(obj):
|
||||||
return hasattr(obj, "__call__")
|
return hasattr(obj, "__call__")
|
||||||
|
@ -57,6 +61,9 @@ else:
|
||||||
def _getimself(function):
|
def _getimself(function):
|
||||||
return getattr(function, 'im_self', None)
|
return getattr(function, 'im_self', None)
|
||||||
|
|
||||||
|
def _getcode(function):
|
||||||
|
return function.func_code
|
||||||
|
|
||||||
import __builtin__ as builtins
|
import __builtin__ as builtins
|
||||||
def print_(*args, **kwargs):
|
def print_(*args, **kwargs):
|
||||||
""" minimal backport of py3k print statement. """
|
""" minimal backport of py3k print statement. """
|
||||||
|
|
|
@ -94,10 +94,11 @@ def test_print_simple():
|
||||||
|
|
||||||
def test_execfile(tmpdir):
|
def test_execfile(tmpdir):
|
||||||
test_file = tmpdir.join("test.py")
|
test_file = tmpdir.join("test.py")
|
||||||
test_file.write("x = y")
|
test_file.write("x = y\ndef f(): pass")
|
||||||
ns = {"y" : 42}
|
ns = {"y" : 42}
|
||||||
py.builtin.execfile(str(test_file), ns)
|
py.builtin.execfile(str(test_file), ns)
|
||||||
assert ns["x"] == 42
|
assert ns["x"] == 42
|
||||||
|
assert py.builtin._getcode(ns["f"]).co_filename == str(test_file)
|
||||||
class A:
|
class A:
|
||||||
y = 3
|
y = 3
|
||||||
x = 4
|
x = 4
|
||||||
|
|
Loading…
Reference in New Issue