[Python-3000-checkins] r58811 - python/branches/py3k-pep3137/Objects/longobject.c

guido.van.rossum python-3000-checkins at python.org
Fri Nov 2 23:16:14 CET 2007


Author: guido.van.rossum
Date: Fri Nov  2 23:16:14 2007
New Revision: 58811

Modified:
   python/branches/py3k-pep3137/Objects/longobject.c
Log:
Make int(x, base) work for isinstance(x, (str, bytes, buffer)).


Modified: python/branches/py3k-pep3137/Objects/longobject.c
==============================================================================
--- python/branches/py3k-pep3137/Objects/longobject.c	(original)
+++ python/branches/py3k-pep3137/Objects/longobject.c	Fri Nov  2 23:16:14 2007
@@ -3462,11 +3462,19 @@
 		return PyLong_FromLong(0L);
 	if (base == -909)
 		return PyNumber_Long(x);
-	else if (PyBytes_Check(x)) {
+	else if (PyUnicode_Check(x))
+		return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
+					  PyUnicode_GET_SIZE(x),
+					  base);
+	else if (PyBytes_Check(x) || PyString_Check(x)) {
 		/* Since PyLong_FromString doesn't have a length parameter,
 		 * check here for possible NULs in the string. */
-		char *string = PyBytes_AS_STRING(x);
-		int size = PyBytes_GET_SIZE(x);
+		char *string;
+		int size = Py_Size(x);
+		if (PyBytes_Check(x))
+			string = PyBytes_AS_STRING(x);
+		else
+			string = PyString_AS_STRING(x);
 		if (strlen(string) != size) {
 			/* We only see this if there's a null byte in x,
 			   x is a str8 or a bytes, *and* a base is given. */
@@ -3477,10 +3485,6 @@
 		}
 		return PyLong_FromString(string, NULL, base);
 	}
-	else if (PyUnicode_Check(x))
-		return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
-					  PyUnicode_GET_SIZE(x),
-					  base);
 	else {
 		PyErr_SetString(PyExc_TypeError,
 			"int() can't convert non-string with explicit base");


More information about the Python-3000-checkins mailing list