From b30c3e04f5ad8c13b0405945b491918506bb28a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Wed, 3 Jan 2001 22:35:13 +0100
Subject: [PATCH] Improved heuristics in set_svalue_cmpfun().

Rev: src/array.c:1.101
---
 src/array.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/array.c b/src/array.c
index a6ab91614e..86b905098e 100644
--- a/src/array.c
+++ b/src/array.c
@@ -23,7 +23,7 @@
 #include "stuff.h"
 #include "bignum.h"
 
-RCSID("$Id: array.c,v 1.100 2001/01/03 16:36:45 grubba Exp $");
+RCSID("$Id: array.c,v 1.101 2001/01/03 21:35:13 grubba Exp $");
 
 PMOD_EXPORT struct array empty_array=
 {
@@ -680,9 +680,25 @@ static INLINE int set_svalue_cmpfun(struct svalue *a, struct svalue *b)
 
       case T_OBJECT:
 	if(a->u.object == b->u.object) return 0;
-	if(a->u.refs < b->u.refs) { def=-1; break; }
-	if(a->u.refs > b->u.refs) { def=1; break; }
-	def = (a<b)?-1:1;
+	if(a->u.object->prog == b->u.object->prog) {
+	  if (a->u.object->prog) {
+	    if(a->u.object < b->u.object) {
+	      def = -1;
+	    } else {
+	      def = 1;
+	    }
+	  } else {
+	    /* Destructed objects are considered equal. */
+	    return 0;
+	  }
+	} else {
+	  /* Attempt to group objects cloned from the same program */
+	  if (a->u.object->prog < b->u.object->prog) {
+	    def = -1;
+	  } else {
+	    def = 1;
+	  }
+	}
 	break;
     }
   }else{
-- 
GitLab