[Python-checkins] python/dist/src/Python ast.c,1.1.2.15,1.1.2.16

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
2003年3月25日 11:24:46 -0800


Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1:/tmp/cvs-serv12526/Python
Modified Files:
 Tag: ast-branch
	ast.c 
Log Message:
Trimmed trailing whitespace; added a comment for parsestr().
Index: ast.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/Attic/ast.c,v
retrieving revision 1.1.2.15
retrieving revision 1.1.2.16
diff -C2 -d -r1.1.2.15 -r1.1.2.16
*** ast.c	25 Mar 2003 19:09:16 -0000	1.1.2.15
--- ast.c	25 Mar 2003 19:24:42 -0000	1.1.2.16
***************
*** 36,44 ****
 Use this routine to determine how big a sequence is needed for
 the statements in a parse tree. Its raison d'etre is this bit of
! grammar: 
 
 stmt: simple_stmt | compound_stmt
 simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
! 
 A simple_stmt can contain multiple small_stmt elements joined
 by semicolons. If the arg is a simple_stmt, the number of
--- 36,44 ----
 Use this routine to determine how big a sequence is needed for
 the statements in a parse tree. Its raison d'etre is this bit of
! grammar:
 
 stmt: simple_stmt | compound_stmt
 simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
! 
 A simple_stmt can contain multiple small_stmt elements joined
 by semicolons. If the arg is a simple_stmt, the number of
***************
*** 112,116 ****
 	 if (num == 1) {
 		s = ast_for_stmt(ch);
! 		if (!s) 
 		 goto error;
 		asdl_seq_APPEND(stmts, s);
--- 112,116 ----
 	 if (num == 1) {
 		s = ast_for_stmt(ch);
! 		if (!s)
 		 goto error;
 		asdl_seq_APPEND(stmts, s);
***************
*** 160,164 ****
 		}
 	 }
! 	 
 	 return Interactive(stmts);
 	}
--- 160,164 ----
 		}
 	 }
! 
 	 return Interactive(stmts);
 	}
