Mercurial > cpython-lru_cache-weakref
annotate Python/traceback.c @ 62198:b2c1995633bd 3.1
Merged revisions 81849 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r81849 | victor.stinner | 2010-06-08 23:45:51 +0200 (mar., 08 juin 2010) | 7 lines
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:46:32 +0000 |
| parents | f197407bdba2 |
| children | fa830371c724 |
| 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[] = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
33 {"tb_next", T_OBJECT, OFF(tb_next), READONLY}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
34 {"tb_frame", T_OBJECT, OFF(tb_frame), READONLY}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
35 {"tb_lasti", T_INT, OFF(tb_lasti), READONLY}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
36 {"tb_lineno", T_INT, OFF(tb_lineno), READONLY}, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
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 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
43 PyObject_GC_UnTrack(tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
44 Py_TRASHCAN_SAFE_BEGIN(tb) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
45 Py_XDECREF(tb->tb_next); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
46 Py_XDECREF(tb->tb_frame); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
47 PyObject_GC_Del(tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
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 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
54 Py_VISIT(tb->tb_next); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
55 Py_VISIT(tb->tb_frame); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
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 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
62 Py_CLEAR(tb->tb_next); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
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 = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
67 PyVarObject_HEAD_INIT(&PyType_Type, 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
68 "traceback", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
69 sizeof(PyTracebackObject), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
70 0, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
71 (destructor)tb_dealloc, /*tp_dealloc*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
72 0, /*tp_print*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
73 0, /*tp_getattr*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
74 0, /*tp_setattr*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
75 0, /*tp_reserved*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
76 0, /*tp_repr*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
77 0, /*tp_as_number*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
78 0, /*tp_as_sequence*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
79 0, /*tp_as_mapping*/ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
80 0, /* tp_hash */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
81 0, /* tp_call */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
82 0, /* tp_str */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
83 PyObject_GenericGetAttr, /* tp_getattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
84 0, /* tp_setattro */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
85 0, /* tp_as_buffer */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
86 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
87 0, /* tp_doc */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
88 (traverseproc)tb_traverse, /* tp_traverse */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
89 (inquiry)tb_clear, /* tp_clear */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
90 0, /* tp_richcompare */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
91 0, /* tp_weaklistoffset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
92 0, /* tp_iter */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
93 0, /* tp_iternext */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
94 tb_methods, /* tp_methods */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
95 tb_memberlist, /* tp_members */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
96 0, /* tp_getset */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
97 0, /* tp_base */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
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 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
104 PyTracebackObject *tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
105 if ((next != NULL && !PyTraceBack_Check(next)) || |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
106 frame == NULL || !PyFrame_Check(frame)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
107 PyErr_BadInternalCall(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
108 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
109 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
110 tb = PyObject_GC_New(PyTracebackObject, &PyTraceBack_Type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
111 if (tb != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
112 Py_XINCREF(next); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
113 tb->tb_next = next; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
114 Py_XINCREF(frame); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
115 tb->tb_frame = frame; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
116 tb->tb_lasti = frame->f_lasti; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
117 tb->tb_lineno = PyCode_Addr2Line(frame->f_code, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
118 frame->f_lasti); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
119 PyObject_GC_Track(tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
120 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
121 return tb; |
| 86 | 122 } |
| 123 | |
| 124 int | |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
125 PyTraceBack_Here(PyFrameObject *frame) |
| 86 | 126 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
127 PyThreadState *tstate = PyThreadState_GET(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
128 PyTracebackObject *oldtb = (PyTracebackObject *) tstate->curexc_traceback; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
129 PyTracebackObject *tb = newtracebackobject(oldtb, frame); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
130 if (tb == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
131 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
132 tstate->curexc_traceback = (PyObject *)tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
133 Py_XDECREF(oldtb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
134 return 0; |
| 86 | 135 } |
| 136 | |
|
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
|
137 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
|
138 _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
|
139 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
140 int i; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
141 int fd = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
142 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
143 Py_ssize_t _npath; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
144 int npath; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
145 size_t taillen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
146 PyObject *syspath; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
147 const char* path; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
148 const char* tail; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
149 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
|
150 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
151 /* Search tail of filename in sys.path before giving up */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
152 tail = strrchr(filename, SEP); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
153 if (tail == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
154 tail = filename; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
155 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
156 tail++; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
157 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
|
158 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
159 syspath = PySys_GetObject("path"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
160 if (syspath == NULL || !PyList_Check(syspath)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
161 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
162 _npath = PyList_Size(syspath); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
163 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
|
164 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
165 for (i = 0; i < npath; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
166 v = PyList_GetItem(syspath, i); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
167 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
168 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
169 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
170 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
171 if (!PyUnicode_Check(v)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
172 continue; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
173 path = _PyUnicode_AsStringAndSize(v, &len); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
174 if (len + 1 + (Py_ssize_t)taillen >= (Py_ssize_t)namelen - 1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
175 continue; /* Too long */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
176 strcpy(namebuf, path); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
177 if (strlen(namebuf) != len) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
178 continue; /* v contains '\0' */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
179 if (len > 0 && namebuf[len-1] != SEP) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
180 namebuf[len++] = SEP; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
181 strcpy(namebuf+len, tail); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
182 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
183 fd = open(namebuf, open_flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
184 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
185 if (0 <= fd) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
186 return fd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
187 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
188 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
189 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
|
190 } |
|
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
|
191 |
|
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
|
192 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
|
193 _Py_DisplaySourceLine(PyObject *f, const char *filename, int lineno, int indent) |
| 86 | 194 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
195 int err = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
196 int fd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
197 int i; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
198 char *found_encoding; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
199 char *encoding; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
200 PyObject *fob = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
201 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
|
202 #ifdef O_BINARY |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
203 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
|
204 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
205 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
|
206 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
207 char buf[MAXPATHLEN+1]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
208 Py_UNICODE *u, *p; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
209 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
|
210 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
211 /* open the file */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
212 if (filename == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
213 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
214 Py_BEGIN_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
215 fd = open(filename, open_flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
216 Py_END_ALLOW_THREADS |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
217 if (fd < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
218 fd = _Py_FindSourceFile(filename, buf, sizeof(buf), open_flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
219 if (fd < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
220 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
221 filename = buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
222 } |
|
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
|
223 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
224 /* use the right encoding to decode the file as unicode */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
225 found_encoding = PyTokenizer_FindEncoding(fd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
226 encoding = (found_encoding != NULL) ? found_encoding : |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
227 (char*)PyUnicode_GetDefaultEncoding(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
228 lseek(fd, 0, 0); /* Reset position */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
229 fob = PyFile_FromFd(fd, (char*)filename, "r", -1, (char*)encoding, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
230 NULL, NULL, 1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
231 PyMem_FREE(found_encoding); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
232 if (fob == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
233 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
234 close(fd); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
235 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
236 } |
|
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
|
237 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
238 /* get the line number lineno */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
239 for (i = 0; i < lineno; i++) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
240 Py_XDECREF(lineobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
241 lineobj = PyFile_GetLine(fob, -1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
242 if (!lineobj) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
243 err = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
244 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
245 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
246 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
247 Py_DECREF(fob); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
248 if (!lineobj || !PyUnicode_Check(lineobj)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
249 Py_XDECREF(lineobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
250 return err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
251 } |
|
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
|
252 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
253 /* remove the indentation of the line */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
254 u = PyUnicode_AS_UNICODE(lineobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
255 len = PyUnicode_GET_SIZE(lineobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
256 for (p=u; *p == ' ' || *p == '\t' || *p == '\014'; p++) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
257 len--; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
258 if (u != p) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
259 PyObject *truncated; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
260 truncated = PyUnicode_FromUnicode(p, len); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
261 if (truncated) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
262 Py_DECREF(lineobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
263 lineobj = truncated; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
264 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
265 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
266 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
267 } |
|
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
|
268 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
269 /* Write some spaces before the line */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
270 strcpy(buf, " "); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
271 assert (strlen(buf) == 10); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
272 while (indent > 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
273 if(indent < 10) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
274 buf[indent] = '\0'; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
275 err = PyFile_WriteString(buf, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
276 if (err != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
277 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
278 indent -= 10; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
279 } |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47301
diff
changeset
|
280 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
281 /* finally display the line */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
282 if (err == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
283 err = PyFile_WriteObject(lineobj, f, Py_PRINT_RAW); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
284 Py_DECREF(lineobj); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
285 if (err == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
286 err = PyFile_WriteString("\n", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
287 return err; |
| 86 | 288 } |
| 289 | |
|
5608
79e49cbce2ef
PyFile_WriteString now returns an error indicator instead of calling
Guido van Rossum <guido@python.org>
parents:
5405
diff
changeset
|
290 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
|
291 tb_displayline(PyObject *f, const char *filename, int lineno, const char *name) |
| 86 | 292 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
293 int err = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
294 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
|
295 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
296 if (filename == NULL || name == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
297 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
298 /* 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
|
299 #define FMT " File \"%.500s\", line %d, in %.500s\n" |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
300 PyOS_snprintf(linebuf, sizeof(linebuf), FMT, filename, lineno, name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
301 err = PyFile_WriteString(linebuf, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
302 if (err != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
303 return err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
304 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
|
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 |
|
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 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
|
308 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
|
309 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
310 int err = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
311 long depth = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
312 PyTracebackObject *tb1 = tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
313 while (tb1 != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
314 depth++; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
315 tb1 = tb1->tb_next; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
316 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
317 while (tb != NULL && err == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
318 if (depth <= limit) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
319 err = tb_displayline(f, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
320 _PyUnicode_AsString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
321 tb->tb_frame->f_code->co_filename), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
322 tb->tb_lineno, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
323 _PyUnicode_AsString(tb->tb_frame->f_code->co_name)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
324 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
325 depth--; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
326 tb = tb->tb_next; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
327 if (err == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
328 err = PyErr_CheckSignals(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
329 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
330 return err; |
| 86 | 331 } |
| 332 | |
|
44157
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
333 #define PyTraceBack_LIMIT 1000 |
|
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
334 |
| 86 | 335 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
336 PyTraceBack_Print(PyObject *v, PyObject *f) |
| 86 | 337 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
338 int err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
339 PyObject *limitv; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
340 long limit = PyTraceBack_LIMIT; |
|
44157
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
341 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
342 if (v == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
343 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
344 if (!PyTraceBack_Check(v)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
345 PyErr_BadInternalCall(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
346 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
347 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
348 limitv = PySys_GetObject("tracebacklimit"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
349 if (limitv) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
350 PyObject *exc_type, *exc_value, *exc_tb; |
|
44157
565012d1123d
Removed another occurrence of PyInt_ExactCheck()
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
351 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
352 PyErr_Fetch(&exc_type, &exc_value, &exc_tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
353 limit = PyLong_AsLong(limitv); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
354 if (limit == -1 && PyErr_Occurred()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
355 if (PyErr_ExceptionMatches(PyExc_OverflowError)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
356 limit = PyTraceBack_LIMIT; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
357 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
358 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
359 Py_XDECREF(exc_type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
360 Py_XDECREF(exc_value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
361 Py_XDECREF(exc_tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
362 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
363 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
364 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
365 else if (limit <= 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
366 limit = PyTraceBack_LIMIT; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
367 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
368 PyErr_Restore(exc_type, exc_value, exc_tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
369 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
370 err = PyFile_WriteString("Traceback (most recent call last):\n", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
371 if (!err) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
372 err = tb_printinternal((PyTracebackObject *)v, f, limit); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
373 return err; |
| 86 | 374 } |
