diff Python/compile.c @ 1399:cc172ce05561 legacy-trunk

Added compare operations for functions and code objects. (Also hash, but it doesn't work yet.)
author Guido van Rossum <guido@python.org>
date Fri, 05 Nov 1993 10:20:10 +0000
parents 89e1e5d9ccbf
children 90c5e2bb4da5
line wrap: on
line diff
--- a/Python/compile.c	Fri Nov 05 10:18:44 1993 +0000
+++ b/Python/compile.c	Fri Nov 05 10:20:10 1993 +0000
@@ -92,6 +92,35 @@
 	return newstringobject(buf);
 }
 
+static int
+code_compare(co, cp)
+	codeobject *co, *cp;
+{
+	int cmp;
+	cmp = cmpobject((object *)co->co_code, (object *)cp->co_code);
+	if (cmp) return cmp;
+	cmp = cmpobject(co->co_consts, cp->co_consts);
+	if (cmp) return cmp;
+	cmp = cmpobject(co->co_names, cp->co_names);
+	return cmp;
+}
+
+static long
+code_hash(co)
+	codeobject *co;
+{
+	long h, h1, h2, h3;
+	h1 = hashobject((object *)co->co_code);
+	if (h1 == -1) return -1;
+	h2 = hashobject(co->co_consts);
+	if (h2 == -1) return -1;
+	h3 = hashobject(co->co_names);
+	if (h3 == -1) return -1;
+	h = h1 ^ h2 ^ h3;
+	if (h == -1) h = -2;
+	return h;
+}
+
 typeobject Codetype = {
 	OB_HEAD_INIT(&Typetype)
 	0,
@@ -102,11 +131,12 @@
 	0,		/*tp_print*/
 	code_getattr,	/*tp_getattr*/
 	0,		/*tp_setattr*/
-	0,		/*tp_compare*/
+	code_compare,	/*tp_compare*/
 	code_repr,	/*tp_repr*/
 	0,		/*tp_as_number*/
 	0,		/*tp_as_sequence*/
 	0,		/*tp_as_mapping*/
+	code_hash,	/*tp_hash*/
 };
 
 codeobject *