diff options
Diffstat (limited to 'Python/traceback.c')
| -rw-r--r-- | Python/traceback.c | 25 | 
1 files changed, 20 insertions, 5 deletions
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  | 
