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