Three new C API functions:
- int PyErr_GivenExceptionMatches(obj1, obj2)
Returns 1 if obj1 and obj2 are the same object, or if obj1 is an
instance of type obj2, or of a class derived from obj2
- int PyErr_ExceptionMatches(obj)
Higher level wrapper around PyErr_GivenExceptionMatches() which uses
PyErr_Occurred() as obj1. This will be the more commonly called
function.
- void PyErr_NormalizeException(typeptr, valptr, tbptr)
Normalizes exceptions, and places the normalized values in the
arguments. If type is not a class, this does nothing. If type is a
class, then it makes sure that value is an instance of the class by:
1. if instance is of the type, or a class derived from type, it does
nothing.
2. otherwise it instantiates the class, using the value as an
argument. If value is None, it uses an empty arg tuple, and if
the value is a tuple, it uses just that.
29 years ago Three new C API functions:
- int PyErr_GivenExceptionMatches(obj1, obj2)
Returns 1 if obj1 and obj2 are the same object, or if obj1 is an
instance of type obj2, or of a class derived from obj2
- int PyErr_ExceptionMatches(obj)
Higher level wrapper around PyErr_GivenExceptionMatches() which uses
PyErr_Occurred() as obj1. This will be the more commonly called
function.
- void PyErr_NormalizeException(typeptr, valptr, tbptr)
Normalizes exceptions, and places the normalized values in the
arguments. If type is not a class, this does nothing. If type is a
class, then it makes sure that value is an instance of the class by:
1. if instance is of the type, or a class derived from type, it does
nothing.
2. otherwise it instantiates the class, using the value as an
argument. If value is None, it uses an empty arg tuple, and if
the value is a tuple, it uses just that.
29 years ago Three new C API functions:
- int PyErr_GivenExceptionMatches(obj1, obj2)
Returns 1 if obj1 and obj2 are the same object, or if obj1 is an
instance of type obj2, or of a class derived from obj2
- int PyErr_ExceptionMatches(obj)
Higher level wrapper around PyErr_GivenExceptionMatches() which uses
PyErr_Occurred() as obj1. This will be the more commonly called
function.
- void PyErr_NormalizeException(typeptr, valptr, tbptr)
Normalizes exceptions, and places the normalized values in the
arguments. If type is not a class, this does nothing. If type is a
class, then it makes sure that value is an instance of the class by:
1. if instance is of the type, or a class derived from type, it does
nothing.
2. otherwise it instantiates the class, using the value as an
argument. If value is None, it uses an empty arg tuple, and if
the value is a tuple, it uses just that.
29 years ago  Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/trunk-bytearray
........
r61750 | christian.heimes | 2008-03-22 20:47:44 +0100 (Sat, 22 Mar 2008) | 1 line
Copied files from py3k w/o modifications
........
r61752 | christian.heimes | 2008-03-22 20:53:20 +0100 (Sat, 22 Mar 2008) | 7 lines
Take One
* Added initialization code, warnings, flags etc. to the appropriate places
* Added new buffer interface to string type
* Modified tests
* Modified Makefile.pre.in to compile the new files
* Added bytesobject.c to Python.h
........
r61754 | christian.heimes | 2008-03-22 21:22:19 +0100 (Sat, 22 Mar 2008) | 2 lines
Disabled bytearray.extend for now since it causes an infinite recursion
Fixed serveral unit tests
........
r61756 | christian.heimes | 2008-03-22 21:43:38 +0100 (Sat, 22 Mar 2008) | 5 lines
Added PyBytes support to several places:
str + bytearray
ord(bytearray)
bytearray(str, encoding)
........
r61760 | christian.heimes | 2008-03-22 21:56:32 +0100 (Sat, 22 Mar 2008) | 1 line
Fixed more unit tests related to type('') is not unicode
........
r61763 | christian.heimes | 2008-03-22 22:20:28 +0100 (Sat, 22 Mar 2008) | 2 lines
Fixed more unit tests
Fixed bytearray.extend
........
r61768 | christian.heimes | 2008-03-22 22:40:50 +0100 (Sat, 22 Mar 2008) | 1 line
Implemented old buffer interface for bytearray
........
r61772 | christian.heimes | 2008-03-22 23:24:52 +0100 (Sat, 22 Mar 2008) | 1 line
Added backport of the io module
........
r61775 | christian.heimes | 2008-03-23 03:50:49 +0100 (Sun, 23 Mar 2008) | 1 line
Fix str assignement to bytearray. Assignment of a str of size 1 is interpreted as a single byte
........
r61805 | christian.heimes | 2008-03-23 19:33:48 +0100 (Sun, 23 Mar 2008) | 3 lines
Fixed more tests
Fixed bytearray() comparsion with unicode()
Fixed iterator assignment of bytearray
........
r61809 | christian.heimes | 2008-03-23 21:02:21 +0100 (Sun, 23 Mar 2008) | 2 lines
str(bytesarray()) now returns the bytes and not the representation of the bytearray object
Enabled and fixed more unit tests
........
r61812 | christian.heimes | 2008-03-23 21:53:08 +0100 (Sun, 23 Mar 2008) | 3 lines
Clear error PyNumber_AsSsize_t() fails
Use CHARMASK for ob_svall access
disabled a test with memoryview again
........
r61819 | christian.heimes | 2008-03-23 23:05:57 +0100 (Sun, 23 Mar 2008) | 1 line
Untested updates to the PCBuild directory
........
r61917 | christian.heimes | 2008-03-26 00:57:06 +0100 (Wed, 26 Mar 2008) | 1 line
The type system of Python 2.6 has subtle differences to 3.0's. I've removed the Py_TPFLAGS_BASETYPE flags from bytearray for now. bytearray can't be subclasses until the issues with bytearray subclasses are fixed.
........
r61920 | christian.heimes | 2008-03-26 01:44:08 +0100 (Wed, 26 Mar 2008) | 2 lines
Disabled last failing test
I don't understand what the test is testing and how it suppose to work. Ka-Ping, please check it out.
........
r61930 | christian.heimes | 2008-03-26 12:46:18 +0100 (Wed, 26 Mar 2008) | 1 line
Re-enabled bytes warning code
........
r61933 | christian.heimes | 2008-03-26 13:20:46 +0100 (Wed, 26 Mar 2008) | 1 line
Fixed a bug in the new buffer protocol. The buffer slots weren't copied into a subclass.
........
r61934 | christian.heimes | 2008-03-26 13:25:09 +0100 (Wed, 26 Mar 2008) | 1 line
Re-enabled bytearray subclassing - all tests are passing.
........
19 years ago |
|
#ifndef Py_ERRORS_H
#define Py_ERRORS_H
#ifdef __cplusplus
extern "C" {#endif
/* Error objects */
typedef struct { PyObject_HEAD PyObject *dict; PyObject *args; PyObject *message;} PyBaseExceptionObject;
typedef struct { PyObject_HEAD PyObject *dict; PyObject *args; PyObject *message; PyObject *msg; PyObject *filename; PyObject *lineno; PyObject *offset; PyObject *text; PyObject *print_file_and_line;} PySyntaxErrorObject;
#ifdef Py_USING_UNICODE
typedef struct { PyObject_HEAD PyObject *dict; PyObject *args; PyObject *message; PyObject *encoding; PyObject *object; Py_ssize_t start; Py_ssize_t end; PyObject *reason;} PyUnicodeErrorObject;#endif
typedef struct { PyObject_HEAD PyObject *dict; PyObject *args; PyObject *message; PyObject *code;} PySystemExitObject;
typedef struct { PyObject_HEAD PyObject *dict; PyObject *args; PyObject *message; PyObject *myerrno; PyObject *strerror; PyObject *filename;} PyEnvironmentErrorObject;
#ifdef MS_WINDOWS
typedef struct { PyObject_HEAD PyObject *dict; PyObject *args; PyObject *message; PyObject *myerrno; PyObject *strerror; PyObject *filename; PyObject *winerror;} PyWindowsErrorObject;#endif
/* Error handling definitions */
PyAPI_FUNC(void) PyErr_SetNone(PyObject *);PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *);PyAPI_FUNC(void) PyErr_SetString(PyObject *, const char *);PyAPI_FUNC(PyObject *) PyErr_Occurred(void);PyAPI_FUNC(void) PyErr_Clear(void);PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **);PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *);
#ifdef Py_DEBUG
#define _PyErr_OCCURRED() PyErr_Occurred()
#else
#define _PyErr_OCCURRED() (_PyThreadState_Current->curexc_type)
#endif
/* Error testing and normalization */PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *);PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *);PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**);
/* */
#define PyExceptionClass_Check(x) \
(PyClass_Check((x)) || (PyType_Check((x)) && \ PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)))
#define PyExceptionInstance_Check(x) \
(PyInstance_Check((x)) || \ PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS))
#define PyExceptionClass_Name(x) \
(PyClass_Check((x)) \ ? PyString_AS_STRING(((PyClassObject*)(x))->cl_name) \ : (char *)(((PyTypeObject*)(x))->tp_name))
#define PyExceptionInstance_Class(x) \
((PyInstance_Check((x)) \ ? (PyObject*)((PyInstanceObject*)(x))->in_class \ : (PyObject*)((x)->ob_type)))
/* Predefined exceptions */
PyAPI_DATA(PyObject *) PyExc_BaseException;PyAPI_DATA(PyObject *) PyExc_Exception;PyAPI_DATA(PyObject *) PyExc_StopIteration;PyAPI_DATA(PyObject *) PyExc_GeneratorExit;PyAPI_DATA(PyObject *) PyExc_StandardError;PyAPI_DATA(PyObject *) PyExc_ArithmeticError;PyAPI_DATA(PyObject *) PyExc_LookupError;
PyAPI_DATA(PyObject *) PyExc_AssertionError;PyAPI_DATA(PyObject *) PyExc_AttributeError;PyAPI_DATA(PyObject *) PyExc_EOFError;PyAPI_DATA(PyObject *) PyExc_FloatingPointError;PyAPI_DATA(PyObject *) PyExc_EnvironmentError;PyAPI_DATA(PyObject *) PyExc_IOError;PyAPI_DATA(PyObject *) PyExc_OSError;PyAPI_DATA(PyObject *) PyExc_ImportError;PyAPI_DATA(PyObject *) PyExc_IndexError;PyAPI_DATA(PyObject *) PyExc_KeyError;PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt;PyAPI_DATA(PyObject *) PyExc_MemoryError;PyAPI_DATA(PyObject *) PyExc_NameError;PyAPI_DATA(PyObject *) PyExc_OverflowError;PyAPI_DATA(PyObject *) PyExc_RuntimeError;PyAPI_DATA(PyObject *) PyExc_NotImplementedError;PyAPI_DATA(PyObject *) PyExc_SyntaxError;PyAPI_DATA(PyObject *) PyExc_IndentationError;PyAPI_DATA(PyObject *) PyExc_TabError;PyAPI_DATA(PyObject *) PyExc_ReferenceError;PyAPI_DATA(PyObject *) PyExc_SystemError;PyAPI_DATA(PyObject *) PyExc_SystemExit;PyAPI_DATA(PyObject *) PyExc_TypeError;PyAPI_DATA(PyObject *) PyExc_UnboundLocalError;PyAPI_DATA(PyObject *) PyExc_UnicodeError;PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError;PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError;PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError;PyAPI_DATA(PyObject *) PyExc_ValueError;PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError;#ifdef MS_WINDOWS
PyAPI_DATA(PyObject *) PyExc_WindowsError;#endif
#ifdef __VMS
PyAPI_DATA(PyObject *) PyExc_VMSError;#endif
PyAPI_DATA(PyObject *) PyExc_BufferError;
PyAPI_DATA(PyObject *) PyExc_MemoryErrorInst;PyAPI_DATA(PyObject *) PyExc_RecursionErrorInst;
/* Predefined warning categories */PyAPI_DATA(PyObject *) PyExc_Warning;PyAPI_DATA(PyObject *) PyExc_UserWarning;PyAPI_DATA(PyObject *) PyExc_DeprecationWarning;PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning;PyAPI_DATA(PyObject *) PyExc_SyntaxWarning;PyAPI_DATA(PyObject *) PyExc_RuntimeWarning;PyAPI_DATA(PyObject *) PyExc_FutureWarning;PyAPI_DATA(PyObject *) PyExc_ImportWarning;PyAPI_DATA(PyObject *) PyExc_UnicodeWarning;PyAPI_DATA(PyObject *) PyExc_BytesWarning;
/* Convenience functions */
PyAPI_FUNC(int) PyErr_BadArgument(void);PyAPI_FUNC(PyObject *) PyErr_NoMemory(void);PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *);PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject( PyObject *, PyObject *);PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename( PyObject *, const char *);#ifdef MS_WINDOWS
PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename( PyObject *, const Py_UNICODE *);#endif /* MS_WINDOWS */
PyAPI_FUNC(PyObject *) PyErr_Format(PyObject *, const char *, ...) Py_GCC_ATTRIBUTE((format(printf, 2, 3)));
#ifdef MS_WINDOWS
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject( int, const char *);PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( int, const char *);PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename( int, const Py_UNICODE *);PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int);PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( PyObject *,int, PyObject *);PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( PyObject *,int, const char *);PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( PyObject *,int, const Py_UNICODE *);PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);#endif /* MS_WINDOWS */
/* Export the old function so that the existing API remains available: */PyAPI_FUNC(void) PyErr_BadInternalCall(void);PyAPI_FUNC(void) _PyErr_BadInternalCall(char *filename, int lineno);/* Mask the old API with a call to the new API for code compiled under
Python 2.0: */#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
/* Function to create a new exception */PyAPI_FUNC(PyObject *) PyErr_NewException( char *name, PyObject *base, PyObject *dict);PyAPI_FUNC(PyObject *) PyErr_NewExceptionWithDoc( char *name, char *doc, PyObject *base, PyObject *dict);PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *);
/* In sigcheck.c or signalmodule.c */PyAPI_FUNC(int) PyErr_CheckSignals(void);PyAPI_FUNC(void) PyErr_SetInterrupt(void);
/* In signalmodule.c */int PySignal_SetWakeupFd(int fd);
/* Support for adding program text to SyntaxErrors */PyAPI_FUNC(void) PyErr_SyntaxLocation(const char *, int);PyAPI_FUNC(PyObject *) PyErr_ProgramText(const char *, int);
#ifdef Py_USING_UNICODE
/* The following functions are used to create and modify unicode
exceptions from C */
/* create a UnicodeDecodeError object */PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create( const char *, const char *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
/* create a UnicodeEncodeError object */PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( const char *, const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
/* create a UnicodeTranslateError object */PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
/* get the encoding attribute */PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *);PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *);
/* get the object attribute */PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *);PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *);PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *);
/* get the value of the start attribute (the int * may not be NULL)
return 0 on success, -1 on failure */PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *);PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *);PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *);
/* assign a new value to the start attribute
return 0 on success, -1 on failure */PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t);PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t);PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t);
/* get the value of the end attribute (the int *may not be NULL)
return 0 on success, -1 on failure */PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *);PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *);PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *);
/* assign a new value to the end attribute
return 0 on success, -1 on failure */PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t);PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t);PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t);
/* get the value of the reason attribute */PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *);PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *);PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *);
/* assign a new value to the reason attribute
return 0 on success, -1 on failure */PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason( PyObject *, const char *);PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason( PyObject *, const char *);PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( PyObject *, const char *);#endif
/* These APIs aren't really part of the error implementation, but
often needed to format error messages; the native C lib APIs are not available on all platforms, which is why we provide emulations for those platforms in Python/mysnprintf.c, WARNING: The return value of snprintf varies across platforms; do not rely on any particular behavior; eventually the C99 defn may be reliable.*/#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF)
# define HAVE_SNPRINTF
# define snprintf _snprintf
# define vsnprintf _vsnprintf
#endif
#include <stdarg.h>
PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 3, 4)));PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) Py_GCC_ATTRIBUTE((format(printf, 3, 0)));
#ifdef __cplusplus
}#endif
#endif /* !Py_ERRORS_H */
|