
Author: brett.cannon Date: Thu Mar 1 00:31:14 2007 New Revision: 54046 Modified: python/branches/p3yk_no_args_on_exc/BROKEN python/branches/p3yk_no_args_on_exc/Lib/socket.py python/branches/p3yk_no_args_on_exc/Misc/NEWS python/branches/p3yk_no_args_on_exc/Modules/_ssl.c python/branches/p3yk_no_args_on_exc/Modules/socketmodule.c python/branches/p3yk_no_args_on_exc/Python/errors.c Log: Fix the BaseException.args removal. Required wrapping tuple arguments to PyErr_SetObject() within another tuple, else PyErr_Fetch() passes the tuple directly to the exception's init function which raising an exception itself since only one argument is allowed. Also had to tweak PyErr_SetFromErrno() to do the same thing. Modified: python/branches/p3yk_no_args_on_exc/BROKEN ============================================================================== --- python/branches/p3yk_no_args_on_exc/BROKEN (original) +++ python/branches/p3yk_no_args_on_exc/BROKEN Thu Mar 1 00:31:14 2007 @@ -1,10 +1,9 @@ -* Construction of exception at C level passing too many arguments? +* socket.error is passed two arguments but just subclasses PyExc_Exception, and + thus constructor gets passed two arguments (thanks to + PyErr_NormalizeException() passing any tuple given to it as a value as the + args tuple, but not when it is any other type of value). + test_bsddb - + test_socket - + test_socket_ssl - + test_timeout - + test_urllib2net - + test_urllibnet + + test_bsddb3 (?) * doctest oddness (need to change how SyntaxError is handled?) + test_xml_etree Modified: python/branches/p3yk_no_args_on_exc/Lib/socket.py ============================================================================== --- python/branches/p3yk_no_args_on_exc/Lib/socket.py (original) +++ python/branches/p3yk_no_args_on_exc/Lib/socket.py Thu Mar 1 00:31:14 2007 @@ -138,7 +138,7 @@ class _closedsocket(object): __slots__ = [] def _dummy(*args): - raise error(EBADF, 'Bad file descriptor') + raise error((EBADF, 'Bad file descriptor')) def close(self): pass # All _delegate_methods must also be initialized here. Modified: python/branches/p3yk_no_args_on_exc/Misc/NEWS ============================================================================== --- python/branches/p3yk_no_args_on_exc/Misc/NEWS (original) +++ python/branches/p3yk_no_args_on_exc/Misc/NEWS Thu Mar 1 00:31:14 2007 @@ -28,6 +28,9 @@ Core and Builtins ----------------- +- PyErr_SetFromErrno() now wraps its value argument in another tuple before + passing it to the exception type's init function. + - SyntaxError now enforces the requirement of having two arguments, second of which is a four-item tuple. Modified: python/branches/p3yk_no_args_on_exc/Modules/_ssl.c ============================================================================== --- python/branches/p3yk_no_args_on_exc/Modules/_ssl.c (original) +++ python/branches/p3yk_no_args_on_exc/Modules/_ssl.c Thu Mar 1 00:31:14 2007 @@ -161,19 +161,18 @@ n = PyInt_FromLong((long) p); if (n == NULL) return NULL; - v = PyTuple_New(2); - if (v == NULL) { - Py_DECREF(n); - return NULL; - } s = PyString_FromString(errstr); if (s == NULL) { - Py_DECREF(v); Py_DECREF(n); } - PyTuple_SET_ITEM(v, 0, n); - PyTuple_SET_ITEM(v, 1, s); + v = Py_BuildValue("((O, O))", n, s); + if (v == NULL) { + Py_DECREF(n); + Py_DECREF(s); + return NULL; + } + PyErr_SetObject(PySSLErrorObject, v); Py_DECREF(v); return NULL; Modified: python/branches/p3yk_no_args_on_exc/Modules/socketmodule.c ============================================================================== --- python/branches/p3yk_no_args_on_exc/Modules/socketmodule.c (original) +++ python/branches/p3yk_no_args_on_exc/Modules/socketmodule.c Thu Mar 1 00:31:14 2007 @@ -531,7 +531,7 @@ } } - v = Py_BuildValue("(is)", err_no, msg); + v = Py_BuildValue("((is))", err_no, msg); if (v != NULL) { PyErr_SetObject(socket_error, v); Py_DECREF(v); @@ -567,7 +567,7 @@ *lastc-- = '\0'; } } - v = Py_BuildValue("(is)", myerrorcode, outbuf); + v = Py_BuildValue("((is))", myerrorcode, outbuf); if (v != NULL) { PyErr_SetObject(socket_error, v); Py_DECREF(v); @@ -580,7 +580,7 @@ #if defined(RISCOS) if (_inet_error.errnum != NULL) { PyObject *v; - v = Py_BuildValue("(is)", errno, _inet_err()); + v = Py_BuildValue("((is))", errno, _inet_err()); if (v != NULL) { PyErr_SetObject(socket_error, v); Py_DECREF(v); @@ -599,9 +599,9 @@ PyObject *v; #ifdef HAVE_HSTRERROR - v = Py_BuildValue("(is)", h_error, (char *)hstrerror(h_error)); + v = Py_BuildValue("((is))", h_error, (char *)hstrerror(h_error)); #else - v = Py_BuildValue("(is)", h_error, "host not found"); + v = Py_BuildValue("((is))", h_error, "host not found"); #endif if (v != NULL) { PyErr_SetObject(socket_herror, v); @@ -624,9 +624,9 @@ #endif #ifdef HAVE_GAI_STRERROR - v = Py_BuildValue("(is)", error, gai_strerror(error)); + v = Py_BuildValue("((is))", error, gai_strerror(error)); #else - v = Py_BuildValue("(is)", error, "getaddrinfo failed"); + v = Py_BuildValue("((is))", error, "getaddrinfo failed"); #endif if (v != NULL) { PyErr_SetObject(socket_gaierror, v); Modified: python/branches/p3yk_no_args_on_exc/Python/errors.c ============================================================================== --- python/branches/p3yk_no_args_on_exc/Python/errors.c (original) +++ python/branches/p3yk_no_args_on_exc/Python/errors.c Thu Mar 1 00:31:14 2007 @@ -335,9 +335,9 @@ #endif /* Unix/Windows */ #endif /* PLAN 9*/ if (filenameObject != NULL) - v = Py_BuildValue("(isO)", i, s, filenameObject); + v = Py_BuildValue("((isO))", i, s, filenameObject); else - v = Py_BuildValue("(is)", i, s); + v = Py_BuildValue("((is))", i, s); if (v != NULL) { PyErr_SetObject(exc, v); Py_DECREF(v); @@ -415,9 +415,9 @@ s[--len] = '\0'; } if (filenameObject != NULL) - v = Py_BuildValue("(isO)", err, s, filenameObject); + v = Py_BuildValue("((isO))", err, s, filenameObject); else - v = Py_BuildValue("(is)", err, s); + v = Py_BuildValue("((is))", err, s); if (v != NULL) { PyErr_SetObject(exc, v); Py_DECREF(v);