[Python-checkins] python/dist/src/Python bltinmodule.c,2.246.4.5,2.246.4.6

mwh@users.sourceforge.net mwh@users.sourceforge.net
2002年10月07日 05:32:59 -0700


Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv32278/Python
Modified Files:
 Tag: release22-maint
	bltinmodule.c 
Log Message:
Backport:
2002年08月11日 12:23:04 lemburg Python/bltinmodule.c 2.262
2002年08月11日 12:23:04 lemburg Objects/unicodeobject.c 2.162
2002年08月11日 12:23:03 lemburg Misc/NEWS 1.461
2002年08月11日 12:23:03 lemburg Lib/test/test_unicode.py 1.65
2002年08月11日 12:23:03 lemburg Include/unicodeobject.h 2.39
Add C API PyUnicode_FromOrdinal() which exposes unichr() at C level.
u'%c' will now raise a ValueError in case the argument is an
integer outside the valid range of Unicode code point ordinals.
Closes SF bug #593581.
Index: bltinmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/bltinmodule.c,v
retrieving revision 2.246.4.5
retrieving revision 2.246.4.6
diff -C2 -d -r2.246.4.5 -r2.246.4.6
*** bltinmodule.c	24 Sep 2002 11:23:05 -0000	2.246.4.5
--- bltinmodule.c	7 Oct 2002 12:32:57 -0000	2.246.4.6
***************
*** 302,343 ****
 {
 	long x;
- 	Py_UNICODE s[2];
 
 	if (!PyArg_ParseTuple(args, "l:unichr", &x))
 		return NULL;
 
! #ifdef Py_UNICODE_WIDE
! 	if (x < 0 || x > 0x10ffff) {
! 		PyErr_SetString(PyExc_ValueError,
! 				"unichr() arg not in range(0x110000) "
! 				"(wide Python build)");
! 		return NULL;
! 	}
! #else
! 	if (x < 0 || x > 0xffff) {
! 		PyErr_SetString(PyExc_ValueError,
! 				"unichr() arg not in range(0x10000) "
! 				"(narrow Python build)");
! 		return NULL;
! 	}
! #endif
! 
! 	if (x <= 0xffff) {
! 		/* UCS-2 character */
! 		s[0] = (Py_UNICODE) x;
! 		return PyUnicode_FromUnicode(s, 1);
! 	}
! 	else {
! #ifndef Py_UNICODE_WIDE
! 		/* UCS-4 character. store as two surrogate characters */
! 		x -= 0x10000L;
! 		s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
! 		s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
! 		return PyUnicode_FromUnicode(s, 2);
! #else
! 		s[0] = (Py_UNICODE)x;
! 		return PyUnicode_FromUnicode(s, 1);
! #endif
! 	}
 }
 
--- 302,310 ----
 {
 	long x;
 
 	if (!PyArg_ParseTuple(args, "l:unichr", &x))
 		return NULL;
 
! 	return PyUnicode_FromOrdinal(x);
 }
 

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