string_contains(): speed up by avoiding function calls where
possible.  This always called PyUnicode_Check() and PyString_Check(),
at least one of which would call PyType_IsSubtype().  Also, this would
call PyString_Size() on known string objects.
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 0b79a06..8ae9407 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -991,24 +991,27 @@
 {
 	const char *lhs, *rhs, *end;
 	int size;
+
+	if (!PyString_CheckExact(el)) {
 #ifdef Py_USING_UNICODE
-	if (PyUnicode_Check(el))
-		return PyUnicode_Contains(a, el);
+		if (PyUnicode_Check(el))
+			return PyUnicode_Contains(a, el);
 #endif
-	if (!PyString_Check(el)) {
-		PyErr_SetString(PyExc_TypeError,
-			      "'in <string>' requires string as left operand");
-		return -1;
+		if (!PyString_Check(el)) {
+			PyErr_SetString(PyExc_TypeError,
+			    "'in <string>' requires string as left operand");
+			return -1;
+		}
 	}
-	size = PyString_Size(el);
+	size = PyString_GET_SIZE(el);
 	rhs = PyString_AS_STRING(el);
 	lhs = PyString_AS_STRING(a);
 
 	/* optimize for a single character */
 	if (size == 1)
-		return memchr(lhs, *rhs, PyString_Size(a)) != NULL;
+		return memchr(lhs, *rhs, PyString_GET_SIZE(a)) != NULL;
 
-	end = lhs + (PyString_Size(a) - size);
+	end = lhs + (PyString_GET_SIZE(a) - size);
 	while (lhs <= end) {
 		if (memcmp(lhs++, rhs, size) == 0)
 			return 1;