[Python-3000-checkins] r57504 - in python/branches/py3k: Objects/typeobject.c Python/import.c

neal.norwitz python-3000-checkins at python.org
Sun Aug 26 08:45:23 CEST 2007


Author: neal.norwitz
Date: Sun Aug 26 08:45:23 2007
New Revision: 57504

Modified:
   python/branches/py3k/Objects/typeobject.c
   python/branches/py3k/Python/import.c
Log:
Use unicode and remove support for some uses of str8.

Modified: python/branches/py3k/Objects/typeobject.c
==============================================================================
--- python/branches/py3k/Objects/typeobject.c	(original)
+++ python/branches/py3k/Objects/typeobject.c	Sun Aug 26 08:45:23 2007
@@ -44,6 +44,7 @@
 type_set_name(PyTypeObject *type, PyObject *value, void *context)
 {
 	PyHeapTypeObject* et;
+	char *tp_name;
 
 	if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
 		PyErr_Format(PyExc_TypeError,
@@ -61,11 +62,10 @@
 			     type->tp_name, Py_Type(value)->tp_name);
 		return -1;
 	}
-	value = _PyUnicode_AsDefaultEncodedString(value, NULL);
-	if (value == NULL)
+	tp_name = PyUnicode_AsString(value);
+	if (tp_name == NULL)
 		return -1;
-	if (strlen(PyString_AS_STRING(value))
-	    != (size_t)PyString_GET_SIZE(value)) {
+	if (strlen(tp_name) != (size_t)PyUnicode_GET_SIZE(value)) {
 		PyErr_Format(PyExc_ValueError,
 			     "__name__ must not contain null bytes");
 		return -1;
@@ -78,7 +78,7 @@
 	Py_DECREF(et->ht_name);
 	et->ht_name = value;
 
-	type->tp_name = PyString_AS_STRING(value);
+	type->tp_name = tp_name;
 
 	return 0;
 }
@@ -1736,7 +1736,7 @@
 		/* Have slots */
 
 		/* Make it into a tuple */
-		if (PyString_Check(slots) || PyUnicode_Check(slots))
+		if (PyUnicode_Check(slots))
 			slots = PyTuple_Pack(1, slots);
 		else
 			slots = PySequence_Tuple(slots);
@@ -1875,14 +1875,10 @@
 	type->tp_as_sequence = &et->as_sequence;
 	type->tp_as_mapping = &et->as_mapping;
 	type->tp_as_buffer = &et->as_buffer;
-	if (PyString_Check(name))
-		type->tp_name = PyString_AsString(name);
-	else {
-		type->tp_name = PyUnicode_AsString(name);
-		if (!type->tp_name) {
-			Py_DECREF(type);
-			return NULL;
-		}
+	type->tp_name = PyUnicode_AsString(name);
+	if (!type->tp_name) {
+		Py_DECREF(type);
+		return NULL;
 	}
 
 	/* Set tp_base and tp_bases */

Modified: python/branches/py3k/Python/import.c
==============================================================================
--- python/branches/py3k/Python/import.c	(original)
+++ python/branches/py3k/Python/import.c	Sun Aug 26 08:45:23 2007
@@ -453,8 +453,8 @@
 		while (PyDict_Next(modules, &pos, &key, &value)) {
 			if (value->ob_refcnt != 1)
 				continue;
-			if (PyString_Check(key) && PyModule_Check(value)) {
-				name = PyString_AS_STRING(key);
+			if (PyUnicode_Check(key) && PyModule_Check(value)) {
+				name = PyUnicode_AsString(key);
 				if (strcmp(name, "__builtin__") == 0)
 					continue;
 				if (strcmp(name, "sys") == 0)
@@ -472,8 +472,8 @@
 	/* Next, delete all modules (still skipping __builtin__ and sys) */
 	pos = 0;
 	while (PyDict_Next(modules, &pos, &key, &value)) {
-		if (PyString_Check(key) && PyModule_Check(value)) {
-			name = PyString_AS_STRING(key);
+		if (PyUnicode_Check(key) && PyModule_Check(value)) {
+			name = PyUnicode_AsString(key);
 			if (strcmp(name, "__builtin__") == 0)
 				continue;
 			if (strcmp(name, "sys") == 0)
@@ -2008,30 +2008,21 @@
 	*buf = '\0';
 	*p_buflen = 0;
 	modname = PyDict_GetItem(globals, namestr);
-	if (modname == NULL || (!PyString_Check(modname) && !PyUnicode_Check(modname)))
+	if (modname == NULL || !PyUnicode_Check(modname))
 		return Py_None;
 
-	if (PyUnicode_Check(modname)) {
-		/* XXX need to support Unicode better */
-		modname = _PyUnicode_AsDefaultEncodedString(modname, NULL);
-		if (!modname) {
-			PyErr_Clear();
-			return NULL;
-		}
-	}
-
 	modpath = PyDict_GetItem(globals, pathstr);
 	if (modpath != NULL) {
-		Py_ssize_t len = PyString_GET_SIZE(modname);
+		Py_ssize_t len = PyUnicode_GET_SIZE(modname);
 		if (len > MAXPATHLEN) {
 			PyErr_SetString(PyExc_ValueError,
 					"Module name too long");
 			return NULL;
 		}
-		strcpy(buf, PyString_AS_STRING(modname));
+		strcpy(buf, PyUnicode_AsString(modname));
 	}
 	else {
-		char *start = PyString_AS_STRING(modname);
+		char *start = PyUnicode_AsString(modname);
 		char *lastdot = strrchr(start, '.');
 		size_t len;
 		if (lastdot == NULL && level > 0) {
@@ -2174,19 +2165,9 @@
 			}
 			return 0;
 		}
-		if (PyString_Check(item)) {
-			/* XXX there shouldn't be any str8 objects here */
-			PyObject *uni = PyUnicode_DecodeASCII(PyString_AsString(item),
-							      PyString_Size(item),
-							      "strict");
-			Py_DECREF(item);
-			if (!uni)
-				return 0;
-			item = uni;
-		}
 		if (!PyUnicode_Check(item)) {
 			PyErr_SetString(PyExc_TypeError,
-					"Item in ``from list'' not a unicode string");
+					"Item in ``from list'' not a string");
 			Py_DECREF(item);
 			return 0;
 		}
@@ -2444,7 +2425,7 @@
    done using whatever import hooks are installed in the current
    environment, e.g. by "rexec".
    A dummy list ["__doc__"] is passed as the 4th argument so that
-   e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
+   e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
    will return <module "gencache"> instead of <module "win32com">. */
 
 PyObject *


More information about the Python-3000-checkins mailing list