***************
*** 254,260 ****
 n = CHILD(n, 0);
 switch (STR(n)[0]) {
! case '+': 
 	return Add;
! case '-': 
 	return Sub;
 case '/':
--- 254,260 ----
 n = CHILD(n, 0);
 switch (STR(n)[0]) {
! case '+':
 	return Add;
! case '-':
 	return Sub;
 case '/':
***************
*** 263,277 ****
 	else
 	 return Div;
! case '%': 
 	return Mod;
! case '<': 
 	return LShift;
! case '>': 
 	return RShift;
! case '&': 
 	return BitAnd;
! case '^': 
 	return BitXor;
! case '|': 
 	return BitOr;
 case '*':
--- 263,277 ----
 	else
 	 return Div;
! case '%':
 	return Mod;
! case '<':
 	return LShift;
! case '>':
 	return RShift;
! case '&':
 	return BitAnd;
! case '^':
 	return BitXor;
! case '|':
 	return BitOr;
 case '*':
***************
*** 296,316 ****
 	n = CHILD(n, 0);
 	switch (TYPE(n)) {
! 	case LESS:	
 	 return Lt;
! 	case GREATER:	
 	 return Gt;
 	case EQEQUAL:			/* == */
 	case EQUAL:
 	 return Eq;
! 	case LESSEQUAL:	
 	 return LtE;
! 	case GREATEREQUAL: 
 	 return GtE;
! 	case NOTEQUAL:	
 	 return NotEq;
! 	case NAME:	
! 	 if (strcmp(STR(n), "in") == 0) 
 		return In;
! 	 if (strcmp(STR(n), "is") == 0) 
 		return Is;
 	}
--- 296,316 ----
 	n = CHILD(n, 0);
 	switch (TYPE(n)) {
! 	case LESS:
 	 return Lt;
! 	case GREATER:
 	 return Gt;
 	case EQEQUAL:			/* == */
 	case EQUAL:
 	 return Eq;
! 	case LESSEQUAL:
 	 return LtE;
! 	case GREATEREQUAL:
 	 return GtE;
! 	case NOTEQUAL:
 	 return NotEq;
! 	case NAME:
! 	 if (strcmp(STR(n), "in") == 0)
 		return In;
! 	 if (strcmp(STR(n), "is") == 0)
 		return Is;
 	}
***************
*** 319,323 ****
 	/* handle "not in" and "is not" */
 	switch (TYPE(CHILD(n, 0))) {
! 	case NAME:	
 	 if (strcmp(STR(CHILD(n, 1)), "in") == 0)
 		return NotIn;
--- 319,323 ----
 	/* handle "not in" and "is not" */
 	switch (TYPE(CHILD(n, 0))) {
! 	case NAME:
 	 if (strcmp(STR(CHILD(n, 1)), "in") == 0)
 		return NotIn;
***************
*** 353,357 ****
 
 /* parameters: '(' [varargslist] ')'
! varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' '**' NAME] 
 | '**' NAME) | fpdef ['=' test] (',' fpdef ['=' test])* [',']
 */
--- 353,357 ----
 
 /* parameters: '(' [varargslist] ')'
! varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' '**' NAME]
 | '**' NAME) | fpdef ['=' test] (',' fpdef ['=' test])* [',']
 */
***************
*** 432,436 ****
 /* lambdef: 'lambda' [varargslist] ':' test */
 if (NCH(n) == 3)
! 	return Lambda(arguments(NULL, NULL, NULL, NULL), 
 		 ast_for_expr(CHILD(n, 2)));
 else
--- 432,436 ----
 /* lambdef: 'lambda' [varargslist] ':' test */
 if (NCH(n) == 3)
! 	return Lambda(arguments(NULL, NULL, NULL, NULL),
 		 ast_for_expr(CHILD(n, 2)));
 else
***************
*** 487,491 ****
 ast_for_listcomp(const node *n)
 {
! /* listmaker: test ( list_for | (',' test)* [','] ) 
 list_for: 'for' exprlist 'in' testlist_safe [list_iter]
 list_iter: list_for | list_if
--- 487,491 ----
 ast_for_listcomp(const node *n)
 {
! /* listmaker: test ( list_for | (',' test)* [','] )
 list_for: 'for' exprlist 'in' testlist_safe [list_iter]
 list_iter: list_for | list_if
***************
*** 500,504 ****
 REQ(n, listmaker);
 assert(NCH(n) > 1);
! 
 target = ast_for_expr(CHILD(n, 0));
 if (!target)
--- 500,504 ----
 REQ(n, listmaker);
 assert(NCH(n) > 1);
! 
 target = ast_for_expr(CHILD(n, 0));
 if (!target)
***************
*** 515,519 ****
 	t = ast_for_exprlist(CHILD(ch, 1), Store);
 	if (asdl_seq_LEN(t) == 1)
! 	 c = listcomp(asdl_seq_GET(t, 0), 
 			 ast_for_testlist(CHILD(ch, 3)), NULL);
 	else
--- 515,519 ----
 	t = ast_for_exprlist(CHILD(ch, 1), Store);
 	if (asdl_seq_LEN(t) == 1)
! 	 c = listcomp(asdl_seq_GET(t, 0),
 			 ast_for_testlist(CHILD(ch, 3)), NULL);
 	else
***************
*** 547,552 ****
 ast_for_atom(const node *n)
 {
! /* atom: '(' [testlist] ')' | '[' [listmaker] ']' 
! | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+ 
 */
 node *ch = CHILD(n, 0);
--- 547,552 ----
 ast_for_atom(const node *n)
 {
! /* atom: '(' [testlist] ')' | '[' [listmaker] ']'
! | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+
 */
 node *ch = CHILD(n, 0);
***************
*** 619,623 ****
 if (NCH(n) == 1 && TYPE(ch) == test)
 	return Index(ast_for_expr(ch));
! 
 if (TYPE(ch) == test)
 	lower = ast_for_expr(ch);
--- 619,623 ----
 if (NCH(n) == 1 && TYPE(ch) == test)
 	return Index(ast_for_expr(ch));
! 
 if (TYPE(ch) == test)
 	lower = ast_for_expr(ch);
***************
*** 645,649 ****
 	 step = ast_for_expr(ch);
 }
! 
 return Slice(lower, upper, step);
 }
--- 645,649 ----
 	 step = ast_for_expr(ch);
 }
! 
 return Slice(lower, upper, step);
 }
***************
*** 713,717 ****
 	 for (i = 1; i < NCH(n); i += 2) {
 		/* XXX cmpop_ty is just an enum */
! 		asdl_seq_SET(ops, i / 2, 
 			 (void *)ast_for_comp_op(CHILD(n, i)));
 		asdl_seq_SET(cmps, i / 2, ast_for_expr(CHILD(n, i + 1)));
--- 713,717 ----
 	 for (i = 1; i < NCH(n); i += 2) {
 		/* XXX cmpop_ty is just an enum */
! 		asdl_seq_SET(ops, i / 2,
 			 (void *)ast_for_comp_op(CHILD(n, i)));
 		asdl_seq_SET(cmps, i / 2, ast_for_expr(CHILD(n, i + 1)));
***************
*** 760,764 ****
 	if (NCH(n) == 1)
 	 return e;
! 	/* power: atom trailer* ('**' factor)* 
 trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME */
 	if (TYPE(CHILD(n, NCH(n) - 1)) == factor) {
--- 760,764 ----
 	if (NCH(n) == 1)
 	 return e;
! 	/* power: atom trailer* ('**' factor)*
 trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME */
 	if (TYPE(CHILD(n, NCH(n) - 1)) == factor) {
***************
*** 784,788 ****
 		 asdl_seq *slices = asdl_seq_new(NCH(ch) / 2);
 		 for (j = 0; j < NCH(ch); j += 2)
! 			asdl_seq_SET(slices, j / 2, 
 				 ast_for_slice(CHILD(ch, j)));
 		 new = Subscript(e, ExtSlice(slices), Load);
--- 784,788 ----
 		 asdl_seq *slices = asdl_seq_new(NCH(ch) / 2);
 		 for (j = 0; j < NCH(ch); j += 2)
! 			asdl_seq_SET(slices, j / 2,
 				 ast_for_slice(CHILD(ch, j)));
 		 new = Subscript(e, ExtSlice(slices), Load);
***************
*** 806,814 ****
 }
 
! static expr_ty 
 ast_for_call(const node *n, expr_ty func)
 {
 /*
! arglist: (argument ',')* (argument [',']| '*' test [',' '**' test] 
 | '**' test)
 argument: [test '='] test	# Really [keyword '='] test
--- 806,814 ----
 }
 
! static expr_ty
 ast_for_call(const node *n, expr_ty func)
 {
 /*
! arglist: (argument ',')* (argument [',']| '*' test [',' '**' test]
 | '**' test)
 argument: [test '='] test	# Really [keyword '='] test
***************
*** 837,841 ****
 	}
 }
! 
 
 /* XXX syntax error if more than 255 arguments */
--- 837,841 ----
 	}
 }
! 
 
 /* XXX syntax error if more than 255 arguments */
***************
*** 848,855 ****
 /* n could be a testlist, a listmaker with no list_for, or
 a testlist1 from inside backquotes. */
! 
 if (NCH(n) == 1)
 	return ast_for_expr(CHILD(n, 0));
! else 
 	return Tuple(seq_for_testlist(n), Load);
 }
--- 848,855 ----
 /* n could be a testlist, a listmaker with no list_for, or
 a testlist1 from inside backquotes. */
! 
 if (NCH(n) == 1)
 	return ast_for_expr(CHILD(n, 0));
! else
 	return Tuple(seq_for_testlist(n), Load);
 }
***************
*** 859,867 ****
 {
 REQ(n, expr_stmt);
! /* expr_stmt: testlist (augassign testlist | ('=' testlist)*) 
 testlist: test (',' test)* [',']
! augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' 
 	 | '<<=' | '>>=' | '**=' | '//='
! test: ... here starts the operator precendence dance 
 */
 
--- 859,867 ----
 {
 REQ(n, expr_stmt);
! /* expr_stmt: testlist (augassign testlist | ('=' testlist)*)
 testlist: test (',' test)* [',']
! augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^='
 	 | '<<=' | '>>=' | '**=' | '//='
! test: ... here starts the operator precendence dance
 */
 
***************
*** 900,905 ****
 ast_for_print_stmt(const node *n)
 {
! /* print_stmt: 'print' ( [ test (',' test)* [','] ] 
! | '>>' test [ (',' test)+ [','] ] ) 
 */
 expr_ty dest = NULL;
--- 900,905 ----
 ast_for_print_stmt(const node *n)
 {
! /* print_stmt: 'print' ( [ test (',' test)* [','] ]
! | '>>' test [ (',' test)+ [','] ] )
 */
 expr_ty dest = NULL;
***************
*** 955,959 ****
 {
 /*
! flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt 
 | yield_stmt
 break_stmt: 'break'
--- 955,959 ----
 {
 /*
! flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt
 | yield_stmt
 break_stmt: 'break'
***************
*** 985,994 ****
 	 return Raise(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
 	else if (NCH(ch) == 4)
! 	 return Raise(ast_for_expr(CHILD(n, 1)), 
! 			 ast_for_expr(CHILD(n, 3)), 
 			 NULL, LINENO(n));
 	else if (NCH(ch) == 6)
! 	 return Raise(ast_for_expr(CHILD(n, 1)), 
! 			 ast_for_expr(CHILD(n, 3)), 
 			 ast_for_expr(CHILD(n, 5)), LINENO(n));
 default:
--- 985,994 ----
 	 return Raise(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
 	else if (NCH(ch) == 4)
! 	 return Raise(ast_for_expr(CHILD(n, 1)),
! 			 ast_for_expr(CHILD(n, 3)),
 			 NULL, LINENO(n));
 	else if (NCH(ch) == 6)
! 	 return Raise(ast_for_expr(CHILD(n, 1)),
! 			 ast_for_expr(CHILD(n, 3)),
 			 ast_for_expr(CHILD(n, 5)), LINENO(n));
 default:
***************
*** 1037,1041 ****
 
 	 len = 0;
! 	 for (i = 0; i < NCH(n); i += 2) 
 		/* length of string plus one for the dot */
 		len += strlen(STR(CHILD(n, i))) + 1;
--- 1037,1041 ----
 
 	 len = 0;
! 	 for (i = 0; i < NCH(n); i += 2)
 		/* length of string plus one for the dot */
 		len += strlen(STR(CHILD(n, i))) + 1;
***************
*** 1067,1072 ****
 {
 /*
! import_stmt: 'import' dotted_as_name (',' dotted_as_name)* 
! | 'from' dotted_name 'import' ('*' 
 | import_as_name (',' import_as_name)*)
 */
--- 1067,1072 ----
 {
 /*
! import_stmt: 'import' dotted_as_name (',' dotted_as_name)*
! | 'from' dotted_name 'import' ('*'
 | import_as_name (',' import_as_name)*)
 */
***************
*** 1117,1124 ****
 	return Exec(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
 else if (NCH(n) == 4)
! 	return Exec(ast_for_expr(CHILD(n, 1)), 
 		 ast_for_expr(CHILD(n, 3)), NULL, LINENO(n));
 else if (NCH(n) == 6)
! 	return Exec(ast_for_expr(CHILD(n, 1)), 
 		 ast_for_expr(CHILD(n, 3)),
 		 ast_for_expr(CHILD(n, 5)), LINENO(n));
--- 1117,1124 ----
 	return Exec(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
 else if (NCH(n) == 4)
! 	return Exec(ast_for_expr(CHILD(n, 1)),
 		 ast_for_expr(CHILD(n, 3)), NULL, LINENO(n));
 else if (NCH(n) == 6)
! 	return Exec(ast_for_expr(CHILD(n, 1)),
 		 ast_for_expr(CHILD(n, 3)),
 		 ast_for_expr(CHILD(n, 5)), LINENO(n));
***************
*** 1199,1203 ****
 ast_for_if_stmt(const node *n)
 {
! /* if_stmt: 'if' test ':' suite ('elif' test ':' suite)* 
 ['else' ':' suite]
 */
--- 1199,1203 ----
 ast_for_if_stmt(const node *n)
 {
! /* if_stmt: 'if' test ':' suite ('elif' test ':' suite)*
 ['else' ':' suite]
 */
***************
*** 1210,1218 ****
 		 ast_for_suite(CHILD(n, 3)), NULL, LINENO(n));
 s = STR(CHILD(n, 4));
! /* s[2], the third character in the string, will be 
 's' for el_s_e, or
 'i' for el_i_f
 */
! if (s[2] == 's') 
 	return If(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)),
--- 1210,1218 ----
 		 ast_for_suite(CHILD(n, 3)), NULL, LINENO(n));
 s = STR(CHILD(n, 4));
! /* s[2], the third character in the string, will be
 's' for el_s_e, or
 'i' for el_i_f
 */
! if (s[2] == 's')
 	return If(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)),
***************
*** 1222,1226 ****
 	asdl_seq *orelse = NULL;
 	n_elif = NCH(n) - 4;
! 	if (TYPE(CHILD(n, n_elif)) == NAME 
 	 && STR(CHILD(n, n_elif))[2] == 's') {
 	 has_else = 1;
--- 1222,1226 ----
 	asdl_seq *orelse = NULL;
 	n_elif = NCH(n) - 4;
! 	if (TYPE(CHILD(n, n_elif)) == NAME
 	 && STR(CHILD(n, n_elif))[2] == 's') {
 	 has_else = 1;
***************
*** 1234,1238 ****
 			 If(ast_for_expr(CHILD(n, NCH(n) - 6)),
 			 ast_for_suite(CHILD(n, NCH(n) - 4)),
! 			 ast_for_suite(CHILD(n, NCH(n) - 1)), 
 			 LINENO(n)));
 	 /* the just-created orelse handled the last elif */
--- 1234,1238 ----
 			 If(ast_for_expr(CHILD(n, NCH(n) - 6)),
 			 ast_for_suite(CHILD(n, NCH(n) - 4)),
! 			 ast_for_suite(CHILD(n, NCH(n) - 1)),
 			 LINENO(n)));
 	 /* the just-created orelse handled the last elif */
***************
*** 1240,1244 ****
 	} else
 	 orelse = NULL;
! 			
 	for (i = 0; i < n_elif; i++) {
 	 int off = 5 + (n_elif - i - 1) * 4;
--- 1240,1244 ----
 	} else
 	 orelse = NULL;
! 
 	for (i = 0; i < n_elif; i++) {
 	 int off = 5 + (n_elif - i - 1) * 4;
***************
*** 1254,1258 ****
 		 orelse, LINENO(n));
 }
! 
 return NULL;
 }
--- 1254,1258 ----
 		 orelse, LINENO(n));
 }
! 
 return NULL;
 }
***************
*** 1269,1273 ****
 else
 	return While(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_suite(CHILD(n, 3)), 
 		 ast_for_suite(CHILD(n, 6)), LINENO(n));
 
--- 1269,1273 ----
 else
 	return While(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_suite(CHILD(n, 3)),
 		 ast_for_suite(CHILD(n, 6)), LINENO(n));
 
***************
*** 1311,1315 ****
 	return excepthandler(NULL, NULL, ast_for_suite(body));
 else if (NCH(exc) == 2)
! 	return excepthandler(ast_for_expr(CHILD(exc, 1)), NULL, 
 			 ast_for_suite(body));
 else {
--- 1311,1315 ----
 	return excepthandler(NULL, NULL, ast_for_suite(body));
 else if (NCH(exc) == 2)
! 	return excepthandler(ast_for_expr(CHILD(exc, 1)), NULL,
 			 ast_for_suite(body));
 else {
***************
*** 1332,1337 ****
 			 ast_for_suite(CHILD(n, 5)), LINENO(n));
 } else {
! 	/* try_stmt: ('try' ':' suite (except_clause ':' suite)+ 
! ['else' ':' suite] 
 	*/
 	asdl_seq *handlers;
--- 1332,1337 ----
 			 ast_for_suite(CHILD(n, 5)), LINENO(n));
 } else {
! 	/* try_stmt: ('try' ':' suite (except_clause ':' suite)+
! ['else' ':' suite]
 	*/
 	asdl_seq *handlers;
***************
*** 1361,1365 ****
 asdl_seq *bases;
 REQ(n, classdef);
! if (NCH(n) == 4) 
 	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL,
 			ast_for_suite(CHILD(n, 3)), LINENO(n));
--- 1361,1365 ----
 asdl_seq *bases;
 REQ(n, classdef);
! if (NCH(n) == 4)
 	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL,
 			ast_for_suite(CHILD(n, 3)), LINENO(n));
***************
*** 1393,1398 ****
 	REQ(n, small_stmt);
 	n = CHILD(n, 0);
! 	/* small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt 
! 	 | flow_stmt | import_stmt | global_stmt | exec_stmt 
 | assert_stmt
 	*/
--- 1393,1398 ----
 	REQ(n, small_stmt);
 	n = CHILD(n, 0);
! 	/* small_stmt: expr_stmt | print_stmt | del_stmt | pass_stmt
! 	 | flow_stmt | import_stmt | global_stmt | exec_stmt
 | assert_stmt
 	*/
***************
*** 1420,1424 ****
 	}
 } else {
! /* compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt 
 	 | funcdef | classdef
 	*/
--- 1420,1424 ----
 	}
 } else {
! /* compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt
 	 | funcdef | classdef
 	*/
***************
*** 1492,1495 ****
--- 1492,1499 ----
 }
 
