* posixmodule.c: added set{uid,gid}.
* {tuple,list,mapping,array}object.c: call printobject with 0 for flags
* compile.c (parsestr): use quote instead of '\'' at one crucial point
* arraymodule.c (array_getattr): Added __members__ attribute
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 248e431..5b62fee 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -993,6 +993,18 @@
 	if (strcmp(name, "itemsize") == 0) {
 		return newintobject((long)a->ob_descr->itemsize);
 	}
+	if (strcmp(name, "__members__") == 0) {
+		object *list = newlistobject(2);
+		if (list) {
+			setlistitem(list, 0, newstringobject("typecode"));
+			setlistitem(list, 1, newstringobject("itemsize"));
+			if (err_occurred()) {
+				DECREF(list);
+				list = NULL;
+			}
+		}
+		return list;
+	}
 	return findmethod(array_methods, (object *)a, name);
 }
 
@@ -1013,7 +1025,7 @@
 	if (a->ob_descr->typecode == 'c') {
 		fprintf(fp, "array('c', ");
 		v = array_tostring(a, (object *)NULL);
-		ok = printobject(v, fp, flags);
+		ok = printobject(v, fp, 0);
 		XDECREF(v);
 		fprintf(fp, ")");
 		return ok;
@@ -1023,7 +1035,7 @@
 		if (i > 0)
 			fprintf(fp, ", ");
 		v = (a->ob_descr->getitem)(a, i);
-		ok = printobject(v, fp, flags);
+		ok = printobject(v, fp, 0);
 		XDECREF(v);
 	}
 	fprintf(fp, "])");
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index d84360b..00b8369 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -866,6 +866,34 @@
 }
 
 static object *
+posix_setuid(self, args)
+	object *self;
+	object *args;
+{
+	int uid;
+	if (!getargs(args, "i", &uid))
+		return NULL;
+	if (setuid(uid) < 0)
+		return posix_error();
+	INCREF(None);
+	return None;
+}
+
+static object *
+posix_setgid(self, args)
+	object *self;
+	object *args;
+{
+	int gid;
+	if (!getargs(args, "i", &gid))
+		return NULL;
+	if (setgid(gid) < 0)
+		return posix_error();
+	INCREF(None);
+	return None;
+}
+
+static object *
 posix_waitpid(self, args)
 	object *self;
 	object *args;
@@ -1288,6 +1316,8 @@
 	{"getuid",	posix_getuid},
 	{"kill",	posix_kill},
 	{"popen",	posix_popen},
+	{"setuid",	posix_setuid},
+	{"setgid",	posix_setgid},
 	{"setpgrp",	posix_setpgrp},
 	{"wait",	posix_wait},
 	{"waitpid",	posix_waitpid},
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index b89b7b2..c1c1c19 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -395,10 +395,10 @@
 		if (ep->me_value != NULL) {
 			if (any++ > 0)
 				fprintf(fp, ", ");
-			if (printobject((object *)ep->me_key, fp, flags) != 0)
+			if (printobject((object *)ep->me_key, fp, 0) != 0)
 				return -1;
 			fprintf(fp, ": ");
-			if (printobject(ep->me_value, fp, flags) != 0)
+			if (printobject(ep->me_value, fp, 0) != 0)
 				return -1;
 		}
 	}
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 22eab71..76d2a0e 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -200,7 +200,7 @@
 	for (i = 0; i < op->ob_size; i++) {
 		if (i > 0)
 			fprintf(fp, ", ");
-		if (printobject(op->ob_item[i], fp, flags) != 0)
+		if (printobject(op->ob_item[i], fp, 0) != 0)
 			return -1;
 	}
 	fprintf(fp, "]");
diff --git a/Objects/mappingobject.c b/Objects/mappingobject.c
index b89b7b2..c1c1c19 100644
--- a/Objects/mappingobject.c
+++ b/Objects/mappingobject.c
@@ -395,10 +395,10 @@
 		if (ep->me_value != NULL) {
 			if (any++ > 0)
 				fprintf(fp, ", ");
-			if (printobject((object *)ep->me_key, fp, flags) != 0)
+			if (printobject((object *)ep->me_key, fp, 0) != 0)
 				return -1;
 			fprintf(fp, ": ");
-			if (printobject(ep->me_value, fp, flags) != 0)
+			if (printobject(ep->me_value, fp, 0) != 0)
 				return -1;
 		}
 	}
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 68fed9e..6f122ea 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -167,7 +167,7 @@
 	for (i = 0; i < op->ob_size; i++) {
 		if (i > 0)
 			fprintf(fp, ", ");
-		if (printobject(op->ob_item[i], fp, flags) != 0)
+		if (printobject(op->ob_item[i], fp, 0) != 0)
 			return -1;
 	}
 	if (op->ob_size == 1)
diff --git a/Python/compile.c b/Python/compile.c
index 565c65c..9ce3a33 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -529,7 +529,7 @@
 		return newsizedstringobject(s, len);
 	v = newsizedstringobject((char *)NULL, len);
 	p = buf = getstringvalue(v);
-	while (*s != '\0' && *s != '\'') {
+	while (*s != '\0' && *s != quote) {
 		if (*s != '\\') {
 			*p++ = *s++;
 			continue;