Branch: Tag:

1999-02-10

1999-02-10 22:03:31 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

lots of minor optimizations..

Rev: src/builtin_functions.c:1.148
Rev: src/constants.c:1.14
Rev: src/constants.h:1.8
Rev: src/cpp.c:1.33
Rev: src/dynamic_load.c:1.34
Rev: src/module.c:1.10
Rev: src/modules/Gdbm/gdbmmod.c:1.7
Rev: src/modules/Gmp/mpz_glue.c:1.39
Rev: src/modules/Gz/zlibmod.c:1.23
Rev: src/modules/Image/colors.c:1.9
Rev: src/modules/Image/colortable.c:1.48
Rev: src/modules/Image/font.c:1.43
Rev: src/modules/Image/image.c:1.112
Rev: src/modules/Msql/msqlmod.c:1.10
Rev: src/modules/Mysql/mysql.c:1.26
Rev: src/modules/Mysql/result.c:1.15
Rev: src/modules/Odbc/odbc.c:1.14
Rev: src/modules/Odbc/odbc_result.c:1.17
Rev: src/modules/Oracle/oracle.c:1.16
Rev: src/modules/Perl/perlmod.c:1.6
Rev: src/modules/Pipe/pipe.c:1.30
Rev: src/modules/Postgres/pgresult.c:1.10
Rev: src/modules/Postgres/postgres.c:1.12
Rev: src/modules/Regexp/glue.c:1.14
Rev: src/modules/Ssleay/ssleay.c:1.11
Rev: src/modules/Yp/yp.c:1.16
Rev: src/modules/_Charset/charsetmod.c:1.9
Rev: src/modules/_Charset/iso2022.c:1.4
Rev: src/modules/_Crypto/cast.c:1.6
Rev: src/modules/_Crypto/cbc.c:1.14
Rev: src/modules/_Crypto/crypto.c:1.27
Rev: src/modules/_Crypto/des.c:1.13
Rev: src/modules/_Crypto/idea.c:1.13
Rev: src/modules/_Crypto/invert.c:1.8
Rev: src/modules/_Crypto/md2.c:1.6
Rev: src/modules/_Crypto/md5.c:1.12
Rev: src/modules/_Crypto/pipe.c:1.14
Rev: src/modules/_Crypto/rc4.c:1.9
Rev: src/modules/_Crypto/sha.c:1.15
Rev: src/modules/_Image_JPEG/image_jpeg.c:1.20
Rev: src/modules/_Image_TTF/image_ttf.c:1.11
Rev: src/modules/_Image_XFace/image_xface.c:1.6
Rev: src/modules/call_out/call_out.c:1.25
Rev: src/modules/files/efuns.c:1.64
Rev: src/modules/files/socket.c:1.42
Rev: src/modules/math/math.c:1.17
Rev: src/modules/spider/accesseddb.c:1.18
Rev: src/modules/spider/dumudp.c:1.43
Rev: src/modules/spider/spider.c:1.78
Rev: src/modules/spider/xml.c:1.7
Rev: src/modules/sprintf/sprintf.c:1.32
Rev: src/modules/system/nt.c:1.8
Rev: src/modules/system/passwords.c:1.24
Rev: src/modules/system/system.c:1.62
Rev: src/object.c:1.57
Rev: src/operators.c:1.47
Rev: src/pike_macros.h:1.12
Rev: src/pike_types.c:1.50
Rev: src/pike_types.h:1.17
Rev: src/program.c:1.110
Rev: src/program.h:1.51
Rev: src/security.c:1.11
Rev: src/signal_handler.c:1.106
Rev: src/stralloc.h:1.29
Rev: src/svalue.h:1.21
Rev: src/threads.c:1.89

