mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	SF patch# 1755885 by Kurt Kaiser: show location of Unicode escape errors.
(Slightly tweaked for style and refcounts.)
This commit is contained in:
		
							parent
							
								
									a3a4c2f411
								
							
						
					
					
						commit
						b6ac23cd07
					
				
					 2 changed files with 25 additions and 2 deletions
				
			
		|  | @ -474,6 +474,12 @@ def test_compile_error(self): | |||
|         st = parser.suite('1 = 3 + 4') | ||||
|         self.assertRaises(SyntaxError, parser.compilest, st) | ||||
| 
 | ||||
|     def test_compile_badunicode(self): | ||||
|         st = parser.suite('a = u"\U12345678"') | ||||
|         self.assertRaises(SyntaxError, parser.compilest, st) | ||||
|         st = parser.suite('a = u"\u1"') | ||||
|         self.assertRaises(SyntaxError, parser.compilest, st) | ||||
| 
 | ||||
| def test_main(): | ||||
|     test_support.run_unittest( | ||||
|         RoundtripLegalSyntaxTestCase, | ||||
|  |  | |||
							
								
								
									
										21
									
								
								Python/ast.c
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								Python/ast.c
									
										
									
									
									
								
							|  | @ -1243,9 +1243,26 @@ ast_for_atom(struct compiling *c, const node *n) | |||
|                     c->c_arena); | ||||
|     case STRING: { | ||||
|         PyObject *str = parsestrplus(c, n); | ||||
|         if (!str) | ||||
|         if (!str) { | ||||
|             if (PyErr_ExceptionMatches(PyExc_UnicodeError)){ | ||||
|                 PyObject *type, *value, *tback, *errstr; | ||||
|                 PyErr_Fetch(&type, &value, &tback); | ||||
|                 errstr = ((PyUnicodeErrorObject *)value)->reason; | ||||
|                 if (errstr) { | ||||
|                     char *s = ""; | ||||
|                     char buf[128]; | ||||
|                     s = PyString_AsString(errstr); | ||||
|                     PyOS_snprintf(buf, sizeof(buf), "(unicode error) %s", s); | ||||
|                     ast_error(n, buf); | ||||
|                 } else { | ||||
|                     ast_error(n, "(unicode error) unknown error"); | ||||
|                 } | ||||
|                 Py_DECREF(type); | ||||
|                 Py_DECREF(value); | ||||
|                 Py_XDECREF(tback); | ||||
|             } | ||||
|             return NULL; | ||||
| 
 | ||||
|         } | ||||
|         PyArena_AddPyObject(c->c_arena, str); | ||||
|         return Str(str, LINENO(n), n->n_col_offset, c->c_arena); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum