Give code objects a more useful representation.
diff --git a/Python/compile.c b/Python/compile.c
index dd4fe15..483e524 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -72,6 +72,23 @@
 	DEL(co);
 }
 
+static object *
+code_repr(co)
+	codeobject *co;
+{
+	char buf[500];
+	int lineno = -1;
+	char *p = GETSTRINGVALUE(co->co_code);
+	char *filename = "???";
+	if (*p == SET_LINENO)
+		lineno = (p[1] & 0xff) | ((p[2] & 0xff) << 8);
+	if (co->co_filename && is_stringobject(co->co_filename))
+		filename = getstringvalue(co->co_filename);
+	sprintf(buf, "<code object at %lx, file \"%.400s\", line %d>",
+		(long)co, filename, lineno);
+	return newstringobject(buf);
+}
+
 typeobject Codetype = {
 	OB_HEAD_INIT(&Typetype)
 	0,
@@ -83,7 +100,7 @@
 	code_getattr,	/*tp_getattr*/
 	0,		/*tp_setattr*/
 	0,		/*tp_compare*/
-	0,		/*tp_repr*/
+	code_repr,	/*tp_repr*/
 	0,		/*tp_as_number*/
 	0,		/*tp_as_sequence*/
 	0,		/*tp_as_mapping*/