[pypy-svn] r16503 - in pypy/dist/pypy: lib module/__builtin__

ale at codespeak.net ale at codespeak.net
Thu Aug 25 17:04:56 CEST 2005


Author: ale
Date: Thu Aug 25 17:04:52 2005
New Revision: 16503

Modified:
   pypy/dist/pypy/lib/imp.py
   pypy/dist/pypy/module/__builtin__/importing.py
Log:
(arre, ale)

Changed the logic .pyc imports 

Make sure to remove failed imports from sys.modules

In imp.py added support for .pyc files

Modified: pypy/dist/pypy/lib/imp.py
==============================================================================
--- pypy/dist/pypy/lib/imp.py	(original)
+++ pypy/dist/pypy/lib/imp.py	Thu Aug 25 17:04:52 2005
@@ -43,9 +43,9 @@
         filename = os.path.join(base, name)
         if os.path.isdir(filename):
             return (None, filename, ('', '', PKG_DIRECTORY))
-        filename += '.py'
-        if os.path.exists(filename):
-            return (file(filename, 'U'), filename, ('.py', 'U', PY_SOURCE))
+        for ext, mode, kind in get_suffixes():
+            if os.path.exists(filename+ext):
+                return (file(filename+ext, mode), filename+ext, (ext, mode, kind))
     raise ImportError, 'No module named %s' % (name,)
 
 
@@ -72,11 +72,11 @@
     if type == C_BUILTIN:
         module = __import__(name, {}, {}, None)
         return module
-
+    if type == PY_COMPILED:
+       return  load_compiled(name, filename, file)
     raise ValueError, 'invalid description argument: %r' % (description,)
 
 def load_source(name, pathname, file=None):
-    import sys
     autoopen = file is None
     if autoopen:
         file = open(pathname, 'U')
@@ -84,15 +84,10 @@
     if autoopen:
         file.close()
     co = compile(source, pathname, 'exec')
-    module = sys.modules.setdefault(name, new_module(name))
-    module.__name__ = name
-    module.__doc__ = None
-    module.__file__ = pathname
-    exec co in module.__dict__
-    return module
+    return run_module(name, pathname, co)
 
 def load_compiled(name, pathname, file=None):
-    import sys, marshal
+    import marshal
     autoopen = file is None
     if autoopen:
         file = open(pathname, 'rb')
@@ -103,13 +98,21 @@
     co = marshal.load(file)
     if autoopen:
         file.close()
+    return run_module(name, pathname, co)
+
+def run_module(name, pathname, co):
+    import sys
     module = sys.modules.setdefault(name, new_module(name))
     module.__name__ = name
     module.__doc__ = None
     module.__file__ = pathname
-    exec co in module.__dict__
+    try:
+        exec co in module.__dict__
+    except :
+        sys.module.pop(name,None)
+        raise
     return module
-
+ 
 
 def new_module(name):
     """Create a new module.  Do not enter it in sys.modules.

Modified: pypy/dist/pypy/module/__builtin__/importing.py
==============================================================================
--- pypy/dist/pypy/module/__builtin__/importing.py	(original)
+++ pypy/dist/pypy/module/__builtin__/importing.py	Thu Aug 25 17:04:52 2005
@@ -53,7 +53,7 @@
     if PYC_ONOFF and os.path.exists(pycfile):
         pyc_state = check_compiled_module(space, pyfile, pyfile_ts, pycfile)
         pycfile_exists = pyc_state >= 0
-        pycfile_ts_valid = pyc_state > 0 and pyfile_exist
+        pycfile_ts_valid = pyc_state > 0 or (pyc_state == 0 and not pyfile_exist)
     else:
         pycfile_exists = False
         pycfile_ts_valid = False
@@ -121,13 +121,9 @@
             osfile.close()
             
     except OperationError, e:
-        if e.match(space, space.w_SyntaxError):
-            w_mods = space.sys.get('modules')
-            try:
-                space.delitem(w_mods, w_modulename)
-            except OperationError, kerr:
-                if not kerr.match(space, space.w_KeyError):
-                    raise
+         w_mods = space.sys.get('modules')
+         space.call_method(w_mods,'pop', w_modulename, space.w_None)
+         raise
              
     w_mod = check_sys_modules(space, w_modulename)
     if w_mod is not None and w_parent is not None:



More information about the Pypy-commit mailing list