[pypy-svn] r47811 - in pypy/dist/pypy/module/__builtin__: . test
fijal at codespeak.net
fijal at codespeak.net
Wed Oct 24 12:18:25 CEST 2007
Author: fijal
Date: Wed Oct 24 12:18:24 2007
New Revision: 47811
Modified:
pypy/dist/pypy/module/__builtin__/importing.py
pypy/dist/pypy/module/__builtin__/test/test_import.py
Log:
Slight refactoring to allow re-use of internal functions by zipimport
Modified: pypy/dist/pypy/module/__builtin__/importing.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/importing.py (original)
+++ pypy/dist/pypy/module/__builtin__/importing.py Wed Oct 24 12:18:24 2007
@@ -69,6 +69,14 @@
else:
return NOFILE
+def _prepare_module(space, w_mod, filename, pkgdir):
+ w = space.wrap
+ space.sys.setmodule(w_mod)
+ space.setattr(w_mod, w('__file__'), space.wrap(filename))
+ space.setattr(w_mod, w('__doc__'), space.w_None)
+ if pkgdir is not None:
+ space.setattr(w_mod, w('__path__'), space.newlist([w(pkgdir)]))
+
def try_import_mod(space, w_modulename, filepart, w_parent, w_name, pkgdir=None):
# decide what type we want (pyc/py)
@@ -89,18 +97,16 @@
filename = filepart + ".pyc"
stream = streamio.open_file_as_stream(filename, "rb")
- space.sys.setmodule(w_mod)
- space.setattr(w_mod, w('__file__'), space.wrap(filename))
- space.setattr(w_mod, w('__doc__'), space.w_None)
- if pkgdir is not None:
- space.setattr(w_mod, w('__path__'), space.newlist([w(pkgdir)]))
-
+ _prepare_module(space, w_mod, filename, pkgdir)
try:
try:
if modtype == PYFILE:
- load_source_module(space, w_modulename, w_mod, filename, stream)
+ load_source_module(space, w_modulename, w_mod, filename, stream.readall())
else:
- load_compiled_module(space, w_modulename, w_mod, filename, stream)
+ magic = _r_long(stream)
+ timestamp = _r_long(stream)
+ load_compiled_module(space, w_modulename, w_mod, filename,
+ magic, timestamp, stream.readall())
finally:
stream.close()
@@ -423,10 +429,9 @@
return result
-def parse_source_module(space, pathname, stream):
+def parse_source_module(space, pathname, source):
""" Parse a source file and return the corresponding code object """
w = space.wrap
- source = stream.readall()
w_source = w(source)
w_mode = w("exec")
w_pathname = w(pathname)
@@ -434,13 +439,14 @@
pycode = space.interp_w(Code, w_code)
return pycode
-def load_source_module(space, w_modulename, w_mod, pathname, stream):
+def load_source_module(space, w_modulename, w_mod, pathname, source,
+ write_pyc=True):
"""
Load a source module from a given file and return its module
object.
"""
w = space.wrap
- pycode = parse_source_module(space, pathname, stream)
+ pycode = parse_source_module(space, pathname, source)
w_dict = space.getattr(w_mod, w('__dict__'))
space.call_method(w_dict, 'setdefault',
@@ -448,7 +454,7 @@
w(space.builtin))
pycode.exec_code(space, w_dict, w_dict)
- if space.config.objspace.usepycfiles:
+ if space.config.objspace.usepycfiles and write_pyc:
mtime = os.stat(pathname)[stat.ST_MTIME]
cpathname = pathname + 'c'
write_compiled_module(space, pycode, cpathname, mtime)
@@ -508,11 +514,10 @@
stream.close()
return 1
-def read_compiled_module(space, cpathname, stream):
+def read_compiled_module(space, cpathname, strbuf):
""" Read a code object from a file and check it for validity """
w_marshal = space.getbuiltinmodule('marshal')
- strbuf = stream.readall()
w_code = space.call_method(w_marshal, 'loads', space.wrap(strbuf))
pycode = space.interpclass_w(w_code)
if pycode is None or not isinstance(pycode, Code):
@@ -520,19 +525,18 @@
"Non-code object in %s" % cpathname))
return pycode
-def load_compiled_module(space, w_modulename, w_mod, cpathname, stream):
+def load_compiled_module(space, w_modulename, w_mod, cpathname, magic,
+ timestamp, source):
"""
Load a module from a compiled file, execute it, and return its
module object.
"""
w = space.wrap
- magic = _r_long(stream)
if magic != get_pyc_magic(space):
raise OperationError(space.w_ImportError, w(
"Bad magic number in %s" % cpathname))
- _r_long(stream) # skip time stamp
#print "loading pyc file:", cpathname
- code_w = read_compiled_module(space, cpathname, stream)
+ code_w = read_compiled_module(space, cpathname, source)
#if (Py_VerboseFlag)
# PySys_WriteStderr("import %s # precompiled from %s\n",
# name, cpathname);
Modified: pypy/dist/pypy/module/__builtin__/test/test_import.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/test/test_import.py (original)
+++ pypy/dist/pypy/module/__builtin__/test/test_import.py Wed Oct 24 12:18:24 2007
@@ -71,7 +71,7 @@
w_modname,
w(importing.Module(space, w_modname)),
filename,
- stream)
+ stream.readall())
finally:
stream.close()
@@ -328,7 +328,7 @@
try:
stream.seek(8, 0)
w_code = importing.read_compiled_module(
- space, cpathname, stream)
+ space, cpathname, stream.readall())
pycode = space.interpclass_w(w_code)
finally:
stream.close()
@@ -349,11 +349,15 @@
stream = streamio.open_file_as_stream(cpathname, "r")
try:
w_mod = space.wrap(Module(space, w_modulename))
+ magic = importing._r_long(stream)
+ timestamp = importing._r_long(stream)
w_ret = importing.load_compiled_module(space,
w_modulename,
w_mod,
cpathname,
- stream)
+ magic,
+ timestamp,
+ stream.readall())
finally:
stream.close()
assert w_mod is w_ret
@@ -368,7 +372,7 @@
try:
w_ret = importing.parse_source_module(space,
pathname,
- stream)
+ stream.readall())
finally:
stream.close()
pycode = space.interpclass_w(w_ret)
@@ -410,7 +414,7 @@
w_modulename,
w_mod,
pathname,
- stream)
+ stream.readall())
finally:
stream.close()
assert w_mod is w_ret
@@ -427,7 +431,7 @@
try:
w_ret = importing.parse_source_module(space,
pathname,
- stream)
+ stream.readall())
finally:
stream.close()
pycode = space.interpclass_w(w_ret)
@@ -452,7 +456,8 @@
stream = streamio.open_file_as_stream(cpathname, "r")
try:
stream.seek(8, 0)
- w_code = importing.read_compiled_module(space, cpathname, stream)
+ w_code = importing.read_compiled_module(space, cpathname,
+ stream.readall())
pycode = space.interpclass_w(w_code)
finally:
stream.close()
@@ -485,13 +490,17 @@
stream = streamio.open_file_as_stream(cpathname, "r")
try:
w_mod = space2.wrap(Module(space2, w_modulename))
+ magic = importing._r_long(stream)
+ timestamp = importing._r_long(stream)
space2.raises_w(space2.w_ImportError,
importing.load_compiled_module,
space2,
w_modulename,
w_mod,
cpathname,
- stream)
+ magic,
+ timestamp,
+ stream.readall())
finally:
stream.close()
More information about the Pypy-commit
mailing list