Mercurial > cpython-lru_cache-weakref
annotate Python/errors.c @ 86974:954167ce92a3
Issue #19512: add some common identifiers to only create common strings once,
instead of creating temporary Unicode string objects
Add also more identifiers in pythonrun.c to avoid temporary Unicode string
objets for the interactive interpreter.
| author | Victor Stinner <victor.stinner@gmail.com> |
|---|---|
| date | Wed, 06 Nov 2013 22:41:44 +0100 |
| parents | eeec58c57964 |
| children | 77bebcf5c4cf |
| rev | line source |
|---|---|
| 145 | 1 |
|
5370
1ea1f019268d
Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents:
5318
diff
changeset
|
2 /* Error handling */ |
| 6 | 3 |
|
5370
1ea1f019268d
Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents:
5318
diff
changeset
|
4 #include "Python.h" |
| 86 | 5 |
| 2502 | 6 #ifndef __STDC__ |
|
5318
2c4b802a3b5d
Keep Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5312
diff
changeset
|
7 #ifndef MS_WINDOWS |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
8 extern char *strerror(int); |
| 2502 | 9 #endif |
|
5318
2c4b802a3b5d
Keep Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5312
diff
changeset
|
10 #endif |
|
59
433f52d1d958
Added prototype for strerror.
Guido van Rossum <guido@python.org>
parents:
37
diff
changeset
|
11 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23029
diff
changeset
|
12 #ifdef MS_WINDOWS |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
13 #include <windows.h> |
|
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
14 #include <winbase.h> |
|
10638
df8a1c281ad7
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
Guido van Rossum <guido@python.org>
parents:
9671
diff
changeset
|
15 #endif |
|
df8a1c281ad7
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
Guido van Rossum <guido@python.org>
parents:
9671
diff
changeset
|
16 |
|
14335
951eb3af3494
code part of patch #100895 by Fredrik Lundh
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14330
diff
changeset
|
17 #include <ctype.h> |
|
951eb3af3494
code part of patch #100895 by Fredrik Lundh
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14330
diff
changeset
|
18 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
19 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
20 extern "C" { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
21 #endif |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
22 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
23 |
| 6 | 24 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
25 PyErr_Restore(PyObject *type, PyObject *value, 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
|
26 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
27 PyThreadState *tstate = PyThreadState_GET(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
28 PyObject *oldtype, *oldvalue, *oldtraceback; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5370
diff
changeset
|
29 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
30 if (traceback != NULL && !PyTraceBack_Check(traceback)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
31 /* XXX Should never happen -- fatal error instead? */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
32 /* Well, it could be None. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
33 Py_DECREF(traceback); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
34 traceback = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
35 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2019
diff
changeset
|
36 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
37 /* Save these in locals to safeguard against recursive |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
38 invocation through Py_XDECREF */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
39 oldtype = tstate->curexc_type; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
40 oldvalue = tstate->curexc_value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
41 oldtraceback = tstate->curexc_traceback; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5370
diff
changeset
|
42 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
43 tstate->curexc_type = type; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
44 tstate->curexc_value = value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
45 tstate->curexc_traceback = traceback; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5370
diff
changeset
|
46 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
47 Py_XDECREF(oldtype); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
48 Py_XDECREF(oldvalue); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
49 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
|
50 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2019
diff
changeset
|
51 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2019
diff
changeset
|
52 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
53 PyErr_SetObject(PyObject *exception, PyObject *value) |
| 6 | 54 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
55 PyThreadState *tstate = PyThreadState_GET(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
56 PyObject *exc_value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
57 PyObject *tb = NULL; |
|
47722
7ba7901dad7f
Implicit exception chaining via __context__ (PEP 3134).
Guido van Rossum <guido@python.org>
parents:
46430
diff
changeset
|
58 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
59 if (exception != NULL && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
60 !PyExceptionClass_Check(exception)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
61 PyErr_Format(PyExc_SystemError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
62 "exception %R not a BaseException subclass", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
63 exception); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
64 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
65 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
66 Py_XINCREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
67 exc_value = tstate->exc_value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
68 if (exc_value != NULL && exc_value != Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
69 /* Implicit exception chaining */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
70 Py_INCREF(exc_value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
71 if (value == NULL || !PyExceptionInstance_Check(value)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
72 /* We must normalize the value right now */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
73 PyObject *args, *fixed_value; |
|
84704
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
74 #ifdef Py_DEBUG |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
75 /* in debug mode, PyEval_EvalFrameEx() fails with an assertion |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
76 error if an exception is set when it is called */ |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
77 PyErr_Clear(); |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
78 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
79 if (value == NULL || value == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
80 args = PyTuple_New(0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
81 else if (PyTuple_Check(value)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
82 Py_INCREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
83 args = value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
84 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
85 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
86 args = PyTuple_Pack(1, value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
87 fixed_value = args ? |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
88 PyEval_CallObject(exception, args) : NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
89 Py_XDECREF(args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
90 Py_XDECREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
91 if (fixed_value == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
92 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
93 value = fixed_value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
94 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
95 /* Avoid reference cycles through the context chain. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
96 This is O(chain length) but context chains are |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
97 usually very short. Sensitive readers may try |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
98 to inline the call to PyException_GetContext. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
99 if (exc_value != value) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
100 PyObject *o = exc_value, *context; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
101 while ((context = PyException_GetContext(o))) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
102 Py_DECREF(context); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
103 if (context == value) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
104 PyException_SetContext(o, NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
105 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
106 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
107 o = context; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
108 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
109 PyException_SetContext(value, exc_value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
110 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
111 Py_DECREF(exc_value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
112 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
113 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
114 if (value != NULL && PyExceptionInstance_Check(value)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
115 tb = PyException_GetTraceback(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
116 Py_XINCREF(exception); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
117 PyErr_Restore(exception, value, tb); |
| 6 | 118 } |
| 119 | |
|
85502
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
120 /* Set a key error with the specified argument, wrapping it in a |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
121 * tuple automatically so that tuple keys are not unpacked as the |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
122 * exception arguments. */ |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
123 void |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
124 _PyErr_SetKeyError(PyObject *arg) |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
125 { |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
126 PyObject *tup; |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
127 tup = PyTuple_Pack(1, arg); |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
128 if (!tup) |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
129 return; /* caller will expect error to be set anyway */ |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
130 PyErr_SetObject(PyExc_KeyError, tup); |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
131 Py_DECREF(tup); |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
132 } |
|
bfaf3a2907bd
Factor-out the common code for setting a KeyError.
Raymond Hettinger <python@rcn.com>
parents:
85420
diff
changeset
|
133 |
| 6 | 134 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
135 PyErr_SetNone(PyObject *exception) |
| 6 | 136 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
137 PyErr_SetObject(exception, (PyObject *)NULL); |
| 6 | 138 } |
| 139 | |
| 140 void | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
141 PyErr_SetString(PyObject *exception, const char *string) |
| 6 | 142 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
143 PyObject *value = PyUnicode_FromString(string); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
144 PyErr_SetObject(exception, value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
145 Py_XDECREF(value); |
| 6 | 146 } |
| 147 | |
|
1832
79e420805c67
err_clear: clear interpreter stack trace
Guido van Rossum <guido@python.org>
parents:
1319
diff
changeset
|
148 |
|
5370
1ea1f019268d
Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents:
5318
diff
changeset
|
149 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
150 PyErr_Occurred(void) |
| 6 | 151 { |
|
61555
1698c55b2af9
Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
61466
diff
changeset
|
152 /* If there is no thread state, PyThreadState_GET calls |
|
1698c55b2af9
Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
61466
diff
changeset
|
153 Py_FatalError, which calls PyErr_Occurred. To avoid the |
|
1698c55b2af9
Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
61466
diff
changeset
|
154 resulting infinite loop, we inline PyThreadState_GET here and |
|
1698c55b2af9
Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
61466
diff
changeset
|
155 treat no thread as no error. */ |
|
1698c55b2af9
Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
61466
diff
changeset
|
156 PyThreadState *tstate = |
|
1698c55b2af9
Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
61466
diff
changeset
|
157 ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)); |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5370
diff
changeset
|
158 |
|
61555
1698c55b2af9
Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
61466
diff
changeset
|
159 return tstate == NULL ? NULL : tstate->curexc_type; |
| 6 | 160 } |
| 161 | |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
162 |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
163 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
164 PyErr_GivenExceptionMatches(PyObject *err, PyObject *exc) |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
165 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
166 if (err == NULL || exc == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
167 /* maybe caused by "import exceptions" that failed early on */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
168 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
169 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
170 if (PyTuple_Check(exc)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
171 Py_ssize_t i, n; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
172 n = PyTuple_Size(exc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
173 for (i = 0; i < n; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
174 /* Test recursively */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
175 if (PyErr_GivenExceptionMatches( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
176 err, PyTuple_GET_ITEM(exc, i))) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
177 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
178 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
179 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
180 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
181 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
182 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
183 /* err might be an instance, so check its class. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
184 if (PyExceptionInstance_Check(err)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
185 err = PyExceptionInstance_Class(err); |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
186 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
187 if (PyExceptionClass_Check(err) && PyExceptionClass_Check(exc)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
188 int res = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
189 PyObject *exception, *value, *tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
190 PyErr_Fetch(&exception, &value, &tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
191 /* PyObject_IsSubclass() can recurse and therefore is |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
192 not safe (see test_bad_getattr in test.pickletester). */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
193 res = PyType_IsSubtype((PyTypeObject *)err, (PyTypeObject *)exc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
194 /* This function must not fail, so print the error here */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
195 if (res == -1) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
196 PyErr_WriteUnraisable(err); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
197 res = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
198 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
199 PyErr_Restore(exception, value, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
200 return res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
201 } |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
202 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
203 return err == exc; |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
204 } |
|
10638
df8a1c281ad7
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
Guido van Rossum <guido@python.org>
parents:
9671
diff
changeset
|
205 |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
206 |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
207 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
208 PyErr_ExceptionMatches(PyObject *exc) |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
209 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
210 return PyErr_GivenExceptionMatches(PyErr_Occurred(), exc); |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
211 } |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
212 |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
213 |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
214 /* Used in many places to normalize a raised exception, including in |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
215 eval_code2(), do_raise(), and PyErr_Print() |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47722
diff
changeset
|
216 |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47722
diff
changeset
|
217 XXX: should PyErr_NormalizeException() also call |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
218 PyException_SetTraceback() with the resulting value and tb? |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
219 */ |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
220 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
221 PyErr_NormalizeException(PyObject **exc, PyObject **val, PyObject **tb) |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
222 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
223 PyObject *type = *exc; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
224 PyObject *value = *val; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
225 PyObject *inclass = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
226 PyObject *initial_tb = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
227 PyThreadState *tstate = NULL; |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
228 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
229 if (type == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
230 /* There was no exception, so nothing to do. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
231 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
232 } |
|
13883
15ad4088a700
Avoid dumping core when PyErr_NormalizeException() is called without
Guido van Rossum <guido@python.org>
parents:
13658
diff
changeset
|
233 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
234 /* If PyErr_SetNone() was used, the value will have been actually |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
235 set to NULL. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
236 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
237 if (!value) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
238 value = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
239 Py_INCREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
240 } |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
241 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
242 if (PyExceptionInstance_Check(value)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
243 inclass = PyExceptionInstance_Class(value); |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
244 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
245 /* Normalize the exception so that if the type is a class, the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
246 value will be an instance. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
247 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
248 if (PyExceptionClass_Check(type)) { |
|
84680
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
249 int is_subclass; |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
250 if (inclass) { |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
251 is_subclass = PyObject_IsSubclass(inclass, type); |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
252 if (is_subclass < 0) |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
253 goto finally; |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
254 } |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
255 else |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
256 is_subclass = 0; |
|
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
257 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
258 /* if the value was not an instance, or is not an instance |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
259 whose class is (or is derived from) type, then use the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
260 value as an argument to instantiation of the type |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
261 class. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
262 */ |
|
84680
a685f4c6e0b6
Issue #18408: Fix PyErr_NormalizeException(), handle PyObject_IsSubclass() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84574
diff
changeset
|
263 if (!inclass || !is_subclass) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
264 PyObject *args, *res; |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
265 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
266 if (value == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
267 args = PyTuple_New(0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
268 else if (PyTuple_Check(value)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
269 Py_INCREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
270 args = value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
271 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
272 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
273 args = PyTuple_Pack(1, value); |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
274 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
275 if (args == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
276 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
277 res = PyEval_CallObject(type, args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
278 Py_DECREF(args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
279 if (res == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
280 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
281 Py_DECREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
282 value = res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
283 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
284 /* if the class of the instance doesn't exactly match the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
285 class of the type, believe the instance |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
286 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
287 else if (inclass != type) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
288 Py_DECREF(type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
289 type = inclass; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
290 Py_INCREF(type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
291 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
292 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
293 *exc = type; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
294 *val = value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
295 return; |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
296 finally: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
297 Py_DECREF(type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
298 Py_DECREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
299 /* If the new exception doesn't set a traceback and the old |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
300 exception had a traceback, use the old traceback for the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
301 new exception. It's better than nothing. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
302 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
303 initial_tb = *tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
304 PyErr_Fetch(exc, val, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
305 if (initial_tb != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
306 if (*tb == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
307 *tb = initial_tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
308 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
309 Py_DECREF(initial_tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
310 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
311 /* normalize recursively */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
312 tstate = PyThreadState_GET(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
313 if (++tstate->recursion_depth > Py_GetRecursionLimit()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
314 --tstate->recursion_depth; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
315 /* throw away the old exception... */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
316 Py_DECREF(*exc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
317 Py_DECREF(*val); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
318 /* ... and use the recursion error instead */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
319 *exc = PyExc_RuntimeError; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
320 *val = PyExc_RecursionErrorInst; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
321 Py_INCREF(*exc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
322 Py_INCREF(*val); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
323 /* just keeping the old traceback */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
324 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
325 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
326 PyErr_NormalizeException(exc, val, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
327 --tstate->recursion_depth; |
|
6146
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
328 } |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
329 |
|
a2a1df0ca808
Three new C API functions:
Barry Warsaw <barry@python.org>
parents:
5979
diff
changeset
|
330 |
| 6 | 331 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
332 PyErr_Fetch(PyObject **p_type, PyObject **p_value, PyObject **p_traceback) |
| 6 | 333 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
334 PyThreadState *tstate = PyThreadState_GET(); |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5370
diff
changeset
|
335 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
336 *p_type = tstate->curexc_type; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
337 *p_value = tstate->curexc_value; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
338 *p_traceback = tstate->curexc_traceback; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5370
diff
changeset
|
339 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
340 tstate->curexc_type = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
341 tstate->curexc_value = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
342 tstate->curexc_traceback = NULL; |
| 6 | 343 } |
| 344 | |
| 345 void | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
346 PyErr_Clear(void) |
| 6 | 347 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
348 PyErr_Restore(NULL, NULL, NULL); |
| 6 | 349 } |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
350 |
|
76418
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
351 void |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
352 PyErr_GetExcInfo(PyObject **p_type, PyObject **p_value, PyObject **p_traceback) |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
353 { |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
354 PyThreadState *tstate = PyThreadState_GET(); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
355 |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
356 *p_type = tstate->exc_type; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
357 *p_value = tstate->exc_value; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
358 *p_traceback = tstate->exc_traceback; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
359 |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
360 Py_XINCREF(*p_type); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
361 Py_XINCREF(*p_value); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
362 Py_XINCREF(*p_traceback); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
363 } |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
364 |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
365 void |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
366 PyErr_SetExcInfo(PyObject *p_type, PyObject *p_value, PyObject *p_traceback) |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
367 { |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
368 PyObject *oldtype, *oldvalue, *oldtraceback; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
369 PyThreadState *tstate = PyThreadState_GET(); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
370 |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
371 oldtype = tstate->exc_type; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
372 oldvalue = tstate->exc_value; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
373 oldtraceback = tstate->exc_traceback; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
374 |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
375 tstate->exc_type = p_type; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
376 tstate->exc_value = p_value; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
377 tstate->exc_traceback = p_traceback; |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
378 |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
379 Py_XDECREF(oldtype); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
380 Py_XDECREF(oldvalue); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
381 Py_XDECREF(oldtraceback); |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
382 } |
|
9fdec1354af4
Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents:
76391
diff
changeset
|
383 |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
384 /* 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
|
385 |
|
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
386 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
387 PyErr_BadArgument(void) |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
388 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
389 PyErr_SetString(PyExc_TypeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
390 "bad argument type for built-in operation"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
391 return 0; |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
392 } |
|
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
393 |
|
5370
1ea1f019268d
Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents:
5318
diff
changeset
|
394 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
395 PyErr_NoMemory(void) |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
396 { |
|
84794
9b77b3ee6fb8
Issue #18520: PyErr_NoMemory() now fails with a fatal error if it is called
Victor Stinner <victor.stinner@gmail.com>
parents:
84704
diff
changeset
|
397 if (Py_TYPE(PyExc_MemoryError) == NULL) { |
|
9b77b3ee6fb8
Issue #18520: PyErr_NoMemory() now fails with a fatal error if it is called
Victor Stinner <victor.stinner@gmail.com>
parents:
84704
diff
changeset
|
398 /* PyErr_NoMemory() has been called before PyExc_MemoryError has been |
|
9b77b3ee6fb8
Issue #18520: PyErr_NoMemory() now fails with a fatal error if it is called
Victor Stinner <victor.stinner@gmail.com>
parents:
84704
diff
changeset
|
399 initialized by _PyExc_Init() */ |
|
9b77b3ee6fb8
Issue #18520: PyErr_NoMemory() now fails with a fatal error if it is called
Victor Stinner <victor.stinner@gmail.com>
parents:
84704
diff
changeset
|
400 Py_FatalError("Out of memory and PyExc_MemoryError is not " |
|
9b77b3ee6fb8
Issue #18520: PyErr_NoMemory() now fails with a fatal error if it is called
Victor Stinner <victor.stinner@gmail.com>
parents:
84704
diff
changeset
|
401 "initialized yet"); |
|
9b77b3ee6fb8
Issue #18520: PyErr_NoMemory() now fails with a fatal error if it is called
Victor Stinner <victor.stinner@gmail.com>
parents:
84704
diff
changeset
|
402 } |
|
65690
c6d86439aa91
Merged revisions 85896 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61467
diff
changeset
|
403 PyErr_SetNone(PyExc_MemoryError); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
404 return NULL; |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
405 } |
|
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
406 |
|
5370
1ea1f019268d
Quickly renamed. Also removed the long comment explaining why this is
Guido van Rossum <guido@python.org>
parents:
5318
diff
changeset
|
407 PyObject * |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
408 PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject) |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
409 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
410 PyObject *message; |
|
72893
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
411 PyObject *v, *args; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
412 int i = errno; |
|
74007
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
413 #ifdef MS_WINDOWS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
414 WCHAR *s_buf = NULL; |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
415 #endif /* Unix/Windows */ |
|
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
416 |
|
2376
c31eaed7798b
rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents:
2190
diff
changeset
|
417 #ifdef EINTR |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
418 if (i == EINTR && PyErr_CheckSignals()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
419 return NULL; |
|
2376
c31eaed7798b
rename macstrerror to PyMac_StrError; no EINTR test in CW
Guido van Rossum <guido@python.org>
parents:
2190
diff
changeset
|
420 #endif |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
421 |
|
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
422 #ifndef MS_WINDOWS |
|
74007
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
423 if (i != 0) { |
|
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
424 char *s = strerror(i); |
|
74009
07802351ccad
Issue #13560: Locale codec functions use the classic "errors" parameter,
Victor Stinner <victor.stinner@haypocalc.com>
parents:
74007
diff
changeset
|
425 message = PyUnicode_DecodeLocale(s, "surrogateescape"); |
|
74007
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
426 } |
|
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
427 else { |
|
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
428 /* Sometimes errno didn't get set */ |
|
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
429 message = PyUnicode_FromString("Error"); |
|
51412b4b81ae
Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73949
diff
changeset
|
430 } |
|
10638
df8a1c281ad7
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
Guido van Rossum <guido@python.org>
parents:
9671
diff
changeset
|
431 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
432 if (i == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
433 message = PyUnicode_FromString("Error"); /* Sometimes errno didn't get set */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
434 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
435 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
436 /* Note that the Win32 errors do not lineup with the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
437 errno error. So if the error is in the MSVC error |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
438 table, we use it, otherwise we assume it really _is_ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
439 a Win32 error code |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
440 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
441 if (i > 0 && i < _sys_nerr) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
442 message = PyUnicode_FromString(_sys_errlist[i]); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
443 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
444 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
445 int len = FormatMessageW( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
446 FORMAT_MESSAGE_ALLOCATE_BUFFER | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
447 FORMAT_MESSAGE_FROM_SYSTEM | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
448 FORMAT_MESSAGE_IGNORE_INSERTS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
449 NULL, /* no message source */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
450 i, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
451 MAKELANGID(LANG_NEUTRAL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
452 SUBLANG_DEFAULT), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
453 /* Default language */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
454 (LPWSTR) &s_buf, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
455 0, /* size not used */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
456 NULL); /* no args */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
457 if (len==0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
458 /* Only ever seen this in out-of-mem |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
459 situations */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
460 s_buf = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
461 message = PyUnicode_FromFormat("Windows Error 0x%X", i); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
462 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
463 /* remove trailing cr/lf and dots */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
464 while (len > 0 && (s_buf[len-1] <= L' ' || s_buf[len-1] == L'.')) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
465 s_buf[--len] = L'\0'; |
| 72475 | 466 message = PyUnicode_FromWideChar(s_buf, len); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
467 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
468 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
469 } |
|
22205
f4487350c537
Patch #494045: patches errno and stat to cope on plan9.
Martin v. Löwis <martin@v.loewis.de>
parents:
22121
diff
changeset
|
470 #endif /* Unix/Windows */ |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
471 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
472 if (message == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
473 { |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
474 #ifdef MS_WINDOWS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
475 LocalFree(s_buf); |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
476 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
477 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
478 } |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
479 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
480 if (filenameObject != NULL) |
|
72893
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
481 args = Py_BuildValue("(iOO)", i, message, filenameObject); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
482 else |
|
72893
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
483 args = Py_BuildValue("(iO)", i, message); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
484 Py_DECREF(message); |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
485 |
|
72893
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
486 if (args != NULL) { |
|
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
487 v = PyObject_Call(exc, args, NULL); |
|
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
488 Py_DECREF(args); |
|
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
489 if (v != NULL) { |
|
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
490 PyErr_SetObject((PyObject *) Py_TYPE(v), v); |
|
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
491 Py_DECREF(v); |
|
793c75177d28
Instantiate the OS-related exception as soon as we raise it, so that
Antoine Pitrou <solipsis@pitrou.net>
parents:
72879
diff
changeset
|
492 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
493 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23029
diff
changeset
|
494 #ifdef MS_WINDOWS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
495 LocalFree(s_buf); |
|
10638
df8a1c281ad7
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
Guido van Rossum <guido@python.org>
parents:
9671
diff
changeset
|
496 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
497 return NULL; |
|
9
33701db4ea55
Adde dconvenience functions.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
498 } |
|
10638
df8a1c281ad7
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
Guido van Rossum <guido@python.org>
parents:
9671
diff
changeset
|
499 |
|
8706
ca1c669bb041
PyErr_SetFromErrnoWithFilename(): New function which supports setting
Barry Warsaw <barry@python.org>
parents:
6789
diff
changeset
|
500 |
|
ca1c669bb041
PyErr_SetFromErrnoWithFilename(): New function which supports setting
Barry Warsaw <barry@python.org>
parents:
6789
diff
changeset
|
501 PyObject * |
|
42794
84618b2064c1
Add const to some strings that are not modified
Neal Norwitz <nnorwitz@gmail.com>
parents:
42793
diff
changeset
|
502 PyErr_SetFromErrnoWithFilename(PyObject *exc, const char *filename) |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
503 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
504 PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
505 PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
506 Py_XDECREF(name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
507 return result; |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
508 } |
|
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
509 |
|
54129
77cfef596d33
Merged revisions 72698-72699 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
53079
diff
changeset
|
510 #ifdef MS_WINDOWS |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
511 PyObject * |
|
42794
84618b2064c1
Add const to some strings that are not modified
Neal Norwitz <nnorwitz@gmail.com>
parents:
42793
diff
changeset
|
512 PyErr_SetFromErrnoWithUnicodeFilename(PyObject *exc, const Py_UNICODE *filename) |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
513 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
514 PyObject *name = filename ? |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
515 PyUnicode_FromUnicode(filename, wcslen(filename)) : |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
516 NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
517 PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
518 Py_XDECREF(name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
519 return result; |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
520 } |
|
54129
77cfef596d33
Merged revisions 72698-72699 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
53079
diff
changeset
|
521 #endif /* MS_WINDOWS */ |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
522 |
|
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
523 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
524 PyErr_SetFromErrno(PyObject *exc) |
|
8706
ca1c669bb041
PyErr_SetFromErrnoWithFilename(): New function which supports setting
Barry Warsaw <barry@python.org>
parents:
6789
diff
changeset
|
525 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
526 return PyErr_SetFromErrnoWithFilenameObject(exc, NULL); |
|
8706
ca1c669bb041
PyErr_SetFromErrnoWithFilename(): New function which supports setting
Barry Warsaw <barry@python.org>
parents:
6789
diff
changeset
|
527 } |
| 22 | 528 |
|
36751
8e04de2480e4
PEP 352 implementation. Creates a new base class, BaseException, which has an
Brett Cannon <bcannon@gmail.com>
parents:
36737
diff
changeset
|
529 #ifdef MS_WINDOWS |
|
11801
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
530 /* Windows specific error code handling */ |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
531 PyObject *PyErr_SetExcFromWindowsErrWithFilenameObject( |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
532 PyObject *exc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
533 int ierr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
534 PyObject *filenameObject) |
|
11801
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
535 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
536 int len; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
537 WCHAR *s_buf = NULL; /* Free via LocalFree */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
538 PyObject *message; |
|
72965
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
539 PyObject *args, *v; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
540 DWORD err = (DWORD)ierr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
541 if (err==0) err = GetLastError(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
542 len = FormatMessageW( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
543 /* Error API error */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
544 FORMAT_MESSAGE_ALLOCATE_BUFFER | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
545 FORMAT_MESSAGE_FROM_SYSTEM | |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
546 FORMAT_MESSAGE_IGNORE_INSERTS, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
547 NULL, /* no message source */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
548 err, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
549 MAKELANGID(LANG_NEUTRAL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
550 SUBLANG_DEFAULT), /* Default language */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
551 (LPWSTR) &s_buf, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
552 0, /* size not used */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
553 NULL); /* no args */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
554 if (len==0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
555 /* Only seen this in out of mem situations */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
556 message = PyUnicode_FromFormat("Windows Error 0x%X", err); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
557 s_buf = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
558 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
559 /* remove trailing cr/lf and dots */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
560 while (len > 0 && (s_buf[len-1] <= L' ' || s_buf[len-1] == L'.')) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
561 s_buf[--len] = L'\0'; |
| 72475 | 562 message = PyUnicode_FromWideChar(s_buf, len); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
563 } |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
564 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
565 if (message == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
566 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
567 LocalFree(s_buf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
568 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
569 } |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
570 |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72848
diff
changeset
|
571 if (filenameObject == NULL) |
|
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72848
diff
changeset
|
572 filenameObject = Py_None; |
|
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72848
diff
changeset
|
573 /* This is the constructor signature for passing a Windows error code. |
|
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72848
diff
changeset
|
574 The POSIX translation will be figured out by the constructor. */ |
|
72965
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
575 args = Py_BuildValue("(iOOi)", 0, message, filenameObject, err); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
576 Py_DECREF(message); |
|
43204
b51ac2d2d538
Patch #1075: Use wide API to format error messages.
Martin v. Löwis <martin@v.loewis.de>
parents:
42794
diff
changeset
|
577 |
|
72965
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
578 if (args != NULL) { |
|
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
579 v = PyObject_Call(exc, args, NULL); |
|
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
580 Py_DECREF(args); |
|
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
581 if (v != NULL) { |
|
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
582 PyErr_SetObject((PyObject *) Py_TYPE(v), v); |
|
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
583 Py_DECREF(v); |
|
84aed9ef7aaf
Instantiate the OS-related exception as soon as we raise it, so that "except"
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
584 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
585 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
586 LocalFree(s_buf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
587 return NULL; |
|
11801
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
588 } |
|
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
589 |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
590 PyObject *PyErr_SetExcFromWindowsErrWithFilename( |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
591 PyObject *exc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
592 int ierr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
593 const char *filename) |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
594 { |
|
67163
5605f6920b63
Issue #10780: PyErr_SetFromWindowsErrWithFilename() and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65688
diff
changeset
|
595 PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
596 PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
597 ierr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
598 name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
599 Py_XDECREF(name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
600 return ret; |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
601 } |
|
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
602 |
|
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
603 PyObject *PyErr_SetExcFromWindowsErrWithUnicodeFilename( |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
604 PyObject *exc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
605 int ierr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
606 const Py_UNICODE *filename) |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
607 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
608 PyObject *name = filename ? |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
609 PyUnicode_FromUnicode(filename, wcslen(filename)) : |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
610 NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
611 PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
612 ierr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
613 name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
614 Py_XDECREF(name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
615 return ret; |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
616 } |
|
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
617 |
|
24423
3db261a93a5b
New functions for extension writers on Windows:
Thomas Heller <theller@ctypes.org>
parents:
24071
diff
changeset
|
618 PyObject *PyErr_SetExcFromWindowsErr(PyObject *exc, int ierr) |
|
3db261a93a5b
New functions for extension writers on Windows:
Thomas Heller <theller@ctypes.org>
parents:
24071
diff
changeset
|
619 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
620 return PyErr_SetExcFromWindowsErrWithFilename(exc, ierr, NULL); |
|
24423
3db261a93a5b
New functions for extension writers on Windows:
Thomas Heller <theller@ctypes.org>
parents:
24071
diff
changeset
|
621 } |
|
3db261a93a5b
New functions for extension writers on Windows:
Thomas Heller <theller@ctypes.org>
parents:
24071
diff
changeset
|
622 |
|
11801
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
623 PyObject *PyErr_SetFromWindowsErr(int ierr) |
|
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
624 { |
|
80944
bb94f6222fef
Issue #16719: Get rid of WindowsError. Use OSError instead
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80189
diff
changeset
|
625 return PyErr_SetExcFromWindowsErrWithFilename(PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
626 ierr, NULL); |
|
24423
3db261a93a5b
New functions for extension writers on Windows:
Thomas Heller <theller@ctypes.org>
parents:
24071
diff
changeset
|
627 } |
|
3db261a93a5b
New functions for extension writers on Windows:
Thomas Heller <theller@ctypes.org>
parents:
24071
diff
changeset
|
628 PyObject *PyErr_SetFromWindowsErrWithFilename( |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
629 int ierr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
630 const char *filename) |
|
24423
3db261a93a5b
New functions for extension writers on Windows:
Thomas Heller <theller@ctypes.org>
parents:
24071
diff
changeset
|
631 { |
|
67163
5605f6920b63
Issue #10780: PyErr_SetFromWindowsErrWithFilename() and
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65688
diff
changeset
|
632 PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
633 PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( |
|
80944
bb94f6222fef
Issue #16719: Get rid of WindowsError. Use OSError instead
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80189
diff
changeset
|
634 PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
635 ierr, name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
636 Py_XDECREF(name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
637 return result; |
|
11801
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
638 } |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
639 |
|
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
640 PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename( |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
641 int ierr, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
642 const Py_UNICODE *filename) |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
643 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
644 PyObject *name = filename ? |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
645 PyUnicode_FromUnicode(filename, wcslen(filename)) : |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
646 NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
647 PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( |
|
80944
bb94f6222fef
Issue #16719: Get rid of WindowsError. Use OSError instead
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80189
diff
changeset
|
648 PyExc_OSError, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
649 ierr, name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
650 Py_XDECREF(name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
651 return result; |
|
25535
861065256487
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Mark Hammond <mhammond@skippinet.com.au>
parents:
24423
diff
changeset
|
652 } |
|
11801
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
653 #endif /* MS_WINDOWS */ |
|
fe960ad3db65
Patch by Mark Hammond:
Guido van Rossum <guido@python.org>
parents:
10638
diff
changeset
|
654 |
|
76272
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
655 PyObject * |
|
84444
e3ec8b176a80
Issue #15767: Revert 3a50025f1900 for ModuleNotFoundError
Brett Cannon <brett@python.org>
parents:
84109
diff
changeset
|
656 PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path) |
|
76272
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
657 { |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
658 PyObject *args, *kwargs, *error; |
|
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
659 |
|
84444
e3ec8b176a80
Issue #15767: Revert 3a50025f1900 for ModuleNotFoundError
Brett Cannon <brett@python.org>
parents:
84109
diff
changeset
|
660 if (msg == NULL) |
|
76388
bf23a6c215f6
Fix email post-commit review comments.
Brian Curtin <brian@python.org>
parents:
76379
diff
changeset
|
661 return NULL; |
|
bf23a6c215f6
Fix email post-commit review comments.
Brian Curtin <brian@python.org>
parents:
76379
diff
changeset
|
662 |
| 76391 | 663 args = PyTuple_New(1); |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
664 if (args == NULL) |
|
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
665 return NULL; |
|
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
666 |
|
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
667 kwargs = PyDict_New(); |
|
76389
e8c87226bcb3
fix refcnt/style/debuging oversights
Benjamin Peterson <benjamin@python.org>
parents:
76388
diff
changeset
|
668 if (kwargs == NULL) { |
|
e8c87226bcb3
fix refcnt/style/debuging oversights
Benjamin Peterson <benjamin@python.org>
parents:
76388
diff
changeset
|
669 Py_DECREF(args); |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
670 return NULL; |
|
76389
e8c87226bcb3
fix refcnt/style/debuging oversights
Benjamin Peterson <benjamin@python.org>
parents:
76388
diff
changeset
|
671 } |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
672 |
|
76388
bf23a6c215f6
Fix email post-commit review comments.
Brian Curtin <brian@python.org>
parents:
76379
diff
changeset
|
673 if (name == NULL) { |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
674 name = Py_None; |
|
76388
bf23a6c215f6
Fix email post-commit review comments.
Brian Curtin <brian@python.org>
parents:
76379
diff
changeset
|
675 } |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
676 |
|
76388
bf23a6c215f6
Fix email post-commit review comments.
Brian Curtin <brian@python.org>
parents:
76379
diff
changeset
|
677 if (path == NULL) { |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
678 path = Py_None; |
|
76388
bf23a6c215f6
Fix email post-commit review comments.
Brian Curtin <brian@python.org>
parents:
76379
diff
changeset
|
679 } |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
680 |
|
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
681 Py_INCREF(msg); |
|
76389
e8c87226bcb3
fix refcnt/style/debuging oversights
Benjamin Peterson <benjamin@python.org>
parents:
76388
diff
changeset
|
682 PyTuple_SET_ITEM(args, 0, msg); |
|
84694
573f7d485ce8
Issue #18408: Fix PyErr_SetImportError(), handle PyDict_SetItemString() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84680
diff
changeset
|
683 |
|
573f7d485ce8
Issue #18408: Fix PyErr_SetImportError(), handle PyDict_SetItemString() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84680
diff
changeset
|
684 if (PyDict_SetItemString(kwargs, "name", name) < 0) |
|
573f7d485ce8
Issue #18408: Fix PyErr_SetImportError(), handle PyDict_SetItemString() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84680
diff
changeset
|
685 return NULL; |
|
573f7d485ce8
Issue #18408: Fix PyErr_SetImportError(), handle PyDict_SetItemString() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84680
diff
changeset
|
686 if (PyDict_SetItemString(kwargs, "path", path) < 0) |
|
573f7d485ce8
Issue #18408: Fix PyErr_SetImportError(), handle PyDict_SetItemString() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84680
diff
changeset
|
687 return NULL; |
|
76272
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
688 |
|
84444
e3ec8b176a80
Issue #15767: Revert 3a50025f1900 for ModuleNotFoundError
Brett Cannon <brett@python.org>
parents:
84109
diff
changeset
|
689 error = PyObject_Call(PyExc_ImportError, args, kwargs); |
|
76389
e8c87226bcb3
fix refcnt/style/debuging oversights
Benjamin Peterson <benjamin@python.org>
parents:
76388
diff
changeset
|
690 if (error != NULL) { |
|
e8c87226bcb3
fix refcnt/style/debuging oversights
Benjamin Peterson <benjamin@python.org>
parents:
76388
diff
changeset
|
691 PyErr_SetObject((PyObject *)Py_TYPE(error), error); |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
692 Py_DECREF(error); |
|
76272
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
693 } |
|
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
694 |
|
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
695 Py_DECREF(args); |
|
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
696 Py_DECREF(kwargs); |
|
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
697 |
|
76379
7a32b9380ffd
Fix #14600. Correct reference handling and naming of ImportError convenience function
Brian Curtin <brian@python.org>
parents:
76272
diff
changeset
|
698 return NULL; |
|
76272
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
699 } |
|
6825fd9b00ed
Issue #1559549: Add 'name' and 'path' attributes to ImportError.
Brett Cannon <brett@python.org>
parents:
74009
diff
changeset
|
700 |
| 22 | 701 void |
|
42794
84618b2064c1
Add const to some strings that are not modified
Neal Norwitz <nnorwitz@gmail.com>
parents:
42793
diff
changeset
|
702 _PyErr_BadInternalCall(const char *filename, int lineno) |
|
14170
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
703 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
704 PyErr_Format(PyExc_SystemError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
705 "%s:%d: bad argument to internal function", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
706 filename, lineno); |
|
14170
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
707 } |
|
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
708 |
|
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
709 /* Remove the preprocessor macro for PyErr_BadInternalCall() so that we can |
|
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
710 export the entry point for existing object code: */ |
|
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
711 #undef PyErr_BadInternalCall |
|
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
712 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13578
diff
changeset
|
713 PyErr_BadInternalCall(void) |
| 22 | 714 { |
|
84574
2f7c4df5cc46
Issue #18408: errors.c: in debug mode, calling PyErr_BadInternalCall() now
Victor Stinner <victor.stinner@gmail.com>
parents:
84444
diff
changeset
|
715 assert(0 && "bad argument to internal function"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
716 PyErr_Format(PyExc_SystemError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
717 "bad argument to internal function"); |
| 22 | 718 } |
|
14170
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
719 #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) |
|
019265b3a856
Improve the exceptions raised by PyErr_BadInternalCall(); adding the
Fred Drake <fdrake@acm.org>
parents:
14066
diff
changeset
|
720 |
|
5105
00fd6857f76b
Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents:
4654
diff
changeset
|
721 |
|
00fd6857f76b
Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents:
4654
diff
changeset
|
722 |
|
00fd6857f76b
Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents:
4654
diff
changeset
|
723 PyObject * |
|
00fd6857f76b
Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents:
4654
diff
changeset
|
724 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
|
725 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
726 va_list vargs; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
727 PyObject* string; |
|
14335
951eb3af3494
code part of patch #100895 by Fredrik Lundh
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14330
diff
changeset
|
728 |
|
951eb3af3494
code part of patch #100895 by Fredrik Lundh
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14330
diff
changeset
|
729 #ifdef HAVE_STDARG_PROTOTYPES |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
730 va_start(vargs, format); |
|
14335
951eb3af3494
code part of patch #100895 by Fredrik Lundh
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14330
diff
changeset
|
731 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
732 va_start(vargs); |
|
14335
951eb3af3494
code part of patch #100895 by Fredrik Lundh
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14330
diff
changeset
|
733 #endif |
|
5105
00fd6857f76b
Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents:
4654
diff
changeset
|
734 |
|
84704
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
735 #ifdef Py_DEBUG |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
736 /* in debug mode, PyEval_EvalFrameEx() fails with an assertion error |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
737 if an exception is set when it is called */ |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
738 PyErr_Clear(); |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
739 #endif |
|
48a869a39e2d
Issue #18408: PyEval_EvalFrameEx() and PyEval_CallObjectWithKeywords() now fail
Victor Stinner <victor.stinner@gmail.com>
parents:
84694
diff
changeset
|
740 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
741 string = PyUnicode_FromFormatV(format, vargs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
742 PyErr_SetObject(exception, string); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
743 Py_XDECREF(string); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
744 va_end(vargs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
745 return NULL; |
|
5105
00fd6857f76b
Added convenience function PyErr_Format(exception, formatstring, ...) -> NULL.
Guido van Rossum <guido@python.org>
parents:
4654
diff
changeset
|
746 } |
|
6319
b7f0b98f5325
New API PyErr_NewException(name, base, dict) to create simple new exceptions.
Guido van Rossum <guido@python.org>
parents:
6190
diff
changeset
|
747 |
|
b7f0b98f5325
New API PyErr_NewException(name, base, dict) to create simple new exceptions.
Guido van Rossum <guido@python.org>
parents:
6190
diff
changeset
|
748 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
749 |
|
6319
b7f0b98f5325
New API PyErr_NewException(name, base, dict) to create simple new exceptions.
Guido van Rossum <guido@python.org>
parents:
6190
diff
changeset
|
750 PyObject * |
|
42794
84618b2064c1
Add const to some strings that are not modified
Neal Norwitz <nnorwitz@gmail.com>
parents:
42793
diff
changeset
|
751 PyErr_NewException(const char *name, PyObject *base, PyObject *dict) |
|
6319
b7f0b98f5325
New API PyErr_NewException(name, base, dict) to create simple new exceptions.
Guido van Rossum <guido@python.org>
parents:
6190
diff
changeset
|
752 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
753 const char *dot; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
754 PyObject *modulename = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
755 PyObject *classname = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
756 PyObject *mydict = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
757 PyObject *bases = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
758 PyObject *result = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
759 dot = strrchr(name, '.'); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
760 if (dot == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
761 PyErr_SetString(PyExc_SystemError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
762 "PyErr_NewException: name must be module.class"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
763 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
764 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
765 if (base == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
766 base = PyExc_Exception; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
767 if (dict == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
768 dict = mydict = PyDict_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
769 if (dict == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
770 goto failure; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
771 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
772 if (PyDict_GetItemString(dict, "__module__") == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
773 modulename = PyUnicode_FromStringAndSize(name, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
774 (Py_ssize_t)(dot-name)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
775 if (modulename == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
776 goto failure; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
777 if (PyDict_SetItemString(dict, "__module__", modulename) != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
778 goto failure; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
779 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
780 if (PyTuple_Check(base)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
781 bases = base; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
782 /* INCREF as we create a new ref in the else branch */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
783 Py_INCREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
784 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
785 bases = PyTuple_Pack(1, base); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
786 if (bases == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
787 goto failure; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
788 } |
|
73949
021e5bb297d1
Issue #13575: there is only one class type.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
72965
diff
changeset
|
789 /* Create a real class. */ |
|
62155
600c23127207
Issue #8848: U / U# formats of Py_BuildValue() are just alias to s / s#
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61555
diff
changeset
|
790 result = PyObject_CallFunction((PyObject *)&PyType_Type, "sOO", |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
791 dot+1, bases, dict); |
|
6319
b7f0b98f5325
New API PyErr_NewException(name, base, dict) to create simple new exceptions.
Guido van Rossum <guido@python.org>
parents:
6190
diff
changeset
|
792 failure: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
793 Py_XDECREF(bases); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
794 Py_XDECREF(mydict); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
795 Py_XDECREF(classname); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
796 Py_XDECREF(modulename); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
797 return result; |
|
6319
b7f0b98f5325
New API PyErr_NewException(name, base, dict) to create simple new exceptions.
Guido van Rossum <guido@python.org>
parents:
6190
diff
changeset
|
798 } |
|
14330
6dee1985c681
refactor __del__ exception handler into PyErr_WriteUnraisable
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14170
diff
changeset
|
799 |
|
57962
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
800 |
|
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
801 /* Create an exception with docstring */ |
|
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
802 PyObject * |
|
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
803 PyErr_NewExceptionWithDoc(const char *name, const char *doc, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
804 PyObject *base, PyObject *dict) |
|
57962
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
805 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
806 int result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
807 PyObject *ret = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
808 PyObject *mydict = NULL; /* points to the dict only if we create it */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
809 PyObject *docobj; |
|
57962
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
810 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
811 if (dict == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
812 dict = mydict = PyDict_New(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
813 if (dict == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
814 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
815 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
816 } |
|
57962
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
817 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
818 if (doc != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
819 docobj = PyUnicode_FromString(doc); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
820 if (docobj == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
821 goto failure; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
822 result = PyDict_SetItemString(dict, "__doc__", docobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
823 Py_DECREF(docobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
824 if (result < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
825 goto failure; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
826 } |
|
57962
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
827 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
828 ret = PyErr_NewException(name, base, dict); |
|
57962
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
829 failure: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
830 Py_XDECREF(mydict); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61384
diff
changeset
|
831 return ret; |
|
57962
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
832 } |
|
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
833 |
|
c1972eef3579
Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54129
diff
changeset
|
834 |
|
14330
6dee1985c681
refactor __del__ exception handler into PyErr_WriteUnraisable
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14170
diff
changeset
|
835 /* Call when an exception has occurred but there is no way for Python |
|
6dee1985c681
refactor __del__ exception handler into PyErr_WriteUnraisable
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14170
diff
changeset
|
836 to handle it. Examples: exception in __del__ or during GC. */ |
|
6dee1985c681
refactor __del__ exception handler into PyErr_WriteUnraisable
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14170
diff
changeset
|
837 void |
|
6dee1985c681
refactor __del__ exception handler into PyErr_WriteUnraisable
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14170
diff
changeset
|
838 PyErr_WriteUnraisable(PyObject *obj) |
|
6dee1985c681
refactor __del__ exception handler into PyErr_WriteUnraisable
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14170
diff
changeset
|
839 { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72893
diff
changeset
|
840 _Py_IDENTIFIER(__module__); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
841 PyObject *f, *t, *v, *tb; |
|
85415
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
842 PyObject *moduleName = NULL; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
843 char* className; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
844 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
845 PyErr_Fetch(&t, &v, &tb); |
|
85415
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
846 |
|
86974
954167ce92a3
Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents:
86257
diff
changeset
|
847 f = _PySys_GetObjectId(&_PyId_stderr); |
|
85415
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
848 if (f == NULL || f == Py_None) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
849 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
850 |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
851 if (obj) { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
852 if (PyFile_WriteString("Exception ignored in: ", f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
853 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
854 if (PyFile_WriteObject(obj, f, 0) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
855 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
856 if (PyFile_WriteString("\n", f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
857 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
858 } |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
859 |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
860 if (PyTraceBack_Print(tb, f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
861 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
862 |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
863 if (!t) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
864 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
865 |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
866 assert(PyExceptionClass_Check(t)); |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
867 className = PyExceptionClass_Name(t); |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
868 if (className != NULL) { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
869 char *dot = strrchr(className, '.'); |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
870 if (dot != NULL) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
871 className = dot+1; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
872 } |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
873 |
|
85415
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
874 moduleName = _PyObject_GetAttrId(t, &PyId___module__); |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
875 if (moduleName == NULL) { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
876 PyErr_Clear(); |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
877 if (PyFile_WriteString("<unknown>", f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
878 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
879 } |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
880 else { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
881 if (PyUnicode_CompareWithASCIIString(moduleName, "builtins") != 0) { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
882 if (PyFile_WriteObject(moduleName, f, Py_PRINT_RAW) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
883 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
884 if (PyFile_WriteString(".", f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
885 goto done; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
886 } |
|
85415
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
887 } |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
888 if (className == NULL) { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
889 if (PyFile_WriteString("<unknown>", f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
890 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
891 } |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
892 else { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
893 if (PyFile_WriteString(className, f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
894 goto done; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
895 } |
|
85415
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
896 |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
897 if (v && v != Py_None) { |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
898 if (PyFile_WriteString(": ", f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
899 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
900 if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
901 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
902 } |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
903 if (PyFile_WriteString("\n", f) < 0) |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
904 goto done; |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
905 |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
906 done: |
|
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
907 Py_XDECREF(moduleName); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
908 Py_XDECREF(t); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
909 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
910 Py_XDECREF(tb); |
|
85415
e63f19d0a651
Issue #18664, #18408: Rewrite PyErr_WriteUnraisable() to handle errors
Victor Stinner <vstinner@wyplay.com>
parents:
84794
diff
changeset
|
911 PyErr_Clear(); /* Just in case */ |
|
14330
6dee1985c681
refactor __del__ exception handler into PyErr_WriteUnraisable
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
14170
diff
changeset
|
912 } |
| 15591 | 913 |
|
30781
74747f62f286
Made function declaration a proper C prototype
Armin Rigo <arigo@tunes.org>
parents:
30683
diff
changeset
|
914 extern PyObject *PyModule_GetWarningsModule(void); |
| 15591 | 915 |
|
16850
2d4da6cfee61
Add PyErr_WarnExplicit(), which calls warnings.warn_explicit(), with
Guido van Rossum <guido@python.org>
parents:
16838
diff
changeset
|
916 |
|
64859
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
917 void |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
918 PyErr_SyntaxLocation(const char *filename, int lineno) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
919 { |
|
64859
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
920 PyErr_SyntaxLocationEx(filename, lineno, -1); |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
921 } |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
922 |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
923 |
|
22121
d4406fbfcb4e
Patch #50002: Display line information for bad \x escapes:
Martin v. Löwis <martin@v.loewis.de>
parents:
20221
diff
changeset
|
924 /* Set file and line information for the current exception. |
|
d4406fbfcb4e
Patch #50002: Display line information for bad \x escapes:
Martin v. Löwis <martin@v.loewis.de>
parents:
20221
diff
changeset
|
925 If the exception is not a SyntaxError, also sets additional attributes |
|
d4406fbfcb4e
Patch #50002: Display line information for bad \x escapes:
Martin v. Löwis <martin@v.loewis.de>
parents:
20221
diff
changeset
|
926 to make printing of exceptions believe it is a syntax error. */ |
|
16850
2d4da6cfee61
Add PyErr_WarnExplicit(), which calls warnings.warn_explicit(), with
Guido van Rossum <guido@python.org>
parents:
16838
diff
changeset
|
927 |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
928 void |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
929 PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
930 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
931 PyObject *exc, *v, *tb, *tmp; |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
932 _Py_IDENTIFIER(filename); |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
933 _Py_IDENTIFIER(lineno); |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
934 _Py_IDENTIFIER(msg); |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
935 _Py_IDENTIFIER(offset); |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
936 _Py_IDENTIFIER(print_file_and_line); |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
937 _Py_IDENTIFIER(text); |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
938 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
939 /* add attributes for the line number and filename for the error */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
940 PyErr_Fetch(&exc, &v, &tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
941 PyErr_NormalizeException(&exc, &v, &tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
942 /* XXX check that it is, indeed, a syntax error. It might not |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
943 * be, though. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
944 tmp = PyLong_FromLong(lineno); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
945 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
946 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
947 else { |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
948 if (_PyObject_SetAttrId(v, &PyId_lineno, tmp)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
949 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
950 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
951 } |
|
64859
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
952 if (col_offset >= 0) { |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
953 tmp = PyLong_FromLong(col_offset); |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
954 if (tmp == NULL) |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
955 PyErr_Clear(); |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
956 else { |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
957 if (_PyObject_SetAttrId(v, &PyId_offset, tmp)) |
|
64859
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
958 PyErr_Clear(); |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
959 Py_DECREF(tmp); |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
960 } |
|
00e4ce31d404
add PyErr_SyntaxLocationEx, to support adding a column offset
Benjamin Peterson <benjamin@python.org>
parents:
62155
diff
changeset
|
961 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
962 if (filename != NULL) { |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
963 if (_PyObject_SetAttrId(v, &PyId_filename, filename)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
964 PyErr_Clear(); |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
965 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
966 tmp = PyErr_ProgramTextObject(filename, lineno); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
967 if (tmp) { |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
968 if (_PyObject_SetAttrId(v, &PyId_text, tmp)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
969 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
970 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
971 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
972 } |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
973 if (_PyObject_SetAttrId(v, &PyId_offset, Py_None)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
974 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
975 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
976 if (exc != PyExc_SyntaxError) { |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
977 if (!_PyObject_HasAttrId(v, &PyId_msg)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
978 tmp = PyObject_Str(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
979 if (tmp) { |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
980 if (_PyObject_SetAttrId(v, &PyId_msg, tmp)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
981 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
982 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
983 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
984 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
985 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
986 } |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
987 if (!_PyObject_HasAttrId(v, &PyId_print_file_and_line)) { |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
988 if (_PyObject_SetAttrId(v, &PyId_print_file_and_line, |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
989 Py_None)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
990 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
991 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
992 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
993 PyErr_Restore(exc, v, tb); |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
994 } |
|
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
995 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
996 void |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
997 PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
998 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
999 PyObject *fileobj; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1000 if (filename != NULL) { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1001 fileobj = PyUnicode_DecodeFSDefault(filename); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1002 if (fileobj == NULL) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1003 PyErr_Clear(); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1004 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1005 else |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1006 fileobj = NULL; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1007 PyErr_SyntaxLocationObject(fileobj, lineno, col_offset); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1008 Py_XDECREF(fileobj); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1009 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1010 |
|
43524
2f30bfb7c738
Minor cleanup of the comment for PyErr_ProgramText() and a tweak to the code
Guido van Rossum <guido@python.org>
parents:
43292
diff
changeset
|
1011 /* Attempt to load the line of text that the exception refers to. If it |
|
2f30bfb7c738
Minor cleanup of the comment for PyErr_ProgramText() and a tweak to the code
Guido van Rossum <guido@python.org>
parents:
43292
diff
changeset
|
1012 fails, it will return NULL but will not set an exception. |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
1013 |
|
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
1014 XXX The functionality of this function is quite similar to the |
|
43524
2f30bfb7c738
Minor cleanup of the comment for PyErr_ProgramText() and a tweak to the code
Guido van Rossum <guido@python.org>
parents:
43292
diff
changeset
|
1015 functionality in tb_displayline() in traceback.c. */ |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
1016 |
|
86257
eeec58c57964
Don't export internal symbols ("make smelly")
Antoine Pitrou <solipsis@pitrou.net>
parents:
85502
diff
changeset
|
1017 static PyObject * |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1018 err_programtext(FILE *fp, int lineno) |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
1019 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1020 int i; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1021 char linebuf[1000]; |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
1022 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1023 if (fp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1024 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1025 for (i = 0; i < lineno; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1026 char *pLastChar = &linebuf[sizeof(linebuf) - 2]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1027 do { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1028 *pLastChar = '\0'; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1029 if (Py_UniversalNewlineFgets(linebuf, sizeof linebuf, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1030 fp, NULL) == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1031 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1032 /* fgets read *something*; if it didn't get as |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1033 far as pLastChar, it must have found a newline |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1034 or hit the end of the file; if pLastChar is \n, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1035 it obviously found a newline; else we haven't |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1036 yet seen a newline, so must continue */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1037 } while (*pLastChar != '\0' && *pLastChar != '\n'); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1038 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1039 fclose(fp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1040 if (i == lineno) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1041 char *p = linebuf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1042 PyObject *res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1043 while (*p == ' ' || *p == '\t' || *p == '\014') |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1044 p++; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1045 res = PyUnicode_FromString(p); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1046 if (res == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1047 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1048 return res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1049 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54129
diff
changeset
|
1050 return NULL; |
|
16838
09f6c1372056
Improve SyntaxErrors for bad future statements. Set file and location
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15591
diff
changeset
|
1051 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
1052 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1053 PyObject * |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1054 PyErr_ProgramText(const char *filename, int lineno) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1055 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1056 FILE *fp; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1057 if (filename == NULL || *filename == '\0' || lineno <= 0) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1058 return NULL; |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85417
diff
changeset
|
1059 fp = _Py_fopen(filename, "r" PY_STDIOTEXTMODE); |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1060 return err_programtext(fp, lineno); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1061 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1062 |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1063 PyObject * |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1064 PyErr_ProgramTextObject(PyObject *filename, int lineno) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1065 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1066 FILE *fp; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1067 if (filename == NULL || lineno <= 0) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1068 return NULL; |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85417
diff
changeset
|
1069 fp = _Py_fopen_obj(filename, "r" PY_STDIOTEXTMODE); |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1070 return err_programtext(fp, lineno); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1071 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85415
diff
changeset
|
1072 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
1073 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
1074 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37871
diff
changeset
|
1075 #endif |
