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