Nudge getting __module__ and __name__ for new-style classes so that
the results of *setting* __name__ are not so surprising.

If people can suggest more tests, that'd be grand, or is what's there
sufficient?
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index d83ff8c..4cfbd49 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -41,12 +41,20 @@
 {
 	char *s;
 
-	s = strrchr(type->tp_name, '.');
-	if (s == NULL)
-		s = type->tp_name;
-	else
-		s++;
-	return PyString_FromString(s);
+	if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
+		etype* et = (etype*)type;
+		
+		Py_INCREF(et->name);
+		return et->name;
+	}
+	else {
+		s = strrchr(type->tp_name, '.');
+		if (s == NULL)
+			s = type->tp_name;
+		else
+			s++;
+		return PyString_FromString(s);
+	}
 }
 
 static int
@@ -95,19 +103,18 @@
 	PyObject *mod;
 	char *s;
 
-	s = strrchr(type->tp_name, '.');
-	if (s != NULL)
-		return PyString_FromStringAndSize(type->tp_name,
-						  (int)(s - type->tp_name));
-	if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE))
-		return PyString_FromString("__builtin__");
-	mod = PyDict_GetItemString(type->tp_dict, "__module__");
-	if (mod != NULL) {
-		Py_INCREF(mod);
+	if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
+		mod = PyDict_GetItemString(type->tp_dict, "__module__");
+		Py_XINCREF(mod);
 		return mod;
 	}
-	PyErr_SetString(PyExc_AttributeError, "__module__");
-	return NULL;
+	else {
+		s = strrchr(type->tp_name, '.');
+		if (s != NULL)
+			return PyString_FromStringAndSize(
+				type->tp_name, (int)(s - type->tp_name));
+		return PyString_FromString("__builtin__");
+	}
 }
 
 static int