diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-07-11 21:45:06 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-07-11 21:45:06 (GMT) |
commit | 2252d11c08643279ffe58e99f6c8d04014079a7f (patch) | |
tree | 1561d7ccea92517daac9b7d5877426b17f15b107 /Python | |
parent | ae6d2b917520f441eb8538466c0b848047dd58f2 (diff) | |
download | cpython-2252d11c08643279ffe58e99f6c8d04014079a7f.zip cpython-2252d11c08643279ffe58e99f6c8d04014079a7f.tar.gz cpython-2252d11c08643279ffe58e99f6c8d04014079a7f.tar.bz2 |
#3342: In tracebacks, printed source lines were not indented since r62555.
#3343: Py_DisplaySourceLine should be a private function. Rename it to _Py_DisplaySourceLine.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/_warnings.c | 4 | ||||
-rw-r--r-- | Python/traceback.c | 25 |
2 files changed, 22 insertions, 7 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c index 07b98ef..5ed8b55 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -256,7 +256,6 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject Py_XDECREF(name); /* Print " source_line\n" */ - PyFile_WriteString(" ", f_stderr); if (sourceline) { char *source_line_str = PyString_AS_STRING(sourceline); while (*source_line_str == ' ' || *source_line_str == '\t' || @@ -267,7 +266,8 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject PyFile_WriteString("\n", f_stderr); } else - Py_DisplaySourceLine(f_stderr, PyString_AS_STRING(filename), lineno); + _Py_DisplaySourceLine(f_stderr, PyString_AS_STRING(filename), + lineno, 2); PyErr_Clear(); } diff --git a/Python/traceback.c b/Python/traceback.c index a481963..5df7694 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -123,7 +123,7 @@ PyTraceBack_Here(PyFrameObject *frame) } int -Py_DisplaySourceLine(PyObject *f, const char *filename, int lineno) +_Py_DisplaySourceLine(PyObject *f, const char *filename, int lineno, int indent) { int err = 0; FILE *xfp = NULL; @@ -197,12 +197,27 @@ Py_DisplaySourceLine(PyObject *f, const char *filename, int lineno) } while (*pLastChar != '\0' && *pLastChar != '\n'); } if (i == lineno) { + char buf[11]; char *p = linebuf; while (*p == ' ' || *p == '\t' || *p == '\014') p++; - err = PyFile_WriteString(p, f); - if (err == 0 && strchr(p, '\n') == NULL) - err = PyFile_WriteString("\n", f); + + /* 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; + } + + if (err == 0) + err = PyFile_WriteString(p, f); + if (err == 0 && strchr(p, '\n') == NULL) + err = PyFile_WriteString("\n", f); } fclose(xfp); return err; @@ -222,7 +237,7 @@ tb_displayline(PyObject *f, const char *filename, int lineno, const char *name) err = PyFile_WriteString(linebuf, f); if (err != 0) return err; - return Py_DisplaySourceLine(f, filename, lineno); + return _Py_DisplaySourceLine(f, filename, lineno, 4); } static int |