5:   \*/   #include "global.h"   #include <math.h> - RCSID("$Id: operators.c,v 1.46 1999/02/10 01:29:07 hubbe Exp $"); + RCSID("$Id: operators.c,v 1.47 1999/02/10 21:46:46 hubbe Exp $");   #include "interpret.h"   #include "svalue.h"   #include "multiset.h"
1929:      void init_operators(void)   { -  add_efun2("`[]",f_index, -  "function(string,int:int)|function(object,string:mixed)|function(array(0=mixed),int:0)|function(mapping(mixed:1=mixed),mixed:1)|function(multiset,mixed:int)|function(string,int,int:string)|function(array(2=mixed),int,int:array(2))|function(program:mixed)",OPT_TRY_OPTIMIZE,0,0); +  /* function(string,int:int)|function(object,string:mixed)|function(array(0=mixed),int:0)|function(mapping(mixed:1=mixed),mixed:1)|function(multiset,mixed:int)|function(string,int,int:string)|function(array(2=mixed),int,int:array(2))|function(program:mixed) */ +  ADD_EFUN2("`[]",f_index,tOr7(tFunc(tStr tInt,tInt),tFunc(tObj tStr,tMix),tFunc(tArr(tSetvar(0,tMix)) tInt,tVar(0)),tFunc(tMap(tMix,tSetvar(1,tMix)) tMix,tVar(1)),tFunc(tMultiset tMix,tInt),tFunc(tStr tInt tInt,tStr),tOr(tFunc(tArr(tSetvar(2,tMix)) tInt tInt,tArr(tVar(2))),tFunc(tPrg,tMix))),OPT_TRY_OPTIMIZE,0,0);    -  add_efun2("`->",f_arrow, -  "function(array(object|mapping|multiset|array),string:array(mixed))|function(object|mapping|multiset|program,string:mixed)",OPT_TRY_OPTIMIZE,0,0); +  /* function(array(object|mapping|multiset|array),string:array(mixed))|function(object|mapping|multiset|program,string:mixed) */ +  ADD_EFUN2("`->",f_arrow,tOr(tFunc(tArr(tOr4(tObj,tMapping,tMultiset,tArray)) tStr,tArr(tMix)),tFunc(tOr4(tObj,tMapping,tMultiset,tPrg) tStr,tMix)),OPT_TRY_OPTIMIZE,0,0);    -  add_efun2("`==",f_eq,"function(mixed...:int)",OPT_TRY_OPTIMIZE,optimize_eq,generate_comparison); -  add_efun2("`!=",f_ne,"function(mixed...:int)",OPT_TRY_OPTIMIZE,0,generate_comparison); -  add_efun2("`!",f_not,"function(mixed:int)",OPT_TRY_OPTIMIZE,optimize_not,generate_not); +  /* function(mixed...:int) */ +  ADD_EFUN2("`==",f_eq,tFuncV(,tMix,tInt),OPT_TRY_OPTIMIZE,optimize_eq,generate_comparison); +  /* 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);      #define CMP_TYPE "!function(!object...:mixed)&function(mixed...:int)|function(int|float...:int)|function(string...:int)"    add_efun2("`<", f_lt,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison);
1945:    add_efun2("`>", f_gt,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison);    add_efun2("`>=",f_ge,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison);    -  add_efun2("`+",f_add, -  "!function(!object...:mixed)&function(mixed...:mixed)|" +  /* !function(!object...:mixed)&function(mixed...:mixed)|"    "function(int...:int)|"    "!function(int...:mixed)&function(int|float...:float)|"    "!function(int|float...:mixed)&function(string|int|float...:string)|"    "function(0=array...:0)|"    "function(mapping(1=mixed:2=mixed)...:mapping(1:2))|" -  "function(3=multiset...:3)", +  "function(3=multiset...:3) */ +  ADD_EFUN2("`+",f_add,tOr7(tIfnot(tFuncV(,tNot(tObj),tMix),tFunction),tFuncV(,tInt,tInt),tIfnot(tFuncV(,tInt,tMix),tFuncV(,tOr(tInt,tFlt),tFlt)),tIfnot(tFuncV(,tOr(tInt,tFlt),tMix),tFuncV(,tOr3(tStr,tInt,tFlt),tStr)),tFuncV(,tSetvar(0,tArray),tVar(0)),tFuncV(,tMap(tSetvar(1,tMix),tSetvar(2,tMix)),tMap(tVar(1),tVar(2))),tFuncV(,tSetvar(3,tMultiset),tVar(3))),    OPT_TRY_OPTIMIZE,optimize_binary,generate_sum);    -  add_efun2("`-",f_minus, -  "!function(!object...:mixed)&function(mixed...:mixed)|" +  /* !function(!object...:mixed)&function(mixed...:mixed)|"    "function(int:int)|"    "function(float:float)|"    "function(array(0=mixed),array:array(0))|"
1965:    "function(float|int,float:float)|"    "function(float,int:float)|"    "function(int,int:int)|" -  "function(string,string:string)", +  "function(string,string:string) */ +  ADD_EFUN2("`-",f_minus,tOr7(tIfnot(tFuncV(,tNot(tObj),tMix),tFunction),tFunc(tInt,tInt),tFunc(tFlt,tFlt),tFunc(tArr(tSetvar(0,tMix)) tArray,tArr(tVar(0))),tFunc(tMap(tSetvar(1,tMix),tSetvar(2,tMix)) tMapping,tMap(tVar(1),tVar(2))),tFunc(tSet(tSetvar(3,tMix)) tMultiset,tSet(tVar(3))),tOr4(tFunc(tOr(tFlt,tInt) tFlt,tFlt),tFunc(tFlt tInt,tFlt),tFunc(tInt tInt,tInt),tFunc(tStr tStr,tStr))),    OPT_TRY_OPTIMIZE,0,generate_minus);      #define LOG_TYPE "function(mixed,object...:mixed)|function(object,mixed...:mixed)|function(int...:int)|function(mapping(0=mixed:1=mixed)...:mapping(0:1))|function(multiset(2=mixed)...:multiset(2))|function(array(3=mixed)...:array(3))|function(string...:string)"
1982:    add_efun2("`<<",f_lsh,SHIFT_TYPE,OPT_TRY_OPTIMIZE,0,generate_lsh);    add_efun2("`>>",f_rsh,SHIFT_TYPE,OPT_TRY_OPTIMIZE,0,generate_rsh);    -  add_efun2("`*",f_multiply, -  "!function(!object...:mixed)&function(mixed...:mixed)|" +  /* !function(!object...:mixed)&function(mixed...:mixed)|"    "function(array(array(1=mixed)),array(1=mixed):array(1))|"    "function(int...:int)|"    "!function(int...:mixed)&function(float|int...:float)|"    "function(string*,string:string)|"    "function(array(0=mixed),int:array(0))|" -  "function(string,int:string)", +  "function(string,int:string) */ +  ADD_EFUN2("`*",f_multiply,tOr7(tIfnot(tFuncV(,tNot(tObj),tMix),tFunction),tFunc(tArr(tArr(tSetvar(1,tMix))) tArr(tSetvar(1,tMix)),tArr(tVar(1))),tFuncV(,tInt,tInt),tIfnot(tFuncV(,tInt,tMix),tFuncV(,tOr(tFlt,tInt),tFlt)),tFunc(tArr(tStr) tStr,tStr),tFunc(tArr(tSetvar(0,tMix)) tInt,tArr(tVar(0))),tFunc(tStr tInt,tStr)),    OPT_TRY_OPTIMIZE,optimize_binary,generate_multiply);    -  add_efun2("`/",f_divide, -  "!function(!object...:mixed)&function(mixed...:mixed)|" +  /* !function(!object...:mixed)&function(mixed...:mixed)|"    "function(int,int...:int)|"    "!function(int...:mixed)&function(float|int...:float)|"    "function(array(0=mixed),array|int|float...:array(array(0)))|" -  "function(string,string|int|float...:array(string))", +  "function(string,string|int|float...:array(string)) */ +  ADD_EFUN2("`/",f_divide,tOr5(tIfnot(tFuncV(,tNot(tObj),tMix),tFunction),tFuncV(tInt,tInt,tInt),tIfnot(tFuncV(,tInt,tMix),tFuncV(,tOr(tFlt,tInt),tFlt)),tFuncV(tArr(tSetvar(0,tMix)),tOr3(tArray,tInt,tFlt),tArr(tArr(tVar(0)))),tFuncV(tStr,tOr3(tStr,tInt,tFlt),tArr(tStr))),    OPT_TRY_OPTIMIZE,0,generate_divide);    -  add_efun2("`%",f_mod, -  "function(mixed,object:mixed)|" +  /* function(mixed,object:mixed)|"    "function(object,mixed:mixed)|"    "function(int,int:int)|"    "function(string,int:string)|"    "function(array(0=mixed),int:array(0))|" -  "!function(int,int:mixed)&function(int|float,int|float:float)" -  ,OPT_TRY_OPTIMIZE,0,generate_mod); +  "!function(int,int:mixed)&function(int|float,int|float:float) */ +  ADD_EFUN2("`%",f_mod,tOr6(tFunc(tMix tObj,tMix),tFunc(tObj tMix,tMix),tFunc(tInt tInt,tInt),tFunc(tStr tInt,tStr),tFunc(tArr(tSetvar(0,tMix)) tInt,tArr(tVar(0))),tIfnot(tFunc(tInt tInt,tMix),tFunc(tOr(tInt,tFlt) tOr(tInt,tFlt),tFlt))), +  OPT_TRY_OPTIMIZE,0,generate_mod);    -  add_efun2("`~",f_compl,"function(object:mixed)|function(int:int)|function(float:float)|function(string:string)",OPT_TRY_OPTIMIZE,0,generate_compl); -  add_efun2("sizeof", f_sizeof, "function(string|multiset|array|mapping|object:int)",0,0,generate_sizeof); +  /* function(object:mixed)|function(int:int)|function(float:float)|function(string:string) */ +  ADD_EFUN2("`~",f_compl,tOr4(tFunc(tObj,tMix),tFunc(tInt,tInt),tFunc(tFlt,tFlt),tFunc(tStr,tStr)),OPT_TRY_OPTIMIZE,0,generate_compl); +  /* function(string|multiset|array|mapping|object:int) */ +  ADD_EFUN2("sizeof", f_sizeof,tFunc(tOr5(tStr,tMultiset,tArray,tMapping,tObj),tInt),0,0,generate_sizeof);    -  add_efun2("`()",f_call_function,"function(mixed,mixed ...:mixed)",OPT_SIDE_EFFECT | OPT_EXTERNAL_DEPEND,0,generate_call_function); +  /* function(mixed,mixed ...:mixed) */ +  ADD_EFUN2("`()",f_call_function,tFuncV(tMix,tMix,tMix),OPT_SIDE_EFFECT | OPT_EXTERNAL_DEPEND,0,generate_call_function);       /* This one should be removed */ -  add_efun2("call_function",f_call_function,"function(mixed,mixed ...:mixed)",OPT_SIDE_EFFECT | OPT_EXTERNAL_DEPEND,0,generate_call_function); +  /* function(mixed,mixed ...:mixed) */ +  ADD_EFUN2("call_function",f_call_function,tFuncV(tMix,tMix,tMix),OPT_SIDE_EFFECT | OPT_EXTERNAL_DEPEND,0,generate_call_function);          start_new_program();    ADD_STORAGE(struct string_assignment_storage); -  add_function("`[]",f_string_assignment_index,"function(int:int)",0); -  add_function("`[]=",f_string_assignment_assign_index,"function(int,int:int)",0); +  /* function(int:int) */ +  ADD_FUNCTION("`[]",f_string_assignment_index,tFunc(tInt,tInt),0); +  /* function(int,int:int) */ +  ADD_FUNCTION("`[]=",f_string_assignment_assign_index,tFunc(tInt tInt,tInt),0);    set_init_callback(init_string_assignment_storage);    set_exit_callback(exit_string_assignment_storage);    string_assignment_program=end_program();