+ /* s is a Python string literal, including the bracketing quote characters,
+ * and r &/or u prefixes (if any), and embedded escape sequences (if any).
+ * parsestr parses it, and returns the decoded Python string object.
+ */
 static PyObject *
 parsestr(const char *s)
***************
*** 1523,1527 ****
 	len = strlen(s);
 	if (len > INT_MAX) {
! 		PyErr_SetString(PyExc_OverflowError, 
 			 "string to parse is too long");
 		return NULL;
--- 1527,1531 ----
 	len = strlen(s);
 	if (len > INT_MAX) {
! 		PyErr_SetString(PyExc_OverflowError,
 			 "string to parse is too long");
 		return NULL;
***************
*** 1548,1552 ****
 				s, len, NULL);
 		return v;
! 			
 	}
 #endif
--- 1552,1556 ----
 				s, len, NULL);
 		return v;
! 
 	}
 #endif
***************
*** 1588,1592 ****
 			break;
 		case 'x':
! 			if (isxdigit(Py_CHARMASK(s[0])) 
 			 && isxdigit(Py_CHARMASK(s[1]))) {
 				unsigned int x = 0;
--- 1592,1596 ----
 			break;
 		case 'x':
! 			if (isxdigit(Py_CHARMASK(s[0]))
 			 && isxdigit(Py_CHARMASK(s[1]))) {
 				unsigned int x = 0;
***************
*** 1612,1616 ****
 			}
 			Py_DECREF(v);
! 			PyErr_SetString(PyExc_ValueError, 
 				 "invalid \\x escape");
 			return NULL;
--- 1616,1620 ----
 			}
 			Py_DECREF(v);
! 			PyErr_SetString(PyExc_ValueError,
 				 "invalid \\x escape");
 			return NULL;

AltStyle によって変換されたページ (->オリジナル) /