From b47790338dfc5ecf1583bff9c7b5d7997efb095b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Fri, 5 Jun 1998 20:19:54 -0700
Subject: [PATCH] new function: type_may_overload

Rev: src/pike_types.c:1.44
Rev: src/pike_types.h:1.14
---
 src/pike_types.c | 40 +++++++++++++++++++++++++++++++++++++++-
 src/pike_types.h |  3 ++-
 2 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/src/pike_types.c b/src/pike_types.c
index 17bc4fb5ec..b58bee56d5 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.43 1998/05/20 02:14:29 hubbe Exp $");
+RCSID("$Id: pike_types.c,v 1.44 1998/06/06 03:19:53 hubbe Exp $");
 #include <ctype.h>
 #include "svalue.h"
 #include "pike_types.h"
@@ -1668,3 +1668,41 @@ void cleanup_pike_types(void)
   free_string(void_type_string);
   free_string(any_type_string);
 }
+
+
+int type_may_overload(char *type, int lfun)
+{
+  switch(EXTRACT_UCHAR(type++))
+  {
+    case T_ASSIGN:
+      return type_may_overload(type+1,lfun);
+      
+    case T_FUNCTION:
+    case T_ARRAY:
+      /* might want to check for `() */
+      
+    default:
+      return 0;
+
+    case T_OR:
+      return type_may_overload(type,lfun) ||
+	type_may_overload(type+type_length(type),lfun);
+      
+    case T_AND:
+      return type_may_overload(type,lfun) &&
+	type_may_overload(type+type_length(type),lfun);
+      
+    case T_NOT:
+      return !type_may_overload(type,lfun);
+
+    case T_MIXED:
+      return 1;
+      
+    case T_OBJECT:
+    {
+      struct program *p=id_to_program(EXTRACT_INT(type+1));
+      if(!p) return 1;
+      return FIND_LFUN(p, lfun)!=-1;
+    }
+  }
+}
diff --git a/src/pike_types.h b/src/pike_types.h
index 2049537301..032f72147d 100644
--- a/src/pike_types.h
+++ b/src/pike_types.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: pike_types.h,v 1.13 1998/05/20 02:14:29 hubbe Exp $
+ * $Id: pike_types.h,v 1.14 1998/06/06 03:19:54 hubbe Exp $
  */
 #ifndef PIKE_TYPES_H
 #define PIKE_TYPES_H
@@ -120,6 +120,7 @@ INT32 get_max_args(struct pike_string *type);
 struct pike_string *get_type_of_svalue(struct svalue *s);
 char *get_name_of_type(int t);
 void cleanup_pike_types(void);
+int type_may_overload(char *type, int lfun);
 /* Prototypes end here */
 
 #ifdef DEBUG_MALLOC
-- 
GitLab