1991-02-19 08:39:46 -04:00
|
|
|
|
1990-12-20 11:06:42 -04:00
|
|
|
/* Traceback implementation */
|
|
|
|
|
1997-04-29 15:33:38 -03:00
|
|
|
#include "Python.h"
|
1990-12-20 11:06:42 -04:00
|
|
|
|
2005-10-20 16:59:25 -03:00
|
|
|
#include "code.h"
|
1990-12-20 11:06:42 -04:00
|
|
|
#include "frameobject.h"
|
|
|
|
#include "structmember.h"
|
1992-02-26 11:17:59 -04:00
|
|
|
#include "osdefs.h"
|
2004-03-21 14:37:23 -04:00
|
|
|
#include "traceback.h"
|
2008-10-09 20:37:48 -03:00
|
|
|
#ifdef HAVE_FCNTL_H
|
|
|
|
#include <fcntl.h>
|
|
|
|
#endif
|
1990-12-20 11:06:42 -04:00
|
|
|
|
2004-03-21 14:37:23 -04:00
|
|
|
#define OFF(x) offsetof(PyTracebackObject, x)
|
1990-12-20 11:06:42 -04:00
|
|
|
|
2008-10-09 20:37:48 -03:00
|
|
|
/* Method from Parser/tokenizer.c */
|
|
|
|
extern char * PyTokenizer_FindEncoding(int);
|
|
|
|
|
2007-08-14 14:53:54 -03:00
|
|
|
static PyObject *
|
|
|
|
tb_dir(PyTracebackObject *self)
|
|
|
|
{
|
|
|
|
return Py_BuildValue("[ssss]", "tb_frame", "tb_next",
|
|
|
|
"tb_lasti", "tb_lineno");
|
|
|
|
}
|
|
|
|
|
|
|
|
static PyMethodDef tb_methods[] = {
|
|
|
|
{"__dir__", (PyCFunction)tb_dir, METH_NOARGS},
|
|
|
|
{NULL, NULL, 0, NULL},
|
|
|
|
};
|
|
|
|
|
2007-08-11 03:39:53 -03:00
|
|
|
static PyMemberDef tb_memberlist[] = {
|
2010-05-09 12:52:27 -03:00
|
|
|
{"tb_next", T_OBJECT, OFF(tb_next), READONLY},
|
|
|
|
{"tb_frame", T_OBJECT, OFF(tb_frame), READONLY},
|
|
|
|
{"tb_lasti", T_INT, OFF(tb_lasti), READONLY},
|
|
|
|
{"tb_lineno", T_INT, OFF(tb_lineno), READONLY},
|
|
|
|
{NULL} /* Sentinel */
|
1990-12-20 11:06:42 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
2004-03-21 14:37:23 -04:00
|
|
|
tb_dealloc(PyTracebackObject *tb)
|
1990-12-20 11:06:42 -04:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
PyObject_GC_UnTrack(tb);
|
|
|
|
Py_TRASHCAN_SAFE_BEGIN(tb)
|
|
|
|
Py_XDECREF(tb->tb_next);
|
|
|
|
Py_XDECREF(tb->tb_frame);
|
|
|
|
PyObject_GC_Del(tb);
|
|
|
|
Py_TRASHCAN_SAFE_END(tb)
|
1990-12-20 11:06:42 -04:00
|
|
|
}
|
|
|
|
|
2001-10-22 19:17:41 -03:00
|
|
|
static int
|
2004-03-21 14:37:23 -04:00
|
|
|
tb_traverse(PyTracebackObject *tb, visitproc visit, void *arg)
|
2001-10-22 19:17:41 -03:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
Py_VISIT(tb->tb_next);
|
|
|
|
Py_VISIT(tb->tb_frame);
|
|
|
|
return 0;
|
2001-10-22 19:17:41 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2004-03-21 14:37:23 -04:00
|
|
|
tb_clear(PyTracebackObject *tb)
|
2001-10-22 19:17:41 -03:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
Py_CLEAR(tb->tb_next);
|
|
|
|
Py_CLEAR(tb->tb_frame);
|
2001-10-22 19:17:41 -03:00
|
|
|
}
|
|
|
|
|
2001-10-22 16:34:09 -03:00
|
|
|
PyTypeObject PyTraceBack_Type = {
|
2010-05-09 12:52:27 -03:00
|
|
|
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
|
|
|
"traceback",
|
|
|
|
sizeof(PyTracebackObject),
|
|
|
|
0,
|
|
|
|
(destructor)tb_dealloc, /*tp_dealloc*/
|
|
|
|
0, /*tp_print*/
|
|
|
|
0, /*tp_getattr*/
|
|
|
|
0, /*tp_setattr*/
|
|
|
|
0, /*tp_reserved*/
|
|
|
|
0, /*tp_repr*/
|
|
|
|
0, /*tp_as_number*/
|
|
|
|
0, /*tp_as_sequence*/
|
|
|
|
0, /*tp_as_mapping*/
|
|
|
|
0, /* tp_hash */
|
|
|
|
0, /* tp_call */
|
|
|
|
0, /* tp_str */
|
|
|
|
PyObject_GenericGetAttr, /* tp_getattro */
|
|
|
|
0, /* tp_setattro */
|
|
|
|
0, /* tp_as_buffer */
|
|
|
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
|
|
|
|
0, /* tp_doc */
|
|
|
|
(traverseproc)tb_traverse, /* tp_traverse */
|
|
|
|
(inquiry)tb_clear, /* tp_clear */
|
|
|
|
0, /* tp_richcompare */
|
|
|
|
0, /* tp_weaklistoffset */
|
|
|
|
0, /* tp_iter */
|
|
|
|
0, /* tp_iternext */
|
|
|
|
tb_methods, /* tp_methods */
|
|
|
|
tb_memberlist, /* tp_members */
|
|
|
|
0, /* tp_getset */
|
|
|
|
0, /* tp_base */
|
|
|
|
0, /* tp_dict */
|
1990-12-20 11:06:42 -04:00
|
|
|
};
|
|
|
|
|
2004-03-21 14:37:23 -04:00
|
|
|
static PyTracebackObject *
|
|
|
|
newtracebackobject(PyTracebackObject *next, PyFrameObject *frame)
|
1990-12-20 11:06:42 -04:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
PyTracebackObject *tb;
|
|
|
|
if ((next != NULL && !PyTraceBack_Check(next)) ||
|
|
|
|
frame == NULL || !PyFrame_Check(frame)) {
|
|
|
|
PyErr_BadInternalCall();
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
tb = PyObject_GC_New(PyTracebackObject, &PyTraceBack_Type);
|
|
|
|
if (tb != NULL) {
|
|
|
|
Py_XINCREF(next);
|
|
|
|
tb->tb_next = next;
|
|
|
|
Py_XINCREF(frame);
|
|
|
|
tb->tb_frame = frame;
|
|
|
|
tb->tb_lasti = frame->f_lasti;
|
|
|
|
tb->tb_lineno = PyFrame_GetLineNumber(frame);
|
|
|
|
PyObject_GC_Track(tb);
|
|
|
|
}
|
|
|
|
return tb;
|
1990-12-20 11:06:42 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
int
|
2000-07-22 15:47:25 -03:00
|
|
|
PyTraceBack_Here(PyFrameObject *frame)
|
1990-12-20 11:06:42 -04:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
PyThreadState *tstate = PyThreadState_GET();
|
|
|
|
PyTracebackObject *oldtb = (PyTracebackObject *) tstate->curexc_traceback;
|
|
|
|
PyTracebackObject *tb = newtracebackobject(oldtb, frame);
|
|
|
|
if (tb == NULL)
|
|
|
|
return -1;
|
|
|
|
tstate->curexc_traceback = (PyObject *)tb;
|
|
|
|
Py_XDECREF(oldtb);
|
|
|
|
return 0;
|
1990-12-20 11:06:42 -04:00
|
|
|
}
|
|
|
|
|
2008-10-09 20:37:48 -03:00
|
|
|
static int
|
|
|
|
_Py_FindSourceFile(const char* filename, char* namebuf, size_t namelen, int open_flags)
|
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
int i;
|
|
|
|
int fd = -1;
|
|
|
|
PyObject *v;
|
|
|
|
Py_ssize_t _npath;
|
|
|
|
int npath;
|
|
|
|
size_t taillen;
|
|
|
|
PyObject *syspath;
|
|
|
|
const char* path;
|
|
|
|
const char* tail;
|
|
|
|
Py_ssize_t len;
|
|
|
|
|
|
|
|
/* Search tail of filename in sys.path before giving up */
|
|
|
|
tail = strrchr(filename, SEP);
|
|
|
|
if (tail == NULL)
|
|
|
|
tail = filename;
|
|
|
|
else
|
|
|
|
tail++;
|
|
|
|
taillen = strlen(tail);
|
|
|
|
|
|
|
|
syspath = PySys_GetObject("path");
|
|
|
|
if (syspath == NULL || !PyList_Check(syspath))
|
|
|
|
return -1;
|
|
|
|
_npath = PyList_Size(syspath);
|
|
|
|
npath = Py_SAFE_DOWNCAST(_npath, Py_ssize_t, int);
|
|
|
|
|
|
|
|
for (i = 0; i < npath; i++) {
|
|
|
|
v = PyList_GetItem(syspath, i);
|
|
|
|
if (v == NULL) {
|
|
|
|
PyErr_Clear();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (!PyUnicode_Check(v))
|
|
|
|
continue;
|
|
|
|
path = _PyUnicode_AsStringAndSize(v, &len);
|
|
|
|
if (len + 1 + (Py_ssize_t)taillen >= (Py_ssize_t)namelen - 1)
|
|
|
|
continue; /* Too long */
|
|
|
|
strcpy(namebuf, path);
|
|
|
|
if (strlen(namebuf) != len)
|
|
|
|
continue; /* v contains '\0' */
|
|
|
|
if (len > 0 && namebuf[len-1] != SEP)
|
|
|
|
namebuf[len++] = SEP;
|
|
|
|
strcpy(namebuf+len, tail);
|
|
|
|
Py_BEGIN_ALLOW_THREADS
|
|
|
|
fd = open(namebuf, open_flags);
|
|
|
|
Py_END_ALLOW_THREADS
|
|
|
|
if (0 <= fd) {
|
|
|
|
return fd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
2008-10-09 20:37:48 -03:00
|
|
|
}
|
|
|
|
|
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62260 | gregory.p.smith | 2008-04-10 01:11:56 +0200 (Thu, 10 Apr 2008) | 2 lines
better diagnostics
........
r62261 | gregory.p.smith | 2008-04-10 01:16:37 +0200 (Thu, 10 Apr 2008) | 3 lines
Raise SystemError when size < 0 is passed into PyString_FromStringAndSize,
PyBytes_FromStringAndSize or PyUnicode_FromStringAndSize. [issue2587]
........
r62266 | neal.norwitz | 2008-04-10 07:46:39 +0200 (Thu, 10 Apr 2008) | 5 lines
Remove the test file before writing it in case there is no write permission.
This might help fix some of the failures on Windows box(es). It doesn't hurt
either way and ensure the tests are a little more self contained (ie have
less assumptions).
........
r62271 | gregory.p.smith | 2008-04-10 21:50:36 +0200 (Thu, 10 Apr 2008) | 2 lines
get rid of assert (size >= 0) now that an explicit if (size < 0) is in the code.
........
r62277 | andrew.kuchling | 2008-04-10 23:27:10 +0200 (Thu, 10 Apr 2008) | 1 line
Remove forward-looking statement
........
r62278 | andrew.kuchling | 2008-04-10 23:28:51 +0200 (Thu, 10 Apr 2008) | 1 line
Add punctuation
........
r62279 | andrew.kuchling | 2008-04-10 23:29:01 +0200 (Thu, 10 Apr 2008) | 1 line
Use issue directive
........
r62289 | thomas.heller | 2008-04-11 15:05:38 +0200 (Fri, 11 Apr 2008) | 3 lines
Move backwards compatibility macro to the correct place;
PyIndex_Check() was introduced in Python 2.5.
........
r62290 | thomas.heller | 2008-04-11 16:20:26 +0200 (Fri, 11 Apr 2008) | 2 lines
Performance improvements.
........
r62293 | christian.heimes | 2008-04-12 15:03:03 +0200 (Sat, 12 Apr 2008) | 2 lines
Applied patch #2617 from Frank Wierzbicki wit some extras from me
-J and -X are now reserved for Jython and non-standard arguments (e.g. IronPython). I've added some extra comments to make sure the reservation don't get missed in the future.
........
r62294 | georg.brandl | 2008-04-12 20:11:18 +0200 (Sat, 12 Apr 2008) | 2 lines
Use absolute path in sys.path.
........
r62295 | georg.brandl | 2008-04-12 20:36:09 +0200 (Sat, 12 Apr 2008) | 2 lines
#2615: small consistency update by Jeroen Ruigrok van der Werven.
........
r62296 | georg.brandl | 2008-04-12 21:00:20 +0200 (Sat, 12 Apr 2008) | 2 lines
Add Jeroen.
........
r62297 | georg.brandl | 2008-04-12 21:05:37 +0200 (Sat, 12 Apr 2008) | 2 lines
Don't offend snake lovers.
........
r62298 | gregory.p.smith | 2008-04-12 22:37:48 +0200 (Sat, 12 Apr 2008) | 2 lines
fix compiler warnings
........
r62302 | gregory.p.smith | 2008-04-13 00:24:04 +0200 (Sun, 13 Apr 2008) | 3 lines
socket.error inherits from IOError, it no longer needs listing in
the all_errors tuple.
........
r62303 | brett.cannon | 2008-04-13 01:44:07 +0200 (Sun, 13 Apr 2008) | 8 lines
Re-implement the 'warnings' module in C. This allows for usage of the
'warnings' code in places where it was previously not possible (e.g., the
parser). It could also potentially lead to a speed-up in interpreter start-up
if the C version of the code (_warnings) is imported over the use of the
Python version in key places.
Closes issue #1631171.
........
r62304 | gregory.p.smith | 2008-04-13 02:03:25 +0200 (Sun, 13 Apr 2008) | 3 lines
Adds a profile-opt target for easy compilation of a python binary using
gcc's profile guided optimization.
........
r62305 | brett.cannon | 2008-04-13 02:18:44 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix a bug in PySys_HasWarnOption() where it was not properly checking the
length of the list storing the warning options.
........
r62306 | brett.cannon | 2008-04-13 02:25:15 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix an accidental bug of an non-existent init function.
........
r62308 | andrew.kuchling | 2008-04-13 03:05:59 +0200 (Sun, 13 Apr 2008) | 1 line
Mention -J, -X
........
r62311 | benjamin.peterson | 2008-04-13 04:20:05 +0200 (Sun, 13 Apr 2008) | 2 lines
Give the "Interactive Interpreter Changes" section in 2.6 whatsnew a unique link name
........
r62313 | brett.cannon | 2008-04-13 04:42:36 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix test_warnings by making the state of things more consistent for each test
when it is run.
........
r62314 | skip.montanaro | 2008-04-13 05:17:30 +0200 (Sun, 13 Apr 2008) | 2 lines
spelling
........
r62315 | georg.brandl | 2008-04-13 09:07:44 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix markup.
........
r62319 | christian.heimes | 2008-04-13 11:30:17 +0200 (Sun, 13 Apr 2008) | 1 line
Fix compiler warning Include/warnings.h:19:28: warning: no newline at end of file
........
r62320 | christian.heimes | 2008-04-13 11:33:24 +0200 (Sun, 13 Apr 2008) | 1 line
Use PyString_InternFromString instead of PyString_FromString for static vars
........
r62321 | christian.heimes | 2008-04-13 11:37:05 +0200 (Sun, 13 Apr 2008) | 1 line
Added new files to the pcbuild files
........
2008-04-13 10:53:33 -03:00
|
|
|
int
|
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
svn+ssh://pythondev@svn.python.org/python/trunk
........
r64722 | georg.brandl | 2008-07-05 12:13:36 +0200 (Sat, 05 Jul 2008) | 4 lines
#2663: support an *ignore* argument to shutil.copytree(). Patch by Tarek Ziade.
This is a new feature, but Barry authorized adding it in the beta period.
........
r64729 | mark.dickinson | 2008-07-05 13:33:52 +0200 (Sat, 05 Jul 2008) | 5 lines
Issue 3188: accept float('infinity') as well as float('inf'). This
makes the float constructor behave in the same way as specified
by various other language standards, including C99, IEEE 754r,
and the IBM Decimal standard.
........
r64753 | gregory.p.smith | 2008-07-06 05:35:58 +0200 (Sun, 06 Jul 2008) | 4 lines
- Issue #2862: Make int and float freelist management consistent with other
freelists. Changes their CompactFreeList apis into ClearFreeList apis and
calls them via gc.collect().
........
r64845 | raymond.hettinger | 2008-07-10 16:03:19 +0200 (Thu, 10 Jul 2008) | 1 line
Issue 3301: Bisect functions behaved badly when lo was negative.
........
r64846 | raymond.hettinger | 2008-07-10 16:34:57 +0200 (Thu, 10 Jul 2008) | 1 line
Issue 3285: Fractions from_float() and from_decimal() accept Integral arguments.
........
r64849 | andrew.kuchling | 2008-07-10 16:43:31 +0200 (Thu, 10 Jul 2008) | 1 line
Wording changes
........
r64871 | raymond.hettinger | 2008-07-11 14:00:21 +0200 (Fri, 11 Jul 2008) | 1 line
Add cautionary note on the use of PySequence_Fast_ITEMS.
........
r64880 | amaury.forgeotdarc | 2008-07-11 23:28:25 +0200 (Fri, 11 Jul 2008) | 5 lines
#3317 in zipfile module, restore the previous names of global variables:
some applications relied on them.
Also remove duplicated lines.
........
r64881 | amaury.forgeotdarc | 2008-07-11 23:45:06 +0200 (Fri, 11 Jul 2008) | 3 lines
#3342: In tracebacks, printed source lines were not indented since r62555.
#3343: Py_DisplaySourceLine should be a private function. Rename it to _Py_DisplaySourceLine.
........
r64882 | josiah.carlson | 2008-07-12 00:17:14 +0200 (Sat, 12 Jul 2008) | 2 lines
Fix for the AttributeError in test_asynchat.
........
r64885 | josiah.carlson | 2008-07-12 01:26:59 +0200 (Sat, 12 Jul 2008) | 2 lines
Fixed test for asyncore.
........
r64888 | matthias.klose | 2008-07-12 09:51:48 +0200 (Sat, 12 Jul 2008) | 2 lines
- Fix bashisms in Tools/faqwiz/move-faqwiz.sh
........
r64897 | benjamin.peterson | 2008-07-12 22:16:19 +0200 (Sat, 12 Jul 2008) | 1 line
fix various doc typos #3320
........
r64900 | alexandre.vassalotti | 2008-07-13 00:06:53 +0200 (Sun, 13 Jul 2008) | 2 lines
Fixed typo.
........
r64901 | benjamin.peterson | 2008-07-13 01:41:19 +0200 (Sun, 13 Jul 2008) | 1 line
#1778443 robotparser fixes from Aristotelis Mikropoulos
........
r64915 | nick.coghlan | 2008-07-13 16:52:36 +0200 (Sun, 13 Jul 2008) | 1 line
Fix issue 3221 by emitting a RuntimeWarning instead of raising SystemError when the parent module can't be found during an absolute import (likely due to non-PEP 361 aware code which sets a module level __package__ attribute)
........
r64926 | martin.v.loewis | 2008-07-13 22:31:49 +0200 (Sun, 13 Jul 2008) | 2 lines
Add turtle into the module index.
........
r64927 | alexandre.vassalotti | 2008-07-13 22:42:44 +0200 (Sun, 13 Jul 2008) | 3 lines
Issue #3274: Use a less common identifier for the temporary variable
in Py_CLEAR().
........
r64928 | andrew.kuchling | 2008-07-13 23:43:25 +0200 (Sun, 13 Jul 2008) | 1 line
Re-word
........
r64929 | andrew.kuchling | 2008-07-13 23:43:52 +0200 (Sun, 13 Jul 2008) | 1 line
Add various items; move ctypes items into a subsection of their own
........
r64938 | andrew.kuchling | 2008-07-14 02:35:32 +0200 (Mon, 14 Jul 2008) | 1 line
Typo fixes
........
r64939 | andrew.kuchling | 2008-07-14 02:40:55 +0200 (Mon, 14 Jul 2008) | 1 line
Typo fix
........
r64940 | andrew.kuchling | 2008-07-14 03:18:16 +0200 (Mon, 14 Jul 2008) | 1 line
Typo fix
........
r64941 | andrew.kuchling | 2008-07-14 03:18:31 +0200 (Mon, 14 Jul 2008) | 1 line
Expand the multiprocessing section
........
r64944 | gregory.p.smith | 2008-07-14 08:06:48 +0200 (Mon, 14 Jul 2008) | 7 lines
Fix posix.fork1() / os.fork1() to only call PyOS_AfterFork() in the child
process rather than both parent and child.
Does anyone actually use fork1()? It appears to be a Solaris thing
but if Python is built with pthreads on Solaris, fork1() and fork()
should be the same.
........
r64961 | jesse.noller | 2008-07-15 15:47:33 +0200 (Tue, 15 Jul 2008) | 1 line
multiprocessing/connection.py patch to remove fqdn oddness for issue 3270
........
r64966 | nick.coghlan | 2008-07-15 17:40:22 +0200 (Tue, 15 Jul 2008) | 1 line
Add missing NEWS entry for r64962
........
r64973 | jesse.noller | 2008-07-15 20:29:18 +0200 (Tue, 15 Jul 2008) | 1 line
Revert 3270 patch: self._address is in pretty widespread use, need to revisit
........
2008-07-16 09:55:28 -03:00
|
|
|
_Py_DisplaySourceLine(PyObject *f, const char *filename, int lineno, int indent)
|
1990-12-20 11:06:42 -04:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
int err = 0;
|
|
|
|
int fd;
|
|
|
|
int i;
|
|
|
|
char *found_encoding;
|
|
|
|
char *encoding;
|
|
|
|
PyObject *fob = NULL;
|
|
|
|
PyObject *lineobj = NULL;
|
2008-10-09 20:37:48 -03:00
|
|
|
#ifdef O_BINARY
|
2010-05-09 12:52:27 -03:00
|
|
|
const int open_flags = O_RDONLY | O_BINARY; /* necessary for Windows */
|
2008-10-09 20:37:48 -03:00
|
|
|
#else
|
2010-05-09 12:52:27 -03:00
|
|
|
const int open_flags = O_RDONLY;
|
2008-10-09 20:37:48 -03:00
|
|
|
#endif
|
2010-05-09 12:52:27 -03:00
|
|
|
char buf[MAXPATHLEN+1];
|
|
|
|
Py_UNICODE *u, *p;
|
|
|
|
Py_ssize_t len;
|
|
|
|
|
|
|
|
/* open the file */
|
|
|
|
if (filename == NULL)
|
|
|
|
return 0;
|
|
|
|
Py_BEGIN_ALLOW_THREADS
|
|
|
|
fd = open(filename, open_flags);
|
|
|
|
Py_END_ALLOW_THREADS
|
|
|
|
if (fd < 0) {
|
|
|
|
fd = _Py_FindSourceFile(filename, buf, sizeof(buf), open_flags);
|
|
|
|
if (fd < 0)
|
|
|
|
return 0;
|
|
|
|
filename = buf;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* use the right encoding to decode the file as unicode */
|
|
|
|
found_encoding = PyTokenizer_FindEncoding(fd);
|
|
|
|
encoding = (found_encoding != NULL) ? found_encoding :
|
|
|
|
(char*)PyUnicode_GetDefaultEncoding();
|
|
|
|
lseek(fd, 0, 0); /* Reset position */
|
|
|
|
fob = PyFile_FromFd(fd, (char*)filename, "r", -1, (char*)encoding,
|
|
|
|
NULL, NULL, 1);
|
|
|
|
PyMem_FREE(found_encoding);
|
|
|
|
if (fob == NULL) {
|
|
|
|
PyErr_Clear();
|
|
|
|
close(fd);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* get the line number lineno */
|
|
|
|
for (i = 0; i < lineno; i++) {
|
|
|
|
Py_XDECREF(lineobj);
|
|
|
|
lineobj = PyFile_GetLine(fob, -1);
|
|
|
|
if (!lineobj) {
|
|
|
|
err = -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Py_DECREF(fob);
|
|
|
|
if (!lineobj || !PyUnicode_Check(lineobj)) {
|
|
|
|
Py_XDECREF(lineobj);
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* remove the indentation of the line */
|
|
|
|
u = PyUnicode_AS_UNICODE(lineobj);
|
|
|
|
len = PyUnicode_GET_SIZE(lineobj);
|
|
|
|
for (p=u; *p == ' ' || *p == '\t' || *p == '\014'; p++)
|
|
|
|
len--;
|
|
|
|
if (u != p) {
|
|
|
|
PyObject *truncated;
|
|
|
|
truncated = PyUnicode_FromUnicode(p, len);
|
|
|
|
if (truncated) {
|
|
|
|
Py_DECREF(lineobj);
|
|
|
|
lineobj = truncated;
|
|
|
|
} else {
|
|
|
|
PyErr_Clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Write some spaces before the line */
|
|
|
|
strcpy(buf, " ");
|
|
|
|
assert (strlen(buf) == 10);
|
|
|
|
while (indent > 0) {
|
|
|
|
if(indent < 10)
|
|
|
|
buf[indent] = '\0';
|
|
|
|
err = PyFile_WriteString(buf, f);
|
|
|
|
if (err != 0)
|
|
|
|
break;
|
|
|
|
indent -= 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* finally display the line */
|
|
|
|
if (err == 0)
|
|
|
|
err = PyFile_WriteObject(lineobj, f, Py_PRINT_RAW);
|
|
|
|
Py_DECREF(lineobj);
|
|
|
|
if (err == 0)
|
|
|
|
err = PyFile_WriteString("\n", f);
|
|
|
|
return err;
|
1990-12-20 11:06:42 -04:00
|
|
|
}
|
|
|
|
|
1997-05-22 19:35:47 -03:00
|
|
|
static int
|
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62260 | gregory.p.smith | 2008-04-10 01:11:56 +0200 (Thu, 10 Apr 2008) | 2 lines
better diagnostics
........
r62261 | gregory.p.smith | 2008-04-10 01:16:37 +0200 (Thu, 10 Apr 2008) | 3 lines
Raise SystemError when size < 0 is passed into PyString_FromStringAndSize,
PyBytes_FromStringAndSize or PyUnicode_FromStringAndSize. [issue2587]
........
r62266 | neal.norwitz | 2008-04-10 07:46:39 +0200 (Thu, 10 Apr 2008) | 5 lines
Remove the test file before writing it in case there is no write permission.
This might help fix some of the failures on Windows box(es). It doesn't hurt
either way and ensure the tests are a little more self contained (ie have
less assumptions).
........
r62271 | gregory.p.smith | 2008-04-10 21:50:36 +0200 (Thu, 10 Apr 2008) | 2 lines
get rid of assert (size >= 0) now that an explicit if (size < 0) is in the code.
........
r62277 | andrew.kuchling | 2008-04-10 23:27:10 +0200 (Thu, 10 Apr 2008) | 1 line
Remove forward-looking statement
........
r62278 | andrew.kuchling | 2008-04-10 23:28:51 +0200 (Thu, 10 Apr 2008) | 1 line
Add punctuation
........
r62279 | andrew.kuchling | 2008-04-10 23:29:01 +0200 (Thu, 10 Apr 2008) | 1 line
Use issue directive
........
r62289 | thomas.heller | 2008-04-11 15:05:38 +0200 (Fri, 11 Apr 2008) | 3 lines
Move backwards compatibility macro to the correct place;
PyIndex_Check() was introduced in Python 2.5.
........
r62290 | thomas.heller | 2008-04-11 16:20:26 +0200 (Fri, 11 Apr 2008) | 2 lines
Performance improvements.
........
r62293 | christian.heimes | 2008-04-12 15:03:03 +0200 (Sat, 12 Apr 2008) | 2 lines
Applied patch #2617 from Frank Wierzbicki wit some extras from me
-J and -X are now reserved for Jython and non-standard arguments (e.g. IronPython). I've added some extra comments to make sure the reservation don't get missed in the future.
........
r62294 | georg.brandl | 2008-04-12 20:11:18 +0200 (Sat, 12 Apr 2008) | 2 lines
Use absolute path in sys.path.
........
r62295 | georg.brandl | 2008-04-12 20:36:09 +0200 (Sat, 12 Apr 2008) | 2 lines
#2615: small consistency update by Jeroen Ruigrok van der Werven.
........
r62296 | georg.brandl | 2008-04-12 21:00:20 +0200 (Sat, 12 Apr 2008) | 2 lines
Add Jeroen.
........
r62297 | georg.brandl | 2008-04-12 21:05:37 +0200 (Sat, 12 Apr 2008) | 2 lines
Don't offend snake lovers.
........
r62298 | gregory.p.smith | 2008-04-12 22:37:48 +0200 (Sat, 12 Apr 2008) | 2 lines
fix compiler warnings
........
r62302 | gregory.p.smith | 2008-04-13 00:24:04 +0200 (Sun, 13 Apr 2008) | 3 lines
socket.error inherits from IOError, it no longer needs listing in
the all_errors tuple.
........
r62303 | brett.cannon | 2008-04-13 01:44:07 +0200 (Sun, 13 Apr 2008) | 8 lines
Re-implement the 'warnings' module in C. This allows for usage of the
'warnings' code in places where it was previously not possible (e.g., the
parser). It could also potentially lead to a speed-up in interpreter start-up
if the C version of the code (_warnings) is imported over the use of the
Python version in key places.
Closes issue #1631171.
........
r62304 | gregory.p.smith | 2008-04-13 02:03:25 +0200 (Sun, 13 Apr 2008) | 3 lines
Adds a profile-opt target for easy compilation of a python binary using
gcc's profile guided optimization.
........
r62305 | brett.cannon | 2008-04-13 02:18:44 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix a bug in PySys_HasWarnOption() where it was not properly checking the
length of the list storing the warning options.
........
r62306 | brett.cannon | 2008-04-13 02:25:15 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix an accidental bug of an non-existent init function.
........
r62308 | andrew.kuchling | 2008-04-13 03:05:59 +0200 (Sun, 13 Apr 2008) | 1 line
Mention -J, -X
........
r62311 | benjamin.peterson | 2008-04-13 04:20:05 +0200 (Sun, 13 Apr 2008) | 2 lines
Give the "Interactive Interpreter Changes" section in 2.6 whatsnew a unique link name
........
r62313 | brett.cannon | 2008-04-13 04:42:36 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix test_warnings by making the state of things more consistent for each test
when it is run.
........
r62314 | skip.montanaro | 2008-04-13 05:17:30 +0200 (Sun, 13 Apr 2008) | 2 lines
spelling
........
r62315 | georg.brandl | 2008-04-13 09:07:44 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix markup.
........
r62319 | christian.heimes | 2008-04-13 11:30:17 +0200 (Sun, 13 Apr 2008) | 1 line
Fix compiler warning Include/warnings.h:19:28: warning: no newline at end of file
........
r62320 | christian.heimes | 2008-04-13 11:33:24 +0200 (Sun, 13 Apr 2008) | 1 line
Use PyString_InternFromString instead of PyString_FromString for static vars
........
r62321 | christian.heimes | 2008-04-13 11:37:05 +0200 (Sun, 13 Apr 2008) | 1 line
Added new files to the pcbuild files
........
2008-04-13 10:53:33 -03:00
|
|
|
tb_displayline(PyObject *f, const char *filename, int lineno, const char *name)
|
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
int err = 0;
|
|
|
|
char linebuf[2000];
|
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62260 | gregory.p.smith | 2008-04-10 01:11:56 +0200 (Thu, 10 Apr 2008) | 2 lines
better diagnostics
........
r62261 | gregory.p.smith | 2008-04-10 01:16:37 +0200 (Thu, 10 Apr 2008) | 3 lines
Raise SystemError when size < 0 is passed into PyString_FromStringAndSize,
PyBytes_FromStringAndSize or PyUnicode_FromStringAndSize. [issue2587]
........
r62266 | neal.norwitz | 2008-04-10 07:46:39 +0200 (Thu, 10 Apr 2008) | 5 lines
Remove the test file before writing it in case there is no write permission.
This might help fix some of the failures on Windows box(es). It doesn't hurt
either way and ensure the tests are a little more self contained (ie have
less assumptions).
........
r62271 | gregory.p.smith | 2008-04-10 21:50:36 +0200 (Thu, 10 Apr 2008) | 2 lines
get rid of assert (size >= 0) now that an explicit if (size < 0) is in the code.
........
r62277 | andrew.kuchling | 2008-04-10 23:27:10 +0200 (Thu, 10 Apr 2008) | 1 line
Remove forward-looking statement
........
r62278 | andrew.kuchling | 2008-04-10 23:28:51 +0200 (Thu, 10 Apr 2008) | 1 line
Add punctuation
........
r62279 | andrew.kuchling | 2008-04-10 23:29:01 +0200 (Thu, 10 Apr 2008) | 1 line
Use issue directive
........
r62289 | thomas.heller | 2008-04-11 15:05:38 +0200 (Fri, 11 Apr 2008) | 3 lines
Move backwards compatibility macro to the correct place;
PyIndex_Check() was introduced in Python 2.5.
........
r62290 | thomas.heller | 2008-04-11 16:20:26 +0200 (Fri, 11 Apr 2008) | 2 lines
Performance improvements.
........
r62293 | christian.heimes | 2008-04-12 15:03:03 +0200 (Sat, 12 Apr 2008) | 2 lines
Applied patch #2617 from Frank Wierzbicki wit some extras from me
-J and -X are now reserved for Jython and non-standard arguments (e.g. IronPython). I've added some extra comments to make sure the reservation don't get missed in the future.
........
r62294 | georg.brandl | 2008-04-12 20:11:18 +0200 (Sat, 12 Apr 2008) | 2 lines
Use absolute path in sys.path.
........
r62295 | georg.brandl | 2008-04-12 20:36:09 +0200 (Sat, 12 Apr 2008) | 2 lines
#2615: small consistency update by Jeroen Ruigrok van der Werven.
........
r62296 | georg.brandl | 2008-04-12 21:00:20 +0200 (Sat, 12 Apr 2008) | 2 lines
Add Jeroen.
........
r62297 | georg.brandl | 2008-04-12 21:05:37 +0200 (Sat, 12 Apr 2008) | 2 lines
Don't offend snake lovers.
........
r62298 | gregory.p.smith | 2008-04-12 22:37:48 +0200 (Sat, 12 Apr 2008) | 2 lines
fix compiler warnings
........
r62302 | gregory.p.smith | 2008-04-13 00:24:04 +0200 (Sun, 13 Apr 2008) | 3 lines
socket.error inherits from IOError, it no longer needs listing in
the all_errors tuple.
........
r62303 | brett.cannon | 2008-04-13 01:44:07 +0200 (Sun, 13 Apr 2008) | 8 lines
Re-implement the 'warnings' module in C. This allows for usage of the
'warnings' code in places where it was previously not possible (e.g., the
parser). It could also potentially lead to a speed-up in interpreter start-up
if the C version of the code (_warnings) is imported over the use of the
Python version in key places.
Closes issue #1631171.
........
r62304 | gregory.p.smith | 2008-04-13 02:03:25 +0200 (Sun, 13 Apr 2008) | 3 lines
Adds a profile-opt target for easy compilation of a python binary using
gcc's profile guided optimization.
........
r62305 | brett.cannon | 2008-04-13 02:18:44 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix a bug in PySys_HasWarnOption() where it was not properly checking the
length of the list storing the warning options.
........
r62306 | brett.cannon | 2008-04-13 02:25:15 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix an accidental bug of an non-existent init function.
........
r62308 | andrew.kuchling | 2008-04-13 03:05:59 +0200 (Sun, 13 Apr 2008) | 1 line
Mention -J, -X
........
r62311 | benjamin.peterson | 2008-04-13 04:20:05 +0200 (Sun, 13 Apr 2008) | 2 lines
Give the "Interactive Interpreter Changes" section in 2.6 whatsnew a unique link name
........
r62313 | brett.cannon | 2008-04-13 04:42:36 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix test_warnings by making the state of things more consistent for each test
when it is run.
........
r62314 | skip.montanaro | 2008-04-13 05:17:30 +0200 (Sun, 13 Apr 2008) | 2 lines
spelling
........
r62315 | georg.brandl | 2008-04-13 09:07:44 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix markup.
........
r62319 | christian.heimes | 2008-04-13 11:30:17 +0200 (Sun, 13 Apr 2008) | 1 line
Fix compiler warning Include/warnings.h:19:28: warning: no newline at end of file
........
r62320 | christian.heimes | 2008-04-13 11:33:24 +0200 (Sun, 13 Apr 2008) | 1 line
Use PyString_InternFromString instead of PyString_FromString for static vars
........
r62321 | christian.heimes | 2008-04-13 11:37:05 +0200 (Sun, 13 Apr 2008) | 1 line
Added new files to the pcbuild files
........
2008-04-13 10:53:33 -03:00
|
|
|
|
2010-05-09 12:52:27 -03:00
|
|
|
if (filename == NULL || name == NULL)
|
|
|
|
return -1;
|
|
|
|
/* This is needed by Emacs' compile command */
|
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62260 | gregory.p.smith | 2008-04-10 01:11:56 +0200 (Thu, 10 Apr 2008) | 2 lines
better diagnostics
........
r62261 | gregory.p.smith | 2008-04-10 01:16:37 +0200 (Thu, 10 Apr 2008) | 3 lines
Raise SystemError when size < 0 is passed into PyString_FromStringAndSize,
PyBytes_FromStringAndSize or PyUnicode_FromStringAndSize. [issue2587]
........
r62266 | neal.norwitz | 2008-04-10 07:46:39 +0200 (Thu, 10 Apr 2008) | 5 lines
Remove the test file before writing it in case there is no write permission.
This might help fix some of the failures on Windows box(es). It doesn't hurt
either way and ensure the tests are a little more self contained (ie have
less assumptions).
........
r62271 | gregory.p.smith | 2008-04-10 21:50:36 +0200 (Thu, 10 Apr 2008) | 2 lines
get rid of assert (size >= 0) now that an explicit if (size < 0) is in the code.
........
r62277 | andrew.kuchling | 2008-04-10 23:27:10 +0200 (Thu, 10 Apr 2008) | 1 line
Remove forward-looking statement
........
r62278 | andrew.kuchling | 2008-04-10 23:28:51 +0200 (Thu, 10 Apr 2008) | 1 line
Add punctuation
........
r62279 | andrew.kuchling | 2008-04-10 23:29:01 +0200 (Thu, 10 Apr 2008) | 1 line
Use issue directive
........
r62289 | thomas.heller | 2008-04-11 15:05:38 +0200 (Fri, 11 Apr 2008) | 3 lines
Move backwards compatibility macro to the correct place;
PyIndex_Check() was introduced in Python 2.5.
........
r62290 | thomas.heller | 2008-04-11 16:20:26 +0200 (Fri, 11 Apr 2008) | 2 lines
Performance improvements.
........
r62293 | christian.heimes | 2008-04-12 15:03:03 +0200 (Sat, 12 Apr 2008) | 2 lines
Applied patch #2617 from Frank Wierzbicki wit some extras from me
-J and -X are now reserved for Jython and non-standard arguments (e.g. IronPython). I've added some extra comments to make sure the reservation don't get missed in the future.
........
r62294 | georg.brandl | 2008-04-12 20:11:18 +0200 (Sat, 12 Apr 2008) | 2 lines
Use absolute path in sys.path.
........
r62295 | georg.brandl | 2008-04-12 20:36:09 +0200 (Sat, 12 Apr 2008) | 2 lines
#2615: small consistency update by Jeroen Ruigrok van der Werven.
........
r62296 | georg.brandl | 2008-04-12 21:00:20 +0200 (Sat, 12 Apr 2008) | 2 lines
Add Jeroen.
........
r62297 | georg.brandl | 2008-04-12 21:05:37 +0200 (Sat, 12 Apr 2008) | 2 lines
Don't offend snake lovers.
........
r62298 | gregory.p.smith | 2008-04-12 22:37:48 +0200 (Sat, 12 Apr 2008) | 2 lines
fix compiler warnings
........
r62302 | gregory.p.smith | 2008-04-13 00:24:04 +0200 (Sun, 13 Apr 2008) | 3 lines
socket.error inherits from IOError, it no longer needs listing in
the all_errors tuple.
........
r62303 | brett.cannon | 2008-04-13 01:44:07 +0200 (Sun, 13 Apr 2008) | 8 lines
Re-implement the 'warnings' module in C. This allows for usage of the
'warnings' code in places where it was previously not possible (e.g., the
parser). It could also potentially lead to a speed-up in interpreter start-up
if the C version of the code (_warnings) is imported over the use of the
Python version in key places.
Closes issue #1631171.
........
r62304 | gregory.p.smith | 2008-04-13 02:03:25 +0200 (Sun, 13 Apr 2008) | 3 lines
Adds a profile-opt target for easy compilation of a python binary using
gcc's profile guided optimization.
........
r62305 | brett.cannon | 2008-04-13 02:18:44 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix a bug in PySys_HasWarnOption() where it was not properly checking the
length of the list storing the warning options.
........
r62306 | brett.cannon | 2008-04-13 02:25:15 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix an accidental bug of an non-existent init function.
........
r62308 | andrew.kuchling | 2008-04-13 03:05:59 +0200 (Sun, 13 Apr 2008) | 1 line
Mention -J, -X
........
r62311 | benjamin.peterson | 2008-04-13 04:20:05 +0200 (Sun, 13 Apr 2008) | 2 lines
Give the "Interactive Interpreter Changes" section in 2.6 whatsnew a unique link name
........
r62313 | brett.cannon | 2008-04-13 04:42:36 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix test_warnings by making the state of things more consistent for each test
when it is run.
........
r62314 | skip.montanaro | 2008-04-13 05:17:30 +0200 (Sun, 13 Apr 2008) | 2 lines
spelling
........
r62315 | georg.brandl | 2008-04-13 09:07:44 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix markup.
........
r62319 | christian.heimes | 2008-04-13 11:30:17 +0200 (Sun, 13 Apr 2008) | 1 line
Fix compiler warning Include/warnings.h:19:28: warning: no newline at end of file
........
r62320 | christian.heimes | 2008-04-13 11:33:24 +0200 (Sun, 13 Apr 2008) | 1 line
Use PyString_InternFromString instead of PyString_FromString for static vars
........
r62321 | christian.heimes | 2008-04-13 11:37:05 +0200 (Sun, 13 Apr 2008) | 1 line
Added new files to the pcbuild files
........
2008-04-13 10:53:33 -03:00
|
|
|
#define FMT " File \"%.500s\", line %d, in %.500s\n"
|
2010-05-09 12:52:27 -03:00
|
|
|
PyOS_snprintf(linebuf, sizeof(linebuf), FMT, filename, lineno, name);
|
|
|
|
err = PyFile_WriteString(linebuf, f);
|
|
|
|
if (err != 0)
|
|
|
|
return err;
|
|
|
|
return _Py_DisplaySourceLine(f, filename, lineno, 4);
|
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62260 | gregory.p.smith | 2008-04-10 01:11:56 +0200 (Thu, 10 Apr 2008) | 2 lines
better diagnostics
........
r62261 | gregory.p.smith | 2008-04-10 01:16:37 +0200 (Thu, 10 Apr 2008) | 3 lines
Raise SystemError when size < 0 is passed into PyString_FromStringAndSize,
PyBytes_FromStringAndSize or PyUnicode_FromStringAndSize. [issue2587]
........
r62266 | neal.norwitz | 2008-04-10 07:46:39 +0200 (Thu, 10 Apr 2008) | 5 lines
Remove the test file before writing it in case there is no write permission.
This might help fix some of the failures on Windows box(es). It doesn't hurt
either way and ensure the tests are a little more self contained (ie have
less assumptions).
........
r62271 | gregory.p.smith | 2008-04-10 21:50:36 +0200 (Thu, 10 Apr 2008) | 2 lines
get rid of assert (size >= 0) now that an explicit if (size < 0) is in the code.
........
r62277 | andrew.kuchling | 2008-04-10 23:27:10 +0200 (Thu, 10 Apr 2008) | 1 line
Remove forward-looking statement
........
r62278 | andrew.kuchling | 2008-04-10 23:28:51 +0200 (Thu, 10 Apr 2008) | 1 line
Add punctuation
........
r62279 | andrew.kuchling | 2008-04-10 23:29:01 +0200 (Thu, 10 Apr 2008) | 1 line
Use issue directive
........
r62289 | thomas.heller | 2008-04-11 15:05:38 +0200 (Fri, 11 Apr 2008) | 3 lines
Move backwards compatibility macro to the correct place;
PyIndex_Check() was introduced in Python 2.5.
........
r62290 | thomas.heller | 2008-04-11 16:20:26 +0200 (Fri, 11 Apr 2008) | 2 lines
Performance improvements.
........
r62293 | christian.heimes | 2008-04-12 15:03:03 +0200 (Sat, 12 Apr 2008) | 2 lines
Applied patch #2617 from Frank Wierzbicki wit some extras from me
-J and -X are now reserved for Jython and non-standard arguments (e.g. IronPython). I've added some extra comments to make sure the reservation don't get missed in the future.
........
r62294 | georg.brandl | 2008-04-12 20:11:18 +0200 (Sat, 12 Apr 2008) | 2 lines
Use absolute path in sys.path.
........
r62295 | georg.brandl | 2008-04-12 20:36:09 +0200 (Sat, 12 Apr 2008) | 2 lines
#2615: small consistency update by Jeroen Ruigrok van der Werven.
........
r62296 | georg.brandl | 2008-04-12 21:00:20 +0200 (Sat, 12 Apr 2008) | 2 lines
Add Jeroen.
........
r62297 | georg.brandl | 2008-04-12 21:05:37 +0200 (Sat, 12 Apr 2008) | 2 lines
Don't offend snake lovers.
........
r62298 | gregory.p.smith | 2008-04-12 22:37:48 +0200 (Sat, 12 Apr 2008) | 2 lines
fix compiler warnings
........
r62302 | gregory.p.smith | 2008-04-13 00:24:04 +0200 (Sun, 13 Apr 2008) | 3 lines
socket.error inherits from IOError, it no longer needs listing in
the all_errors tuple.
........
r62303 | brett.cannon | 2008-04-13 01:44:07 +0200 (Sun, 13 Apr 2008) | 8 lines
Re-implement the 'warnings' module in C. This allows for usage of the
'warnings' code in places where it was previously not possible (e.g., the
parser). It could also potentially lead to a speed-up in interpreter start-up
if the C version of the code (_warnings) is imported over the use of the
Python version in key places.
Closes issue #1631171.
........
r62304 | gregory.p.smith | 2008-04-13 02:03:25 +0200 (Sun, 13 Apr 2008) | 3 lines
Adds a profile-opt target for easy compilation of a python binary using
gcc's profile guided optimization.
........
r62305 | brett.cannon | 2008-04-13 02:18:44 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix a bug in PySys_HasWarnOption() where it was not properly checking the
length of the list storing the warning options.
........
r62306 | brett.cannon | 2008-04-13 02:25:15 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix an accidental bug of an non-existent init function.
........
r62308 | andrew.kuchling | 2008-04-13 03:05:59 +0200 (Sun, 13 Apr 2008) | 1 line
Mention -J, -X
........
r62311 | benjamin.peterson | 2008-04-13 04:20:05 +0200 (Sun, 13 Apr 2008) | 2 lines
Give the "Interactive Interpreter Changes" section in 2.6 whatsnew a unique link name
........
r62313 | brett.cannon | 2008-04-13 04:42:36 +0200 (Sun, 13 Apr 2008) | 3 lines
Fix test_warnings by making the state of things more consistent for each test
when it is run.
........
r62314 | skip.montanaro | 2008-04-13 05:17:30 +0200 (Sun, 13 Apr 2008) | 2 lines
spelling
........
r62315 | georg.brandl | 2008-04-13 09:07:44 +0200 (Sun, 13 Apr 2008) | 2 lines
Fix markup.
........
r62319 | christian.heimes | 2008-04-13 11:30:17 +0200 (Sun, 13 Apr 2008) | 1 line
Fix compiler warning Include/warnings.h:19:28: warning: no newline at end of file
........
r62320 | christian.heimes | 2008-04-13 11:33:24 +0200 (Sun, 13 Apr 2008) | 1 line
Use PyString_InternFromString instead of PyString_FromString for static vars
........
r62321 | christian.heimes | 2008-04-13 11:37:05 +0200 (Sun, 13 Apr 2008) | 1 line
Added new files to the pcbuild files
........
2008-04-13 10:53:33 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
tb_printinternal(PyTracebackObject *tb, PyObject *f, long limit)
|
1990-12-20 11:06:42 -04:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
int err = 0;
|
|
|
|
long depth = 0;
|
|
|
|
PyTracebackObject *tb1 = tb;
|
|
|
|
while (tb1 != NULL) {
|
|
|
|
depth++;
|
|
|
|
tb1 = tb1->tb_next;
|
|
|
|
}
|
|
|
|
while (tb != NULL && err == 0) {
|
|
|
|
if (depth <= limit) {
|
|
|
|
err = tb_displayline(f,
|
|
|
|
_PyUnicode_AsString(
|
|
|
|
tb->tb_frame->f_code->co_filename),
|
|
|
|
tb->tb_lineno,
|
|
|
|
_PyUnicode_AsString(tb->tb_frame->f_code->co_name));
|
|
|
|
}
|
|
|
|
depth--;
|
|
|
|
tb = tb->tb_next;
|
|
|
|
if (err == 0)
|
|
|
|
err = PyErr_CheckSignals();
|
|
|
|
}
|
|
|
|
return err;
|
1990-12-20 11:06:42 -04:00
|
|
|
}
|
|
|
|
|
2007-12-04 17:55:18 -04:00
|
|
|
#define PyTraceBack_LIMIT 1000
|
|
|
|
|
1990-12-20 11:06:42 -04:00
|
|
|
int
|
2000-07-22 15:47:25 -03:00
|
|
|
PyTraceBack_Print(PyObject *v, PyObject *f)
|
1990-12-20 11:06:42 -04:00
|
|
|
{
|
2010-05-09 12:52:27 -03:00
|
|
|
int err;
|
|
|
|
PyObject *limitv;
|
|
|
|
long limit = PyTraceBack_LIMIT;
|
|
|
|
|
|
|
|
if (v == NULL)
|
|
|
|
return 0;
|
|
|
|
if (!PyTraceBack_Check(v)) {
|
|
|
|
PyErr_BadInternalCall();
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
limitv = PySys_GetObject("tracebacklimit");
|
|
|
|
if (limitv) {
|
|
|
|
PyObject *exc_type, *exc_value, *exc_tb;
|
|
|
|
|
|
|
|
PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
|
|
|
|
limit = PyLong_AsLong(limitv);
|
|
|
|
if (limit == -1 && PyErr_Occurred()) {
|
|
|
|
if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
|
|
|
|
limit = PyTraceBack_LIMIT;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
Py_XDECREF(exc_type);
|
|
|
|
Py_XDECREF(exc_value);
|
|
|
|
Py_XDECREF(exc_tb);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (limit <= 0) {
|
|
|
|
limit = PyTraceBack_LIMIT;
|
|
|
|
}
|
|
|
|
PyErr_Restore(exc_type, exc_value, exc_tb);
|
|
|
|
}
|
|
|
|
err = PyFile_WriteString("Traceback (most recent call last):\n", f);
|
|
|
|
if (!err)
|
|
|
|
err = tb_printinternal((PyTracebackObject *)v, f, limit);
|
|
|
|
return err;
|
1990-12-20 11:06:42 -04:00
|
|
|
}
|