Mercurial > cpython-lru_cache-weakref
annotate Python/traceback.c @ 62197:2cfe15b3cdf5
PyArg_Parse*("Z#") raises an error for unknown type
instead of ignoring the error and leave the pointer to the string and the size
unchanged (not initialized).
Fix also the type in the error message of "Z", "Z#" and "Y" formats.
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Tue, 08 Jun 2010 21:45:51 +0000 |
| parents | cab14be0ada1 |
| children | 907f564476be |
| rev | line source |
|---|---|
| 145 | 1 |
| 86 | 2 /* Traceback implementation */ |
| 3 | |
| 5372 | 4 #include "Python.h" |
| 86 | 5 |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31739
diff
changeset
|
6 #include "code.h" |
| 86 | 7 #include "frameobject.h" |
| 8 #include "structmember.h" | |
|
674
4e2d239dc64c
Move printing of filename and lineno to tb_displayline.
Guido van Rossum <guido@python.org>
parents:
597
diff
changeset
|
9 #include "osdefs.h" |
|
31739
49ec0d8f08ec
Moved tracebackobject to traceback.h, Closes SF Bug #497067
Nicholas Bastin <nick.bastin@gmail.com>
parents:
30968
diff
changeset
|
10 #include "traceback.h" |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
11 #ifdef HAVE_FCNTL_H |
|
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
12 #include <fcntl.h> |
|
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
13 #endif |
| 86 | 14 |
|
31739
49ec0d8f08ec
Moved tracebackobject to traceback.h, Closes SF Bug #497067
Nicholas Bastin <nick.bastin@gmail.com>
parents:
30968
diff
changeset
|
15 #define OFF(x) offsetof(PyTracebackObject, x) |
| 86 | 16 |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
17 /* Method from Parser/tokenizer.c */ |
|
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
18 extern char * PyTokenizer_FindEncoding(int); |
|
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
19 |
|
42593
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
20 static PyObject * |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
21 tb_dir(PyTracebackObject *self) |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
22 { |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
23 return Py_BuildValue("[ssss]", "tb_frame", "tb_next", |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
24 "tb_lasti", "tb_lineno"); |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
25 } |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
26 |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
27 static PyMethodDef tb_methods[] = { |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
28 {"__dir__", (PyCFunction)tb_dir, METH_NOARGS}, |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
29 {NULL, NULL, 0, NULL}, |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
30 }; |
|
5391b5f8cd7a
Bug #1772489: make dir() work on traceback objects again.
Collin Winter <collinw@gmail.com>
parents:
42591
diff
changeset
|
31 |
|
42537
74a3c6826683
Remove support for __members__ and __methods__. There still might be
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
32 static PyMemberDef tb_memberlist[] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
33 {"tb_next", T_OBJECT, OFF(tb_next), READONLY}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
34 {"tb_frame", T_OBJECT, OFF(tb_frame), READONLY}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
35 {"tb_lasti", T_INT, OFF(tb_lasti), READONLY}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
36 {"tb_lineno", T_INT, OFF(tb_lineno), READONLY}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
37 {NULL} /* Sentinel */ |
| 86 | 38 }; |
| 39 | |
| 40 static void | |
|
31739
49ec0d8f08ec
Moved tracebackobject to traceback.h, Closes SF Bug #497067
Nicholas Bastin <nick.bastin@gmail.com>
parents:
30968
diff
changeset
|
41 tb_dealloc(PyTracebackObject *tb) |
| 86 | 42 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
43 PyObject_GC_UnTrack(tb); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
44 Py_TRASHCAN_SAFE_BEGIN(tb) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
45 Py_XDECREF(tb->tb_next); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
46 Py_XDECREF(tb->tb_frame); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
47 PyObject_GC_Del(tb); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
48 Py_TRASHCAN_SAFE_END(tb) |
| 86 | 49 } |
| 50 | |
|
20623
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
51 static int |
|
31739
49ec0d8f08ec
Moved tracebackobject to traceback.h, Closes SF Bug #497067
Nicholas Bastin <nick.bastin@gmail.com>
parents:
30968
diff
changeset
|
52 tb_traverse(PyTracebackObject *tb, visitproc visit, void *arg) |
|
20623
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
53 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
54 Py_VISIT(tb->tb_next); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
55 Py_VISIT(tb->tb_frame); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
56 return 0; |
|
20623
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
57 } |
|
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
58 |
|
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
59 static void |
|
31739
49ec0d8f08ec
Moved tracebackobject to traceback.h, Closes SF Bug #497067
Nicholas Bastin <nick.bastin@gmail.com>
parents:
30968
diff
changeset
|
60 tb_clear(PyTracebackObject *tb) |
|
20623
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
61 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
62 Py_CLEAR(tb->tb_next); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
63 Py_CLEAR(tb->tb_frame); |
|
20623
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
64 } |
|
4fb7727e4f47
Make traceback objects collectable.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20618
diff
changeset
|
65 |
|
20618
57b51966a4f1
Removed two pointless and obfuscating macros.
Tim Peters <tim.peters@gmail.com>
parents:
14375
diff
changeset
|
66 PyTypeObject PyTraceBack_Type = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
67 PyVarObject_HEAD_INIT(&PyType_Type, 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
68 "traceback", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
69 sizeof(PyTracebackObject), |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
70 0, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
71 (destructor)tb_dealloc, /*tp_dealloc*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
72 0, /*tp_print*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
73 0, /*tp_getattr*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
74 0, /*tp_setattr*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
75 0, /*tp_reserved*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
76 0, /*tp_repr*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
77 0, /*tp_as_number*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
78 0, /*tp_as_sequence*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
79 0, /*tp_as_mapping*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
80 0, /* tp_hash */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
81 0, /* tp_call */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
82 0, /* tp_str */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
83 PyObject_GenericGetAttr, /* tp_getattro */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
84 0, /* tp_setattro */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
85 0, /* tp_as_buffer */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
86 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
87 0, /* tp_doc */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
88 (traverseproc)tb_traverse, /* tp_traverse */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
89 (inquiry)tb_clear, /* tp_clear */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
90 0, /* tp_richcompare */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
91 0, /* tp_weaklistoffset */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
92 0, /* tp_iter */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
93 0, /* tp_iternext */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
94 tb_methods, /* tp_methods */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
95 tb_memberlist, /* tp_members */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
96 0, /* tp_getset */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
97 0, /* tp_base */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
98 0, /* tp_dict */ |
| 86 | 99 }; |
| 100 | |
|
31739
49ec0d8f08ec
Moved tracebackobject to traceback.h, Closes SF Bug #497067
Nicholas Bastin <nick.bastin@gmail.com>
parents:
30968
diff
changeset
|
101 static PyTracebackObject * |
|
49ec0d8f08ec
Moved tracebackobject to traceback.h, Closes SF Bug #497067
Nicholas Bastin <nick.bastin@gmail.com>
parents:
30968
diff
changeset
|
102 newtracebackobject(PyTracebackObject *next, PyFrameObject *frame) |
| 86 | 103 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
104 PyTracebackObject *tb; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
105 if ((next != NULL && !PyTraceBack_Check(next)) || |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
106 frame == NULL || !PyFrame_Check(frame)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
107 PyErr_BadInternalCall(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
108 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
109 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
110 tb = PyObject_GC_New(PyTracebackObject, &PyTraceBack_Type); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
111 if (tb != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
112 Py_XINCREF(next); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
113 tb->tb_next = next; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
114 Py_XINCREF(frame); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
115 tb->tb_frame = frame; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
116 tb->tb_lasti = frame->f_lasti; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
117 tb->tb_lineno = PyFrame_GetLineNumber(frame); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
118 PyObject_GC_Track(tb); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
119 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
120 return tb; |
| 86 | 121 } |
| 122 | |
| 123 int | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
124 PyTraceBack_Here(PyFrameObject *frame) |
| 86 | 125 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
126 PyThreadState *tstate = PyThreadState_GET(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
127 PyTracebackObject *oldtb = (PyTracebackObject *) tstate->curexc_traceback; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
128 PyTracebackObject *tb = newtracebackobject(oldtb, frame); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
129 if (tb == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
130 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
131 tstate->curexc_traceback = (PyObject *)tb; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
132 Py_XDECREF(oldtb); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
133 return 0; |
| 86 | 134 } |
| 135 | |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
136 static int |
|
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
137 _Py_FindSourceFile(const char* filename, char* namebuf, size_t namelen, int open_flags) |
|
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
138 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
139 int i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
140 int fd = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
141 PyObject *v; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
142 Py_ssize_t _npath; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
143 int npath; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
144 size_t taillen; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
145 PyObject *syspath; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
146 const char* path; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
147 const char* tail; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
148 Py_ssize_t len; |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
149 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
150 /* Search tail of filename in sys.path before giving up */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
151 tail = strrchr(filename, SEP); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
152 if (tail == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
153 tail = filename; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
154 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
155 tail++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
156 taillen = strlen(tail); |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
157 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
158 syspath = PySys_GetObject("path"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
159 if (syspath == NULL || !PyList_Check(syspath)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
160 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
161 _npath = PyList_Size(syspath); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
162 npath = Py_SAFE_DOWNCAST(_npath, Py_ssize_t, int); |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
163 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
164 for (i = 0; i < npath; i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
165 v = PyList_GetItem(syspath, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
166 if (v == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
167 PyErr_Clear(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
168 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
169 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
170 if (!PyUnicode_Check(v)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
171 continue; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
172 path = _PyUnicode_AsStringAndSize(v, &len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
173 if (len + 1 + (Py_ssize_t)taillen >= (Py_ssize_t)namelen - 1) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
174 continue; /* Too long */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
175 strcpy(namebuf, path); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
176 if (strlen(namebuf) != len) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
177 continue; /* v contains '\0' */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
178 if (len > 0 && namebuf[len-1] != SEP) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
179 namebuf[len++] = SEP; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
180 strcpy(namebuf+len, tail); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
181 Py_BEGIN_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
182 fd = open(namebuf, open_flags); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
183 Py_END_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
184 if (0 <= fd) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
185 return fd; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
186 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
187 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
188 return -1; |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
189 } |
|
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
190 |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
191 int |
|
48499
de0bf60f1245
Merged revisions 64722,64729,64753,64845-64846,64849,64871,64880-64882,64885,64888,64897,64900-64901,64915,64926-64929,64938-64941,64944,64961,64966,64973 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48474
diff
changeset
|
192 _Py_DisplaySourceLine(PyObject *f, const char *filename, int lineno, int indent) |
| 86 | 193 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
194 int err = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
195 int fd; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
196 int i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
197 char *found_encoding; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
198 char *encoding; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
199 PyObject *fob = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
200 PyObject *lineobj = NULL; |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
201 #ifdef O_BINARY |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
202 const int open_flags = O_RDONLY | O_BINARY; /* necessary for Windows */ |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
203 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
204 const int open_flags = O_RDONLY; |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
205 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
206 char buf[MAXPATHLEN+1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
207 Py_UNICODE *u, *p; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
208 Py_ssize_t len; |
|
44742
14d4104976fc
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44157
diff
changeset
|
209 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
210 /* open the file */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
211 if (filename == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
212 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
213 Py_BEGIN_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
214 fd = open(filename, open_flags); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
215 Py_END_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
216 if (fd < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
217 fd = _Py_FindSourceFile(filename, buf, sizeof(buf), open_flags); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
218 if (fd < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
219 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
220 filename = buf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
221 } |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
222 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
223 /* use the right encoding to decode the file as unicode */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
224 found_encoding = PyTokenizer_FindEncoding(fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
225 encoding = (found_encoding != NULL) ? found_encoding : |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
226 (char*)PyUnicode_GetDefaultEncoding(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
227 lseek(fd, 0, 0); /* Reset position */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
228 fob = PyFile_FromFd(fd, (char*)filename, "r", -1, (char*)encoding, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
229 NULL, NULL, 1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
230 PyMem_FREE(found_encoding); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
231 if (fob == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
232 PyErr_Clear(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
233 close(fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
234 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
235 } |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
236 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
237 /* get the line number lineno */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
238 for (i = 0; i < lineno; i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
239 Py_XDECREF(lineobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
240 lineobj = PyFile_GetLine(fob, -1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
241 if (!lineobj) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
242 err = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
243 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
244 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
245 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
246 Py_DECREF(fob); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
247 if (!lineobj || !PyUnicode_Check(lineobj)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
248 Py_XDECREF(lineobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
249 return err; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
250 } |
|
49484
0b7e023803fb
Issues #2384 and #3975: Tracebacks were not correctly printed when the source file
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48660
diff
changeset
|
251 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
252 /* remove the indentation of the line */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
253 u = PyUnicode_AS_UNICODE(lineobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
254 len = PyUnicode_GET_SIZE(lineobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
255 for (p=u; *p == ' ' || *p == '\t' || *p == '\014'; p++) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
256 len--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
257 if (u != p) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
258 PyObject *truncated; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
259 truncated = PyUnicode_FromUnicode(p, len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
260 if (truncated) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
261 Py_DECREF(lineobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
262 lineobj = truncated; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
263 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
264 PyErr_Clear(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
265 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
266 } |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
267 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
268 /* Write some spaces before the line */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
269 strcpy(buf, " "); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
270 assert (strlen(buf) == 10); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
271 while (indent > 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
272 if(indent < 10) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
273 buf[indent] = '\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
274 err = PyFile_WriteString(buf, f); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
275 if (err != 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
276 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
277 indent -= 10; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
278 } |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47301
diff
changeset
|
279 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
280 /* finally display the line */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
281 if (err == 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
282 err = PyFile_WriteObject(lineobj, f, Py_PRINT_RAW); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
283 Py_DECREF(lineobj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
284 if (err == 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
285 err = PyFile_WriteString("\n", f); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
286 return err; |
| 86 | 287 } |
| 288 | |
|
5608
79e49cbce2ef
PyFile_WriteString now returns an error indicator instead of calling
Guido van Rossum <guido@python.org>
parents:
5405
diff
changeset
|
289 static int |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
290 tb_displayline(PyObject *f, const char *filename, int lineno, const char *name) |
| 86 | 291 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
292 int err = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
293 char linebuf[2000]; |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
294 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
295 if (filename == NULL || name == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
296 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
297 /* This is needed by Emacs' compile command */ |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
298 #define FMT " File \"%.500s\", line %d, in %.500s\n" |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
299 PyOS_snprintf(linebuf, sizeof(linebuf), FMT, filename, lineno, name); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
300 err = PyFile_WriteString(linebuf, f); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
301 if (err != 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
302 return err; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
303 return _Py_DisplaySourceLine(f, filename, lineno, 4); |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
304 } |
|
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
305 |
|
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
306 static int |
|
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
307 tb_printinternal(PyTracebackObject *tb, PyObject *f, long limit) |
|
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44742
diff
changeset
|
308 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
309 int err = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
310 long depth = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
311 PyTracebackObject *tb1 = tb; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
312 while (tb1 != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
313 depth++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
314 tb1 = tb1->tb_next; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
315 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
316 while (tb != NULL && err == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
317 if (depth <= limit) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
318 err = tb_displayline(f, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
319 _PyUnicode_AsString( |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
320 tb->tb_frame->f_code->co_filename), |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
321 tb->tb_lineno, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
322 _PyUnicode_AsString(tb->tb_frame->f_code->co_name)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
323 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
324 depth--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
325 tb = tb->tb_next; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
326 if (err == 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
327 err = PyErr_CheckSignals(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
328 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
329 return err; |
| 86 | 330 } |
| 331 | |
|
44157
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
332 #define PyTraceBack_LIMIT 1000 |
|
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
333 |
| 86 | 334 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
335 PyTraceBack_Print(PyObject *v, PyObject *f) |
| 86 | 336 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
337 int err; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
338 PyObject *limitv; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
339 long limit = PyTraceBack_LIMIT; |
|
44157
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
340 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
341 if (v == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
342 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
343 if (!PyTraceBack_Check(v)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
344 PyErr_BadInternalCall(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
345 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
346 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
347 limitv = PySys_GetObject("tracebacklimit"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
348 if (limitv) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
349 PyObject *exc_type, *exc_value, *exc_tb; |
|
44157
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
350 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
351 PyErr_Fetch(&exc_type, &exc_value, &exc_tb); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
352 limit = PyLong_AsLong(limitv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
353 if (limit == -1 && PyErr_Occurred()) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
354 if (PyErr_ExceptionMatches(PyExc_OverflowError)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
355 limit = PyTraceBack_LIMIT; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
356 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
357 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
358 Py_XDECREF(exc_type); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
359 Py_XDECREF(exc_value); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
360 Py_XDECREF(exc_tb); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
361 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
362 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
363 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
364 else if (limit <= 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
365 limit = PyTraceBack_LIMIT; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
366 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
367 PyErr_Restore(exc_type, exc_value, exc_tb); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
368 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
369 err = PyFile_WriteString("Traceback (most recent call last):\n", f); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
370 if (!err) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
371 err = tb_printinternal((PyTracebackObject *)v, f, limit); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55372
diff
changeset
|
372 return err; |
| 86 | 373 } |
