diff --git a/src/constants.c b/src/constants.c index f1372f418980154e51e96be9962d31495f7a7f86..090cb93f2234abaa810ae2a8b809860550a893af 100644 --- a/src/constants.c +++ b/src/constants.c @@ -15,7 +15,7 @@ #include "error.h" #include "block_alloc.h" -RCSID("$Id: constants.c,v 1.14 1999/02/10 21:46:39 hubbe Exp $"); +RCSID("$Id: constants.c,v 1.15 1999/03/02 03:13:13 hubbe Exp $"); static INT32 num_callable=0; static struct mapping *builtin_constants = 0; @@ -158,6 +158,7 @@ void cleanup_added_efuns(void) free_mapping(builtin_constants); builtin_constants=0; } + free_all_callable_blocks(); } void count_memory_in_callables(INT32 *num_, INT32 *size_) { diff --git a/src/global.h b/src/global.h index d439dcffb1694c6c6845566e8b547093727c3845..c65a6f2c27f3c2d6e1eb465e7c1edaccc68f1a03 100644 --- a/src/global.h +++ b/src/global.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: global.h,v 1.27 1999/02/27 17:19:12 grubba Exp $ + * $Id: global.h,v 1.28 1999/03/02 03:13:14 hubbe Exp $ */ #ifndef GLOBAL_H #define GLOBAL_H @@ -143,6 +143,9 @@ char *alloca (); #endif #endif +#define MAX_INT32 2147483647 +#define MIN_INT32 -2147483648 + #define INT16 short #define INT8 char diff --git a/src/interpret.c b/src/interpret.c index 45731c622870992064cdf1855dca626001aa8d7a..a797e157458b14f05359b78ec7885f941b6e8fd8 100644 --- a/src/interpret.c +++ b/src/interpret.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: interpret.c,v 1.115 1999/02/28 17:07:42 grubba Exp $"); +RCSID("$Id: interpret.c,v 1.116 1999/03/02 03:13:16 hubbe Exp $"); #include "interpret.h" #include "object.h" #include "program.h" @@ -1323,3 +1323,8 @@ void cleanup_interpret(void) mark_stack_malloced=0; evaluator_stack_malloced=0; } + +void really_clean_up_interpret(void) +{ + free_all_pike_frame_blocks(); +} diff --git a/src/interpret.h b/src/interpret.h index 93b229aac7377a4994222567b55952064229445e..642225e03c31922857ac55975b0ab60504aa1264 100644 --- a/src/interpret.h +++ b/src/interpret.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: interpret.h,v 1.26 1999/01/31 09:01:49 hubbe Exp $ + * $Id: interpret.h,v 1.27 1999/03/02 03:13:17 hubbe Exp $ */ #ifndef INTERPRET_H #define INTERPRET_H @@ -194,6 +194,7 @@ void apply(struct object *o, char *fun, int args); void apply_svalue(struct svalue *s, INT32 args); void slow_check_stack(void); void cleanup_interpret(void); +void really_clean_up_interpret(void); /* Prototypes end here */ extern struct svalue *sp; diff --git a/src/language.yacc b/src/language.yacc index b287d5da042619db756a749a2ca48864e3933a68..7cb826e13aacdfbe13a844734393c0cc8c72c86b 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -181,7 +181,7 @@ /* This is the grammar definition of Pike. */ #include "global.h" -RCSID("$Id: language.yacc,v 1.110 1999/02/20 17:43:39 grubba Exp $"); +RCSID("$Id: language.yacc,v 1.111 1999/03/02 03:13:19 hubbe Exp $"); #ifdef HAVE_MEMORY_H #include <memory.h> #endif @@ -298,7 +298,6 @@ int yylex(YYSTYPE *yylval); %type <number> modifier %type <number> modifier_list %type <number> modifiers -%type <number> opt_string_type %type <number> optional_dot_dot_dot %type <number> optional_stars @@ -827,12 +826,12 @@ type2: type2 '|' type3 { push_type(T_OR); } | type3 ; -type3: F_INT_ID { push_type(T_INT); } +type3: F_INT_ID opt_int_range { push_type(T_INT); } | F_FLOAT_ID { push_type(T_FLOAT); } | F_PROGRAM_ID { push_type(T_PROGRAM); } | F_VOID_ID { push_type(T_VOID); } | F_MIXED_ID { push_type(T_MIXED); } - | F_STRING_ID opt_string_type { push_type(T_STRING); } + | F_STRING_ID { push_type(T_STRING); } | F_OBJECT_ID opt_object_type { push_type(T_OBJECT); } | F_MAPPING_ID opt_mapping_type { push_type(T_MAPPING); } | F_ARRAY_ID opt_array_type { push_type(T_ARRAY); } @@ -840,11 +839,11 @@ type3: F_INT_ID { push_type(T_INT); } | F_FUNCTION_ID opt_function_type { push_type(T_FUNCTION); } ; -opt_string_type: /* Empty */ { $$=1; } - | '(' F_NUMBER ')' +opt_int_range: { push_type_int(MAX_INT32); push_type_int(MIN_INT32); } + | '(' F_NUMBER F_DOT_DOT F_NUMBER ')' { - if ($2 != 1) yyerror("Wide strings are not supported."); - $$=1; + push_type_int($4); + push_type_int($2); } ; @@ -1804,7 +1803,7 @@ typeof: F_TYPEOF '(' expr0 ')' node *tmp; tmp=mknode(F_ARG_LIST,$3,0); - s=describe_type( $3 && $3->type ? $3->type : mixed_type_string); + s=describe_type( tmp && CAR(tmp) && CAR(tmp)->type ? CAR(tmp)->type : mixed_type_string); $$=mkstrnode(s); free_string(s); free_node(tmp); diff --git a/src/las.c b/src/las.c index 61f0ff7f271b8bc6f75f3583216a76d1cecfd4b6..ed75209809b63c3c2c1a334d6f9d17f0e6dd485f 100644 --- a/src/las.c +++ b/src/las.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: las.c,v 1.74 1999/02/01 06:13:15 hubbe Exp $"); +RCSID("$Id: las.c,v 1.75 1999/03/02 03:13:21 hubbe Exp $"); #include "language.h" #include "interpret.h" @@ -454,14 +454,11 @@ node *mkintnode(int nr) { node *res = mkemptynode(); res->token = F_CONSTANT; - if(nr) - copy_shared_string(res->type, int_type_string); - else - copy_shared_string(res->type, mixed_type_string); res->node_info = 0; res->u.sval.type = T_INT; res->u.sval.subtype = NUMBER_NUMBER; res->u.sval.u.integer = nr; + res->type=get_type_of_svalue( & res->u.sval); return res; } diff --git a/src/main.c b/src/main.c index 97c261519ec2e0ad91d8e7c51c577a70d03fd142..50634987bb9106c27ff37e6208b3895ea4d914ea 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: main.c,v 1.63 1999/02/20 17:44:04 grubba Exp $"); +RCSID("$Id: main.c,v 1.64 1999/03/02 03:13:22 hubbe Exp $"); #include "fdlib.h" #include "backend.h" #include "module.h" @@ -584,5 +584,6 @@ void low_exit_main(void) cleanup_shared_string_table(); #endif cleanup_callbacks(); + really_clean_up_interpret(); } diff --git a/src/modules/Gmp/mpz_glue.c b/src/modules/Gmp/mpz_glue.c index 879edaab93756264908dda99f173277c9c8f1244..7a29c9b89f41b5dc9d0575758b36f85affce9a10 100644 --- a/src/modules/Gmp/mpz_glue.c +++ b/src/modules/Gmp/mpz_glue.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: mpz_glue.c,v 1.39 1999/02/10 21:47:33 hubbe Exp $"); +RCSID("$Id: mpz_glue.c,v 1.40 1999/03/02 03:13:35 hubbe Exp $"); #include "gmp_machine.h" #if defined(HAVE_GMP2_GMP_H) && defined(HAVE_LIBGMP2) @@ -305,7 +305,7 @@ static void mpzmod_cast(INT32 args) switch(s->str[0]) { case 'i': - if(!strcmp(s->str, "int")) + if(!strncmp(s->str, "int", 3)) { free_string(s); mpzmod_get_int(0); diff --git a/src/operators.c b/src/operators.c index 9b0d17da946666a6b85177df819e64dceb14120b..8c8472bd8e2b601eed3059ad77851172df27556f 100644 --- a/src/operators.c +++ b/src/operators.c @@ -5,7 +5,7 @@ \*/ #include "global.h" #include <math.h> -RCSID("$Id: operators.c,v 1.47 1999/02/10 21:46:46 hubbe Exp $"); +RCSID("$Id: operators.c,v 1.48 1999/03/02 03:13:24 hubbe Exp $"); #include "interpret.h" #include "svalue.h" #include "multiset.h" @@ -1940,9 +1940,9 @@ void init_operators(void) /* function(mixed...:int) */ ADD_EFUN2("`!=",f_ne,tFuncV(,tMix,tInt),OPT_TRY_OPTIMIZE,0,generate_comparison); /* function(mixed:int) */ - ADD_EFUN2("`!",f_not,tFunc(tMix,tInt),OPT_TRY_OPTIMIZE,optimize_not,generate_not); + add_efun2("`!",f_not,"!function(int(0..0):mixed)&function(mixed:int(0..0))|function(int(0..0):int(1..1))",OPT_TRY_OPTIMIZE,optimize_not,generate_not); -#define CMP_TYPE "!function(!object...:mixed)&function(mixed...:int)|function(int|float...:int)|function(string...:int)" +#define CMP_TYPE "!function(!object...:mixed)&function(mixed...:int(0..1))|function(int|float...:int(0..1))|function(string...:int(0..1))" add_efun2("`<", f_lt,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison); add_efun2("`<=",f_le,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison); add_efun2("`>", f_gt,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison); diff --git a/src/pike_types.c b/src/pike_types.c index 1aa744b27cd2168f2698477b8c98069c431339ad..a6f91b7a83e276db81f7e5af063d14413e1c9af7 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.53 1999/02/28 17:07:43 grubba Exp $"); +RCSID("$Id: pike_types.c,v 1.54 1999/03/02 03:13:25 hubbe Exp $"); #include <ctype.h> #include "svalue.h" #include "pike_types.h" @@ -158,7 +158,6 @@ one_more_type: case '7': case '8': case '9': - case T_INT: case T_FLOAT: case T_STRING: case T_PROGRAM: @@ -166,6 +165,10 @@ one_more_type: case T_VOID: case T_UNKNOWN: break; + + case T_INT: + t+=sizeof(INT32)*2; + break; case T_OBJECT: t++; @@ -214,11 +217,20 @@ void type_stack_reverse(void) reverse((char *)(type_stackp-a),a,1); } -void push_type_int(unsigned INT32 i) +void push_type_int(INT32 i) { int e; - for(e=sizeof(i)-1;e>=0;e--) - push_type(((unsigned char *)&i)[e]); + for(e=0;e<(int)sizeof(i);e++) + push_type( (i>>(e*8)) & 0xff ); +} + +INT32 extract_type_int(char *p) +{ + int e; + INT32 ret=0; + for(e=0;e<(int)sizeof(INT32);e++) + ret=(ret<<8) | EXTRACT_UCHAR(p+e); + return ret; } void push_unfinished_type(char *s) @@ -230,7 +242,7 @@ void push_unfinished_type(char *s) static void push_unfinished_type_with_markers(char *s, struct pike_string **am) { - int e,c,len=type_length(s); + int d,e,c,len=type_length(s); type_stack_mark(); for(e=0;e<len;e++) { @@ -247,14 +259,16 @@ static void push_unfinished_type_with_markers(char *s, struct pike_string **am) } break; #endif + + case T_INT: + push_type(c); + for(d=0;d<(int)sizeof(INT32)*2;d++) + push_type(EXTRACT_UCHAR(s+ ++e)); + break; case T_OBJECT: push_type(c); - push_type(EXTRACT_UCHAR(s+ ++e)); - push_type(EXTRACT_UCHAR(s+ ++e)); - push_type(EXTRACT_UCHAR(s+ ++e)); - push_type(EXTRACT_UCHAR(s+ ++e)); - push_type(EXTRACT_UCHAR(s+ ++e)); + for(d=0;d<(int)sizeof(INT32)+1;d++) push_type(EXTRACT_UCHAR(s+ ++e)); break; default: @@ -342,7 +356,36 @@ static void internal_parse_typeA(char **_s) switch(buf[0]) { case 'i': - if(!strcmp(buf,"int")) { push_type(T_INT); break; } + if(!strcmp(buf,"int")) + { + while(ISSPACE(**s)) ++*s; + if(**s=='(') + { + INT32 min,max; + ++*s; + while(ISSPACE(**s)) ++*s; + min=STRTOL(*s,(char **)s,0); + while(ISSPACE(**s)) ++*s; + if(s[0][0]=='.' && s[0][1]=='.') + s[0]+=2; + else + error("Missing .. in integer type.\n"); + + while(ISSPACE(**s)) ++*s; + max=STRTOL(*s,(char **)s,0); + while(ISSPACE(**s)) ++*s; + + if(**s != ')') error("Missing ')' in integer range.\n"); + ++*s; + push_type_int(max); + push_type_int(min); + }else{ + push_type_int(MAX_INT32); + push_type_int(MIN_INT32); + } + push_type(T_INT); + break; + } goto bad_type; case 'f': @@ -646,14 +689,23 @@ void stupid_describe_type(char *a,INT32 len) break; case T_ASSIGN: printf("="); break; - case T_INT: printf("int"); break; + case T_INT: + { + INT32 min=extract_type_int(a+e+1); + INT32 max=extract_type_int(a+e+1+sizeof(INT32)); + printf("int"); + if(min!=MIN_INT32 || max!=MAX_INT32) + printf("(%ld..%ld)",(long)min,(long)max); + e+=sizeof(INT32)*2; + break; + } case T_FLOAT: printf("float"); break; case T_STRING: printf("string"); break; case T_PROGRAM: printf("program"); break; case T_OBJECT: printf("object(%s %ld)", EXTRACT_UCHAR(a+e+1)?"clone of":"inherits", - (long)EXTRACT_INT(a+e+2)); + (long)extract_type_int(a+e+2)); e+=sizeof(INT32)+1; break; case T_FUNCTION: printf("function"); break; @@ -701,14 +753,29 @@ char *low_describe_type(char *t) case T_VOID: my_strcat("void"); break; case T_MIXED: my_strcat("mixed"); break; case T_UNKNOWN: my_strcat("unknown"); break; - case T_INT: my_strcat("int"); break; + case T_INT: + { + INT32 min=extract_type_int(t); + INT32 max=extract_type_int(t+sizeof(INT32)); + my_strcat("int"); + + if(min!=MIN_INT32 || max!=MAX_INT32) + { + char buffer[100]; + sprintf(buffer,"(%ld..%ld)",(long)min,(long)max); + my_strcat(buffer); + } + t+=sizeof(INT32)*2; + + break; + } case T_FLOAT: my_strcat("float"); break; case T_PROGRAM: my_strcat("program"); break; case T_OBJECT: - if(EXTRACT_INT(t+1)) + if(extract_type_int(t+1)) { char buffer[100]; - sprintf(buffer,"object(%s %ld)",*t?"is":"implements",(long)EXTRACT_INT(t+1)); + sprintf(buffer,"object(%s %ld)",*t?"is":"implements",(long)extract_type_int(t+1)); my_strcat(buffer); }else{ my_strcat("object"); @@ -804,6 +871,7 @@ char *low_describe_type(char *t) struct pike_string *describe_type(struct pike_string *type) { + check_type_string(type); if(!type) return make_shared_string("mixed"); init_buf(); low_describe_type(type->str); @@ -895,6 +963,19 @@ static void low_or_pike_types(char *t1, char *t2) { push_type(T_MIXED); } + else if(EXTRACT_UCHAR(t1)==T_INT && EXTRACT_UCHAR(t2)==T_INT) + { + INT32 i1,i2; + i1=extract_type_int(t1+1+sizeof(INT32)); + i2=extract_type_int(t2+1+sizeof(INT32)); + push_type_int(MAXIMUM(i1,i2)); + + i1=extract_type_int(t1+1); + i2=extract_type_int(t2+1); + push_type_int(MINIMUM(i1,i2)); + + push_type(T_INT); + } else { push_unfinished_type(t1); @@ -920,7 +1001,7 @@ static struct pike_string *low_object_lfun_type(char *t, short lfun) { struct program *p; int i; - p=id_to_program(EXTRACT_INT(t+2)); + p=id_to_program(extract_type_int(t+2)); if(!p) return 0; i=FIND_LFUN(p, lfun); if(i==-1) return 0; @@ -1125,7 +1206,7 @@ static char *low_match_types(char *a,char *b, int flags) case T_OBJECT: #if 0 - if(EXTRACT_INT(a+2) || EXTRACT_INT(b+2)) + if(extract_type_int(a+2) || extract_type_int(b+2)) { fprintf(stderr,"Type match1: "); stupid_describe_type(a,type_length(a)); @@ -1135,7 +1216,7 @@ static char *low_match_types(char *a,char *b, int flags) #endif /* object(* 0) matches any object */ - if(!EXTRACT_INT(a+2) || !EXTRACT_INT(b+2)) break; + if(!extract_type_int(a+2) || !extract_type_int(b+2)) break; /* object(x *) =? object(x *) */ if(EXTRACT_UCHAR(a+1) == EXTRACT_UCHAR(b+1)) @@ -1144,7 +1225,7 @@ static char *low_match_types(char *a,char *b, int flags) if(EXTRACT_UCHAR(a+1)) { /* object(1 x) =? object(1 x) */ - if(EXTRACT_INT(a+2) != EXTRACT_INT(b+2)) return 0; + if(extract_type_int(a+2) != extract_type_int(b+2)) return 0; }else{ /* object(0 *) =? object(0 *) */ break; @@ -1153,8 +1234,8 @@ static char *low_match_types(char *a,char *b, int flags) { struct program *ap,*bp; - ap=id_to_program(EXTRACT_INT(a+2)); - bp=id_to_program(EXTRACT_INT(b+2)); + ap=id_to_program(extract_type_int(a+2)); + bp=id_to_program(extract_type_int(b+2)); if(!ap || !bp) break; @@ -1170,11 +1251,23 @@ static char *low_match_types(char *a,char *b, int flags) break; + case T_INT: + { + INT32 amin=extract_type_int(a+1); + INT32 amax=extract_type_int(a+1+sizeof(INT32)); + + INT32 bmin=extract_type_int(b+1); + INT32 bmax=extract_type_int(b+1+sizeof(INT32)); + + if(amin > bmax || bmin > amax) return 0; + break; + } + + case T_MULTISET: case T_ARRAY: if(!low_match_types(++a,++b,flags)) return 0; - case T_INT: case T_FLOAT: case T_STRING: case T_PROGRAM: @@ -1290,7 +1383,7 @@ static struct pike_string *debug_low_index_type(char *t, node *n) { case T_OBJECT: { - struct program *p=id_to_program(EXTRACT_INT(t+1)); + struct program *p=id_to_program(extract_type_int(t+1)); if(p && n) { if(n->token == F_ARROW) @@ -1423,7 +1516,7 @@ static int low_check_indexing(char *type, char *index_type, node *n) case T_OBJECT: { - struct program *p=id_to_program(EXTRACT_INT(type+1)); + struct program *p=id_to_program(extract_type_int(type+1)); if(p) { if(n->token == F_ARROW) @@ -1442,7 +1535,12 @@ static int low_check_indexing(char *type, char *index_type, node *n) case T_MULTISET: case T_MAPPING: +#if 0 return !!low_match_types(type,index_type,0); +#else + /* FIXME: Compiler warning here!!!! */ + return 1; +#endif case T_PROGRAM: /* FIXME: Should check that the index is a string. */ @@ -1602,7 +1700,12 @@ struct pike_string *get_type_of_svalue(struct svalue *s) case T_INT: if(s->u.integer) { - ret=int_type_string; + type_stack_mark(); + /* Fixme, check that the integer is in range of MIN_INT32 .. MAX_INT32!*/ + push_type_int(s->u.integer); + push_type_int(s->u.integer); + push_type(T_INT); + return pop_unfinished_type(); }else{ ret=mixed_type_string; } @@ -1720,7 +1823,7 @@ int type_may_overload(char *type, int lfun) case T_OBJECT: { - struct program *p=id_to_program(EXTRACT_INT(type+1)); + struct program *p=id_to_program(extract_type_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 60827c83c43beb2f838016c92efd0815ff848886..6bab1535a078fcf981e4e34cb186da271ddc3ec5 100644 --- a/src/pike_types.h +++ b/src/pike_types.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: pike_types.h,v 1.17 1999/02/10 21:46:49 hubbe Exp $ + * $Id: pike_types.h,v 1.18 1999/03/02 03:13:27 hubbe Exp $ */ #ifndef PIKE_TYPES_H #define PIKE_TYPES_H @@ -104,7 +104,8 @@ INT32 pop_stack_mark(void); void pop_type_stack(void); void type_stack_pop_to_mark(void); void type_stack_reverse(void); -void push_type_int(unsigned INT32 i); +void push_type_int(INT32 i); +INT32 extract_type_int(char *p); void push_unfinished_type(char *s); void push_finished_type(struct pike_string *type); void push_finished_type_backwards(struct pike_string *type); diff --git a/src/stralloc.h b/src/stralloc.h index 483550f9e692d53da2bbe8fe4b342b64df6d0f70..8f3eec2b61114db779b8d6ab6131592d7ba55aff 100644 --- a/src/stralloc.h +++ b/src/stralloc.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: stralloc.h,v 1.32 1999/03/01 05:32:37 hubbe Exp $ + * $Id: stralloc.h,v 1.33 1999/03/02 03:13:28 hubbe Exp $ */ #ifndef STRALLOC_H #define STRALLOC_H @@ -38,7 +38,7 @@ struct string_builder struct pike_string *debug_findstring(const struct pike_string *foo); #endif -#define free_string(s) do{ struct pike_string *_=(s); if(--_->refs<=0) really_free_string(_); }while(0) +#define free_string(s) do{ struct pike_string *_=(s); debug_malloc_touch(_); if(--_->refs<=0) really_free_string(_); }while(0) #define my_hash_string(X) ((unsigned long)(X)) #define my_order_strcmp(X,Y) ((char *)(X)-(char *)(Y)) diff --git a/src/svalue.h b/src/svalue.h index 0774c3d35d29cc1864af2252b9708f50f719c9dd..6f37172ac90f0c8d4590379b305c2dc2ac267cd1 100644 --- a/src/svalue.h +++ b/src/svalue.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: svalue.h,v 1.21 1999/02/10 21:46:56 hubbe Exp $ + * $Id: svalue.h,v 1.22 1999/03/02 03:13:30 hubbe Exp $ */ #ifndef SVALUE_H #define SVALUE_H @@ -119,7 +119,7 @@ struct svalue #define tString "\006" #define tFlt "\007" #define tFloat "\007" -#define tInt "\010" +#define tInt "\010\200\000\000\000\177\377\377\377" #define tVoid "\020" #define tVar(X) #X diff --git a/src/testsuite.in b/src/testsuite.in index 3f65dfe247d54ee8ee9ab43a6d0bd6ee156818a0..4c6f4c177d6562a3edd56c7491da54865a4f48b0 100644 --- a/src/testsuite.in +++ b/src/testsuite.in @@ -1,4 +1,4 @@ -stest_true([["$Id: testsuite.in,v 1.150 1999/03/01 21:30:17 grubba Exp $"]]) +stest_true([["$Id: testsuite.in,v 1.151 1999/03/02 03:13:31 hubbe Exp $"]]) cond([[all_constants()->_verify_internals]], [[ test_do(_verify_internals()) @@ -901,16 +901,16 @@ cond([[all_constants()->kill && (cpp("__NT__")/"\n")[1]=="__NT__" ]], ]]) // typeof -test_eq(typeof(1),"int") +test_eq(typeof(1),"int(1..1)") test_eq(typeof(""),"string") test_eq(typeof(""[0]),"int") test_eq(typeof(0.0),"float") test_eq(typeof(all_constants()["all_constants"]),"mixed") // _typeof -test_eq(_typeof(1),"int") +test_eq(_typeof(1),"int(1..1)") test_eq(_typeof(""),"string") -test_eq(_typeof("x"[0]),"int") +test_eq(_typeof("x"[0]),"int(120..120)") test_eq(_typeof(0.0),"float") test_eq(_typeof(this_object)-" ","function(:object)") @@ -2891,7 +2891,7 @@ void test_dir(string dir) { test_dir(file); }else if(stat[1]>=0){ - if(glob(file,"*.pike") || glob(file,"*.pmod")) + if(glob("*.pike",file) || glob("*.pmod",file)) (program)file; } }