Fix a few more memory leaks

Document more info about the benefits of configuring without
pymalloc when running valgrind
diff --git a/Python/ast.c b/Python/ast.c
index 87a9a4b..731bf9a 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -1054,8 +1054,12 @@
             return NULL;
         }
 
-	if (asdl_seq_LEN(t) == 1)
+	if (asdl_seq_LEN(t) == 1) {
 	    lc = comprehension(asdl_seq_GET(t, 0), expression, NULL);
+	    /* only free the sequence since we grabbed element 0 above */
+	    if (lc)
+	        asdl_seq_free(t); /* ok */
+	}
 	else
 	    lc = comprehension(Tuple(t, Store, LINENO(ch)), expression, NULL);
 
@@ -1222,9 +1226,13 @@
             return NULL;
         }
         
-        if (asdl_seq_LEN(t) == 1)
+        if (asdl_seq_LEN(t) == 1) {
             ge = comprehension(asdl_seq_GET(t, 0), expression,
                                NULL);
+	    /* only free the sequence since we grabbed element 0 above */
+	    if (ge)
+	        asdl_seq_free(t); /* ok */
+	}
         else
             ge = comprehension(Tuple(t, Store, LINENO(ch)),
                                expression, NULL);
diff --git a/Python/compile.c b/Python/compile.c
index 4d637ae..5905c45 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2384,7 +2384,10 @@
 			dot = strchr(src, '.');
 			attr = PyString_FromStringAndSize(src, 
 					    dot ? dot - src : strlen(src));
+			if (!attr)
+				return -1;
 			ADDOP_O(c, LOAD_ATTR, attr, names);
+			Py_DECREF(attr);
 			src = dot + 1;
 		}
 	}
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 197d99b..fbfb48d 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -82,6 +82,7 @@
 			}
 			Py_DECREF(v);
 		}
+		Py_DECREF(n);
 	}
 	if (doc != NULL) {
 		v = PyString_FromString(doc);