[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