From c9fba686266ac9ffc0d5fe2c253f8af86b6ba069 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Fri, 6 Jun 1997 18:16:26 -0700
Subject: [PATCH] two major bugfixes

Rev: src/array.c:1.11
Rev: src/language.yacc:1.43
---
 src/array.c       | 21 ++++++++++++---------
 src/language.yacc |  9 +++++++--
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/src/array.c b/src/array.c
index 756357d5f0..9fa73e4078 100644
--- a/src/array.c
+++ b/src/array.c
@@ -381,21 +381,24 @@ INT32 array_search(struct array *v, struct svalue *s,INT32 start)
 
   /* Why search for something that is not there? */
 #ifdef DEBUG
-    if(d_flag > 1)  array_check_type_field(v);
+  if(d_flag > 1)  array_check_type_field(v);
 #endif
-
   if(v->type_field & (1 << s->type))
   {
-    TYPE_FIELD t=0;
-    for(e=start;e<v->size;e++)
+    if(start)
     {
-      if(is_eq(ITEM(v)+e,s)) return e;
-      t |= 1<<ITEM(v)[e].type;
+      for(e=start;e<v->size;e++)
+	if(is_eq(ITEM(v)+e,s)) return e;
+    }else{
+      TYPE_FIELD t=0;
+      for(e=0;e<v->size;e++)
+      {
+	if(is_eq(ITEM(v)+e,s)) return e;
+	t |= 1<<ITEM(v)[e].type;
+      }
+      v->type_field=t;
     }
-    v->type_field=t;
-    return -1;
   }
-
   return -1;
 }
 
diff --git a/src/language.yacc b/src/language.yacc
index 74aab449be..a9e7a33ba2 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -156,7 +156,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.42 1997/05/07 06:25:35 per Exp $");
+RCSID("$Id: language.yacc,v 1.43 1997/06/07 01:16:26 hubbe Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -1297,7 +1297,12 @@ typeof: F_TYPEOF '(' expr0 ')'
   {
     node *tmp;
     tmp=mknode(F_ARG_LIST,$3,0);
-    $$=mkstrnode(describe_type($3->type));
+    if($3 && $3->type)
+    {
+       $$=mkstrnode(describe_type($3->type));
+    }else{
+       $$=mkstrnode(describe_type(mixed_type_string));
+    }
     free_node(tmp);
   } ;
  
-- 
GitLab