diff --git a/src/pike_types.c b/src/pike_types.c index cdd9edd176178bfb79ec2bfd451e8c76201bc4b7..fb8489d7da9de08462e1d77318aa27852e7b1f86 100644 --- a/src/pike_types.c +++ b/src/pike_types.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: pike_types.c,v 1.107 1999/12/19 18:42:55 grubba Exp $"); +RCSID("$Id: pike_types.c,v 1.108 1999/12/21 17:19:55 grubba Exp $"); #include <ctype.h> #include "svalue.h" #include "pike_types.h" @@ -2061,11 +2061,14 @@ static int low_pike_types_le2(char *a, char *b, int array_cnt) if (EXTRACT_UCHAR(b) == T_NOT) { return low_pike_types_le(b+1, a+1, -array_cnt); } + if (EXTRACT_UCHAR(a+1) == T_NOT) { + return low_pike_types_le(a+2, b, array_cnt); + } if (low_pike_types_le(a+1, b, array_cnt)) { return 0; } /* FIXME: This is wrong... */ - return low_pike_types_le(b, a+1, -array_cnt); + return !low_pike_types_le(b, a+1, -array_cnt); case T_ASSIGN: ret=low_pike_types_le(a+2, b, array_cnt); @@ -2133,11 +2136,14 @@ static int low_pike_types_le2(char *a, char *b, int array_cnt) return low_pike_types_le(a, b, array_cnt); case T_NOT: + if (EXTRACT_UCHAR(b+1) == T_NOT) { + return low_pike_types_le(a, b+2, array_cnt); + } if (low_pike_types_le(a, b+1, array_cnt)) { return 0; } /* FIXME: This is wrong... */ - return low_pike_types_le(b+1, a, -array_cnt); + return !low_pike_types_le(b+1, a, -array_cnt); case T_ASSIGN: ret=low_pike_types_le(a, b+2, array_cnt); @@ -2335,7 +2341,7 @@ static int low_pike_types_le2(char *a, char *b, int array_cnt) /* check the 'many' type */ a++; b++; - if (EXTRACT_UCHAR(a) != T_VOID) { + if ((EXTRACT_UCHAR(a) != T_VOID) && (EXTRACT_UCHAR(b) != T_VOID)) { if (!low_pike_types_le(b, a, 0)) return 0; }