mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	#3342: In tracebacks, printed source lines were not indented since r62555.
#3343: Py_DisplaySourceLine should be a private function. Rename it to _Py_DisplaySourceLine.
This commit is contained in:
		
							parent
							
								
									ae6d2b9175
								
							
						
					
					
						commit
						2252d11c08
					
				
					 4 changed files with 24 additions and 9 deletions
				
			
		|  | @ -19,7 +19,7 @@ typedef struct _traceback { | |||
| 
 | ||||
| PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *); | ||||
| PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *); | ||||
| PyAPI_FUNC(int) Py_DisplaySourceLine(PyObject *, const char *, int); | ||||
| PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, const char *, int, int); | ||||
| 
 | ||||
| /* Reveal traceback type so we can typecheck traceback objects */ | ||||
| PyAPI_DATA(PyTypeObject) PyTraceBack_Type; | ||||
|  |  | |||
|  | @ -177,7 +177,7 @@ def test_traceback_indentation(self): | |||
|         banner, location, source_line = tb_lines | ||||
|         self.assert_(banner.startswith('Traceback')) | ||||
|         self.assert_(location.startswith('  File')) | ||||
|         self.assert_(source_line.startswith('raise')) | ||||
|         self.assert_(source_line.startswith('    raise')) | ||||
| 
 | ||||
| 
 | ||||
| def test_main(): | ||||
|  |  | |||
|  | @ -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(); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Amaury Forgeot d'Arc
						Amaury Forgeot d'Arc