No longer attempt to instantiate python classes describing dialects. This
was done because we were previously performing validation of the dialect
from python, but this is now down within the C module. Also, the method
we were using to detect classes did not work with new-style classes.
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index cdda179..34177cc 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -24,25 +24,12 @@
         self.assertRaises(TypeError, ctor, arg, delimiter = 0)
         self.assertRaises(TypeError, ctor, arg, delimiter = 'XX')
         self.assertRaises(csv.Error, ctor, arg, 'foo')
-        self.assertRaises(TypeError, ctor, arg, None)
         self.assertRaises(TypeError, ctor, arg, delimiter=None)
         self.assertRaises(TypeError, ctor, arg, delimiter=1)
         self.assertRaises(TypeError, ctor, arg, quotechar=1)
         self.assertRaises(TypeError, ctor, arg, lineterminator=None)
         self.assertRaises(TypeError, ctor, arg, lineterminator=1)
         self.assertRaises(TypeError, ctor, arg, quoting=None)
-#       We now allow this, only raising an exception if quoting is needed.
-#        self.assertRaises(TypeError, ctor, arg, quotechar=None)
-#        self.assertRaises(TypeError, ctor, arg,
-#                          quoting=csv.QUOTE_NONE, escapechar=None)
-#       No longer complains about dialects with invalid attributes [AM]
-#        class BadDialect:
-#            bad_attr = 0
-#        self.assertRaises(AttributeError, csv.reader, [], BadDialect)
-        class BadClass:
-            def __init__(self):
-                raise IOError
-        self.assertRaises(IOError, csv.reader, [], BadClass)
 
     def test_reader_arg_valid(self):
         self._test_arg_valid(csv.reader, [])
@@ -258,11 +245,6 @@
         self.assertRaises(csv.Error, csv.unregister_dialect, "nonesuch")
         self.assertRaises(TypeError, csv.register_dialect, None)
         self.assertRaises(TypeError, csv.register_dialect, None, None)
-        self.assertRaises(TypeError, csv.register_dialect, "nonesuch", None)
-        class bogus:
-            def __init__(self):
-                raise KeyError
-        self.assertRaises(KeyError, csv.register_dialect, "nonesuch", bogus)
 
     def test_registry(self):
         class myexceltsv(csv.excel):
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 405bc71..34870fc 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -288,40 +288,6 @@
         self->ob_type->tp_free((PyObject *)self);
 }
 
-/*
- * Return a new reference to a dialect instance
- *
- * If given a string, looks up the name in our dialect registry
- * If given a class, instantiate (which runs python validity checks)
- * If given an instance, return a new reference to the instance
- */
-static PyObject *
-dialect_instantiate(PyObject *dialect)
-{
-	Py_INCREF(dialect);
-	/* If dialect is a string, look it up in our registry */
-	if (IS_BASESTRING(dialect)) {
-		PyObject * new_dia;
-		new_dia = get_dialect_from_registry(dialect);
-		Py_DECREF(dialect);
-		return new_dia;
-	}
-	/* A class rather than an instance? Instantiate */
-	if (PyObject_TypeCheck(dialect, &PyClass_Type)) {
-		PyObject * new_dia;
-		new_dia = PyObject_CallFunction(dialect, "");
-		Py_DECREF(dialect);
-		return new_dia;
-	}
-	/* Make sure we finally have an instance */
-	if (!PyInstance_Check(dialect)) {
-		PyErr_SetString(PyExc_TypeError, "dialect must be an instance");
-		Py_DECREF(dialect);
-		return NULL;
-	}
-	return dialect;
-}
-
 static char *dialect_kws[] = {
 	"dialect",
 	"delimiter",
@@ -371,9 +337,12 @@
 	Py_XINCREF(skipinitialspace);
 	Py_XINCREF(strict);
 	if (dialect != NULL) {
-		dialect = dialect_instantiate(dialect);
-		if (dialect == NULL)
-			goto err;
+		if (IS_BASESTRING(dialect)) {
+			dialect = get_dialect_from_registry(dialect);
+			if (dialect == NULL)
+				goto err;
+		} else
+			Py_INCREF(dialect);
 #define DIALECT_GETATTR(v, n) \
 		if (v == NULL) \
 			v = PyObject_GetAttrString(dialect, n)