[pypy-svn] r72955 - in pypy/trunk/pypy: interpreter module/mmap module/posix

fijal at codespeak.net fijal at codespeak.net
Sat Mar 27 16:42:16 CET 2010


Author: fijal
Date: Sat Mar 27 16:42:15 2010
New Revision: 72955

Modified:
   pypy/trunk/pypy/interpreter/error.py
   pypy/trunk/pypy/module/mmap/interp_mmap.py
   pypy/trunk/pypy/module/posix/interp_posix.py
Log:
Simplify a bit error handling. Leverage the fact that OSError can accept
filename as 3rd arg


Modified: pypy/trunk/pypy/interpreter/error.py
==============================================================================
--- pypy/trunk/pypy/interpreter/error.py	(original)
+++ pypy/trunk/pypy/interpreter/error.py	Sat Mar 27 16:42:15 2010
@@ -358,8 +358,8 @@
                                       space.wrap(msg))
         return OperationError(exc, w_error)
 
-def wrap_oserror(space, e, exception_name='w_OSError'): 
-    assert isinstance(e, OSError) 
+def wrap_oserror(space, e, filename=None, exception_name='w_OSError'): 
+    assert isinstance(e, OSError)
 
     if _WINDOWS and isinstance(e, WindowsError):
         return wrap_windowserror(space, e)
@@ -370,15 +370,10 @@
     except ValueError:
         msg = 'error %d' % errno
     exc = getattr(space, exception_name)
-    w_error = space.call_function(exc,
-                                  space.wrap(errno),
-                                  space.wrap(msg))
+    if filename is not None:
+        w_error = space.call_function(exc, space.wrap(errno),
+                                      space.wrap(msg), space.wrap(filename))
+    else:
+        w_error = space.call_function(exc, space.wrap(errno), space.wrap(msg))
     return OperationError(exc, w_error)
-wrap_oserror._annspecialcase_ = 'specialize:arg(2)'
-
-def wrap_oserror_filename(space, e, filename, exception_name='w_OSError'):
-    operr = wrap_oserror(space, e, exception_name)
-    space.setattr(operr.get_w_value(space), space.wrap('filename'),
-                                            space.wrap(filename))
-    return operr
-wrap_oserror_filename._annspecialcase_ = 'specialize:arg(3)'
+wrap_oserror._annspecialcase_ = 'specialize:arg(3)'

Modified: pypy/trunk/pypy/module/mmap/interp_mmap.py
==============================================================================
--- pypy/trunk/pypy/module/mmap/interp_mmap.py	(original)
+++ pypy/trunk/pypy/module/mmap/interp_mmap.py	Sat Mar 27 16:42:15 2010
@@ -57,7 +57,8 @@
         try:
             return self.space.wrap(self.mmap.file_size())
         except OSError, e:
-            raise wrap_oserror(self.space, e, 'w_EnvironmentError')
+            raise wrap_oserror(self.space, e,
+                               exception_name='w_EnvironmentError')
     descr_size.unwrap_spec = ['self']
     
     def write(self, data):
@@ -87,7 +88,8 @@
             raise OperationError(self.space.w_ValueError,
                                  self.space.wrap(v.message))
         except OSError, e:
-            raise wrap_oserror(self.space, e, 'w_EnvironmentError')
+            raise wrap_oserror(self.space, e,
+                               exception_name='w_EnvironmentError')
     flush.unwrap_spec = ['self', int, int]
     
     def move(self, dest, src, count):
@@ -104,7 +106,8 @@
         try:
             self.mmap.resize(newsize)
         except OSError, e:
-            raise wrap_oserror(self.space, e, 'w_EnvironmentError')
+            raise wrap_oserror(self.space, e,
+                               exception_name='w_EnvironmentError')
     resize.unwrap_spec = ['self', int]
     
     def __len__(self):
@@ -224,7 +227,7 @@
             return space.wrap(W_MMap(space, rmmap.mmap(fileno, length,
                                                        flags, prot, access)))
         except OSError, e:
-            raise wrap_oserror(space, e, 'w_EnvironmentError')
+            raise wrap_oserror(space, e, exception_name='w_EnvironmentError')
         except RValueError, e:
             raise OperationError(space.w_ValueError, space.wrap(e.message))
         except RTypeError, e:
@@ -238,7 +241,7 @@
             return space.wrap(W_MMap(space, rmmap.mmap(fileno, length,
                                                        tagname, access)))
         except OSError, e:
-            raise wrap_oserror(space, e, 'w_EnvironmentError')
+            raise wrap_oserror(space, e, exception_name='w_EnvironmentError')
         except RValueError, e:
             raise OperationError(space.w_ValueError, space.wrap(e.message))
         except RTypeError, e:

Modified: pypy/trunk/pypy/module/posix/interp_posix.py
==============================================================================
--- pypy/trunk/pypy/module/posix/interp_posix.py	(original)
+++ pypy/trunk/pypy/module/posix/interp_posix.py	Sat Mar 27 16:42:15 2010
@@ -3,7 +3,6 @@
 from pypy.rlib.rarithmetic import r_longlong
 from pypy.rlib.unroll import unrolling_iterable
 from pypy.interpreter.error import OperationError, wrap_oserror
-from pypy.interpreter.error import wrap_oserror_filename
 from pypy.rpython.module.ll_os import RegisterOs
 from pypy.rpython.module import ll_os_stat
 from pypy.rpython.lltypesystem import rffi, lltype
@@ -19,7 +18,7 @@
     try: 
         fd = os.open(fname, flag, mode)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, fname)
+        raise wrap_oserror(space, e, fname)
     return space.wrap(fd)
 open.unwrap_spec = [ObjSpace, str, "c_int", "c_int"]
 
@@ -178,7 +177,7 @@
     try:
         st = os.stat(path)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     else: 
         return build_stat_result(space, st)
 stat.unwrap_spec = [ObjSpace, str]
@@ -188,7 +187,7 @@
     try:
         st = os.lstat(path)
     except OSError, e:
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     else:
         return build_stat_result(space, st)
 lstat.unwrap_spec = [ObjSpace, str]
@@ -245,7 +244,7 @@
     try:
         ok = os.access(path, mode)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     else:
         return space.wrap(ok)
 access.unwrap_spec = [ObjSpace, str, "c_int"]
@@ -284,7 +283,7 @@
     try:
         os.unlink(path)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
 unlink.unwrap_spec = [ObjSpace, str]
 
 def remove(space, path):
@@ -292,7 +291,7 @@
     try:
         os.unlink(path)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
 remove.unwrap_spec = [ObjSpace, str]
 
 def _getfullpathname(space, path):
@@ -301,7 +300,7 @@
     try:
         fullpath = posix._getfullpathname(path)
     except OSError, e:
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     else: 
         return space.wrap(fullpath)
 _getfullpathname.unwrap_spec = [ObjSpace, str]
@@ -327,7 +326,7 @@
     try:
         os.chdir(path)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
 chdir.unwrap_spec = [ObjSpace, str]
 
 def mkdir(space, path, mode=0777):
@@ -335,7 +334,7 @@
     try:
         os.mkdir(path, mode)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
 mkdir.unwrap_spec = [ObjSpace, str, "c_int"]
 
 def rmdir(space, path):
@@ -343,7 +342,7 @@
     try:
         os.rmdir(path)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
 rmdir.unwrap_spec = [ObjSpace, str]
 
 def strerror(space, errno):
@@ -421,7 +420,7 @@
     try:
         result = os.listdir(dirname)
     except OSError, e:
-        raise wrap_oserror_filename(space, e, dirname)
+        raise wrap_oserror(space, e, dirname)
     result_w = [space.wrap(s) for s in result]
     return space.newlist(result_w)
 listdir.unwrap_spec = [ObjSpace, str]
@@ -440,7 +439,7 @@
     try: 
         os.chmod(path, mode)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
 chmod.unwrap_spec = [ObjSpace, str, "c_int"]
 
 def rename(space, old, new):
@@ -502,7 +501,7 @@
     try:
         result = os.readlink(path)
     except OSError, e: 
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     return space.wrap(result)
 readlink.unwrap_spec = [ObjSpace, str]
 
@@ -589,7 +588,7 @@
             os.utime(path, None)
             return
         except OSError, e:
-            raise wrap_oserror_filename(space, e, path)
+            raise wrap_oserror(space, e, path)
     try:
         msg = "utime() arg 2 must be a tuple (atime, mtime) or None"
         args_w = space.fixedview(w_tuple)
@@ -599,7 +598,7 @@
         modtime = space.float_w(args_w[1])
         os.utime(path, (actime, modtime))
     except OSError, e:
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     except OperationError, e:
         if not e.match(space, space.w_TypeError):
             raise
@@ -695,7 +694,7 @@
     try:
         os.chroot(path)
     except OSError, e:
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     return space.w_None
 chroot.unwrap_spec = [ObjSpace, str]
 
@@ -864,7 +863,7 @@
     try:
         os.chown(path, uid, gid)
     except OSError, e:
-        raise wrap_oserror_filename(space, e, path)
+        raise wrap_oserror(space, e, path)
     return space.w_None
 chown.unwrap_spec = [ObjSpace, str, "c_nonnegint", "c_nonnegint"]
 



More information about the Pypy-commit mailing list