[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