annotate Python/errors.c @ 5938:222faeb43d02 legacy-trunk

New rules for deleting modules. Rather than having an elaborate scheme based on object's types, have a simple two-phase scheme based on object's *names*: /* To make the execution order of destructors for global objects a bit more predictable, we first zap all objects whose name starts with a single underscore, before we clear the entire dictionary. We zap them by replacing them with None, rather than deleting them from the dictionary, to avoid rehashing the dictionary (to some extent). */
author Guido van Rossum <guido@python.org>
date Tue, 05 Aug 1997 02:20:51 +0000
parents b7871ca930ad
children 422960523286
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
1 /***********************************************************
2062
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2052
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2052
diff changeset
3 The Netherlands.
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
4
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
5 All Rights Reserved
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
8 documentation for any purpose and without fee is hereby granted,
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
10 both that copyright notice and this permission notice appear in
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
15 permission.
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3100
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
29
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
30 ******************************************************************/
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 90
diff changeset
31
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
32 /* Error handling */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
34 #include "Python.h"
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 66
diff changeset
35
2793
b8937e74fdf5 Porting to CW CFM68K
Jack Jansen <jack.jansen@cwi.nl>
parents: 2502
diff changeset
36 #ifdef SYMANTEC__CFM68K__
2376
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
37 #pragma lib_export on
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
38 #endif
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
39
2019
9e3469c0ed75 Added hook for better mac error messages.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2003
diff changeset
40 #ifdef macintosh
5312
d0eb183092b0 (Jack:) On the Mac, use standard strerror() if using MSL C-library.
Guido van Rossum <guido@python.org>
parents: 5112
diff changeset
41 #ifndef __MSL__
2376
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
42 /* Replace strerror with a Mac specific routine.
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
43 XXX PROBLEM: some positive errors have a meaning for MacOS,
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
44 but some library routines set Unix error numbers...
2019
9e3469c0ed75 Added hook for better mac error messages.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2003
diff changeset
45 */
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
46 extern char *PyMac_StrError Py_PROTO((int));
2190
b40e10bda231 Undef strerror on the mac before redefining it
Jack Jansen <jack.jansen@cwi.nl>
parents: 2062
diff changeset
47 #undef strerror
2376
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
48 #define strerror PyMac_StrError
5312
d0eb183092b0 (Jack:) On the Mac, use standard strerror() if using MSL C-library.
Guido van Rossum <guido@python.org>
parents: 5112
diff changeset
49 #endif
2376
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
50 #endif /* macintosh */
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
51
2502
d5978238e3ba changes in NT tests
Guido van Rossum <guido@python.org>
parents: 2376
diff changeset
52 #ifndef __STDC__
5318
2c4b802a3b5d Keep Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents: 5312
diff changeset
53 #ifndef MS_WINDOWS
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
54 extern char *strerror Py_PROTO((int));
2502
d5978238e3ba changes in NT tests
Guido van Rossum <guido@python.org>
parents: 2376
diff changeset
55 #endif
5318
2c4b802a3b5d Keep Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents: 5312
diff changeset
56 #endif
59
433f52d1d958 Added prototype for strerror.
Guido van Rossum <guido@python.org>
parents: 37
diff changeset
57
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 void
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
59 PyErr_Restore(type, value, traceback)
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
60 PyObject *type;
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
61 PyObject *value;
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
62 PyObject *traceback;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2019
diff changeset
63 {
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
64 PyThreadState *tstate = PyThreadState_Get();
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
65 PyObject *oldtype, *oldvalue, *oldtraceback;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
66
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
67 if (traceback != NULL && !PyTraceBack_Check(traceback)) {
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
68 /* XXX Should never happen -- fatal error instead? */
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
69 Py_DECREF(traceback);
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
70 traceback = NULL;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
71 }
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2019
diff changeset
72
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
73 /* Save these in locals to safeguard against recursive
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
74 invocation through Py_XDECREF */
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
75 oldtype = tstate->curexc_type;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
76 oldvalue = tstate->curexc_value;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
77 oldtraceback = tstate->curexc_traceback;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
78
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
79 tstate->curexc_type = type;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
80 tstate->curexc_value = value;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
81 tstate->curexc_traceback = traceback;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
82
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
83 Py_XDECREF(oldtype);
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
84 Py_XDECREF(oldvalue);
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
85 Py_XDECREF(oldtraceback);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2019
diff changeset
86 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2019
diff changeset
87
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2019
diff changeset
88 void
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
89 PyErr_SetObject(exception, value)
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
90 PyObject *exception;
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
91 PyObject *value;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 {
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
93 Py_XINCREF(exception);
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
94 Py_XINCREF(value);
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
95 PyErr_Restore(exception, value, (PyObject *)NULL);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 void
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
99 PyErr_SetNone(exception)
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
100 PyObject *exception;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 {
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
102 PyErr_SetObject(exception, (PyObject *)NULL);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 void
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
106 PyErr_SetString(exception, string)
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
107 PyObject *exception;
4654
df81856db58c Add const to error and newstring functions
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
108 const char *string;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 {
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
110 PyObject *value = PyString_FromString(string);
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
111 PyErr_SetObject(exception, value);
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
112 Py_XDECREF(value);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114
1832
79e420805c67 err_clear: clear interpreter stack trace
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
115
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
116 PyObject *
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
117 PyErr_Occurred()
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 {
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
119 PyThreadState *tstate = PyThreadState_Get();
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
120
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
121 return tstate->curexc_type;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 void
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
125 PyErr_Fetch(p_type, p_value, p_traceback)
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
126 PyObject **p_type;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
127 PyObject **p_value;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
128 PyObject **p_traceback;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 {
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
130 PyThreadState *tstate = PyThreadState_Get();
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
131
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
132 *p_type = tstate->curexc_type;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
133 *p_value = tstate->curexc_value;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
134 *p_traceback = tstate->curexc_traceback;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
135
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
136 tstate->curexc_type = NULL;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
137 tstate->curexc_value = NULL;
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
138 tstate->curexc_traceback = NULL;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 void
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
142 PyErr_Clear()
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 {
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
144 PyErr_Restore(NULL, NULL, NULL);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 }
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
146
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
147 /* Convenience functions to set a type error exception and return 0 */
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
148
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
149 int
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
150 PyErr_BadArgument()
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
151 {
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
152 PyErr_SetString(PyExc_TypeError,
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
153 "illegal argument type for built-in operation");
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
154 return 0;
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
155 }
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
156
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
157 PyObject *
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
158 PyErr_NoMemory()
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
159 {
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
160 PyErr_SetNone(PyExc_MemoryError);
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
161 return NULL;
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
162 }
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
163
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
164 PyObject *
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
165 PyErr_SetFromErrno(exc)
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
166 PyObject *exc;
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
167 {
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
168 PyObject *v;
1832
79e420805c67 err_clear: clear interpreter stack trace
Guido van Rossum <guido@python.org>
parents: 1319
diff changeset
169 int i = errno;
2376
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
170 #ifdef EINTR
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
171 if (i == EINTR && PyErr_CheckSignals())
390
172aa2c3e734 Check for EINTR and turn it into KeyboardInterrupt
Guido van Rossum <guido@python.org>
parents: 145
diff changeset
172 return NULL;
2376
c31eaed7798b rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents: 2190
diff changeset
173 #endif
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
174 v = Py_BuildValue("(is)", i, strerror(i));
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
175 if (v != NULL) {
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
176 PyErr_SetObject(exc, v);
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
177 Py_DECREF(v);
9
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
178 }
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
179 return NULL;
33701db4ea55 Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
180 }
22
2d3eb717a00d Added err_badcall().
Guido van Rossum <guido@python.org>
parents: 9
diff changeset
181
2d3eb717a00d Added err_badcall().
Guido van Rossum <guido@python.org>
parents: 9
diff changeset
182 void
5370
1ea1f019268d Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents: 5318
diff changeset
183 PyErr_BadInternalCall()
22
2d3eb717a00d Added err_badcall().
Guido van Rossum <guido@python.org>
parents: 9
diff changeset
184 {
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
185 PyErr_SetString(PyExc_SystemError,
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5370
diff changeset
186 "bad argument to internal function");
22
2d3eb717a00d Added err_badcall().
Guido van Rossum <guido@python.org>
parents: 9
diff changeset
187 }
5105
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
188
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
189
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
190 #ifdef HAVE_STDARG_PROTOTYPES
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
191 PyObject *
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
192 PyErr_Format(PyObject *exception, const char *format, ...)
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
193 #else
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
194 PyObject *
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
195 PyErr_Format(exception, format, va_alist)
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
196 PyObject *exception;
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
197 const char *format;
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
198 va_dcl
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
199 #endif
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
200 {
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
201 va_list vargs;
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
202 char buffer[500]; /* Caller is responsible for limiting the format */
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
203
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
204 #ifdef HAVE_STDARG_PROTOTYPES
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
205 va_start(vargs, format);
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
206 #else
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
207 va_start(vargs);
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
208 #endif
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
209
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
210 vsprintf(buffer, format, vargs);
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
211 PyErr_SetString(exception, buffer);
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
212 return NULL;
00fd6857f76b Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents: 4654
diff changeset
213 }