diff --git a/src/pike_types.c b/src/pike_types.c index a0caa6386212b092fa926c259a09d77af2b504e3..3134547c3e38b11e68e2745d2a819837d2113653 100644 --- a/src/pike_types.c +++ b/src/pike_types.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: pike_types.c,v 1.39 1998/04/14 22:10:49 hubbe Exp $"); +RCSID("$Id: pike_types.c,v 1.40 1998/04/16 01:23:02 hubbe Exp $"); #include <ctype.h> #include "svalue.h" #include "pike_types.h" @@ -1062,6 +1062,16 @@ static char *low_match_types(char *a,char *b, int flags) break; case T_OBJECT: +#if 0 + if(EXTRACT_INT(a+2) || EXTRACT_INT(b+2)) + { + fprintf(stderr,"Type match1: "); + stupid_describe_type(a,type_length(a)); + fprintf(stderr,"Type match2: "); + stupid_describe_type(b,type_length(b)); + } +#endif + /* object(* 0) matches any object */ if(!EXTRACT_INT(a+2) || !EXTRACT_INT(b+2)) break; @@ -1081,11 +1091,11 @@ static char *low_match_types(char *a,char *b, int flags) { struct program *ap,*bp; - ap=id_to_program(EXTRACT_UCHAR(a+2)); - bp=id_to_program(EXTRACT_UCHAR(b+2)); + ap=id_to_program(EXTRACT_INT(a+2)); + bp=id_to_program(EXTRACT_INT(b+2)); if(!ap || !bp) break; - + if(EXTRACT_UCHAR(a+1)) { if(!implements(ap,bp)) diff --git a/src/program.c b/src/program.c index 848fa9222b357ddafea78b30de42c48098d3792b..f4f04f17c746d4f16bcb99b5b34988549cd1a7df 100644 --- a/src/program.c +++ b/src/program.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: program.c,v 1.81 1998/04/15 02:11:24 grubba Exp $"); +RCSID("$Id: program.c,v 1.82 1998/04/16 01:23:03 hubbe Exp $"); #include "program.h" #include "object.h" #include "dynamic_buffer.h" @@ -682,6 +682,9 @@ void check_program(struct program *p) INT32 size,e; unsigned INT32 checksum; + if(p->id > current_program_id) + fatal("Program id is out of sync! (p->id=%d, current_program_id=%d)\n",p->id,current_program_id); + if(p->refs <=0) fatal("Program has zero refs.\n"); @@ -2490,6 +2493,7 @@ int implements(struct program *a, struct program *b) unsigned long hval; if(!a || !b) return -1; if(a==b) return 1; + hval = a->id*9248339 + b->id; hval %= IMPLEMENTS_CACHE_SIZE; if(implements_cache[hval].aid==a->id && implements_cache[hval].bid==b->id) @@ -2499,5 +2503,6 @@ int implements(struct program *a, struct program *b) /* Do it the tedious way */ implements_cache[hval].aid=a->id; implements_cache[hval].bid=b->id; - return implements_cache[hval].ret=low_implements(a,b); + implements_cache[hval].ret=low_implements(a,b); + return implements_cache[hval].ret; }