pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:1:
/*\ ||| This file a part of Pike, and is copyright by Fredrik Hubinette ||| Pike is distributed as GPL (General Public License) ||| See the files COPYING and DISCLAIMER for more information. \*/ /**/ #include "global.h" #include <math.h>
-
RCSID("$Id: operators.c,v 1.
132
2001/03/
18
16
:
10
:
10
grubba Exp $");
+
RCSID("$Id: operators.c,v 1.
133
2001/03/
28
15
:
07
:
39
grubba Exp $");
#include "interpret.h" #include "svalue.h" #include "multiset.h" #include "mapping.h" #include "array.h" #include "stralloc.h" #include "opcodes.h" #include "operators.h" #include "language.h" #include "pike_memory.h"
pike.git/src/operators.c:3393:
if(THIS->s) free_string(THIS->s); } /*! @endclass */ void init_operators(void) { /* 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_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
(tObj)
,tMix))),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_arrow,tOr(tFunc(tArr(tOr4(tObj,tMapping,tMultiset,tArray)) tStr,tArr(tMix)),tFunc(tOr4(tObj,tMapping,tMultiset,tPrg
(tObj
)
)
tStr,tMix)),OPT_TRY_OPTIMIZE,0,0);
ADD_EFUN("`[]=", f_index_assign, tOr4(tFunc(tObj tStr tSetvar(0,tMix), tVar(0)), tFunc(tArr(tSetvar(1,tMix)) tInt tVar(1), tVar(1)), tFunc(tMap(tSetvar(2,tMix), tSetvar(3,tMix)) tVar(2) tVar(3), tVar(3)), tFunc(tSet(tSetvar(4,tMix)) tVar(4) tSetvar(5,tMix), tVar(5))), OPT_SIDE_EFFECT|OPT_TRY_OPTIMIZE); ADD_EFUN("`->=", f_arrow_assign, tOr3(tFunc(tArr(tOr4(tArray,tObj,tMultiset,tMapping)) tStr tSetvar(0,tMix), tVar(0)), tFunc(tOr(tObj, tMultiset) tStr tSetvar(1,tMix), tVar(1)), tFunc(tMap(tMix, tSetvar(2,tMix)) tStr tVar(2), tVar(2))), OPT_SIDE_EFFECT|OPT_TRY_OPTIMIZE); /* function(mixed...:int) */ ADD_EFUN2("`==",f_eq, tOr5(tFuncV(tOr(tInt,tFloat) tOr(tInt,tFloat), tOr(tInt,tFloat),tInt01), tFuncV(tSetvar(0,tOr4(tString,tMapping,tMultiset,tArray)) tVar(0), tVar(0),tInt01),
-
tFuncV(tOr3(tObj,
tProgram
,tFunction) tMix,tMix,tInt01),
-
tFuncV(tMix tOr3(tObj,
tProgram
,tFunction),tMix,tInt01),
+
tFuncV(tOr3(tObj,
tPrg(tObj)
,tFunction) tMix,tMix,tInt01),
+
tFuncV(tMix tOr3(tObj,
tPrg(tObj)
,tFunction),tMix,tInt01),
tFuncV(tType(tMix) tType(tMix),
-
tOr3(
tProgram
,tFunction,tType(tMix)),tInt01)),
+
tOr3(
tPrg(tObj)
,tFunction,tType(tMix)),tInt01)),
OPT_WEAK_TYPE|OPT_TRY_OPTIMIZE,optimize_eq,generate_comparison); /* function(mixed...:int) */ ADD_EFUN2("`!=",f_ne, tOr5(tFuncV(tOr(tInt,tFloat) tOr(tInt,tFloat), tOr(tInt,tFloat),tInt01), tFuncV(tSetvar(0,tOr4(tString,tMapping,tMultiset,tArray)) tVar(0), tVar(0),tInt01),
-
tFuncV(tOr3(tObj,
tProgram
,tFunction) tMix,tMix,tInt01),
-
tFuncV(tMix tOr3(tObj,
tProgram
,tFunction),tMix,tInt01),
+
tFuncV(tOr3(tObj,
tPrg(tObj)
,tFunction) tMix,tMix,tInt01),
+
tFuncV(tMix tOr3(tObj,
tPrg(tObj)
,tFunction),tMix,tInt01),
tFuncV(tType(tMix) tType(tMix),
-
tOr3(
tProgram
,tFunction,tType(tMix)),tInt01)),
+
tOr3(
tPrg(tObj)
,tFunction,tType(tMix)),tInt01)),
OPT_WEAK_TYPE|OPT_TRY_OPTIMIZE,0,generate_comparison); /* function(mixed:int) */ ADD_EFUN2("`!",f_not,tFuncV(tMix,tVoid,tInt01), OPT_TRY_OPTIMIZE,optimize_not,generate_not); #define CMP_TYPE "!function(!(object|mixed)...:mixed)&function(mixed...:int(0..1))|function(int|float...:int(0..1))|function(string...:int(0..1))|function(type|program,type|program,type|program...: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); add_efun2("`>=",f_ge,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison);
pike.git/src/operators.c:3511:
tFunc(tSetvar(0,tMix),tVar(0)), tOr(tFuncV(tMix tObj,tMix,tMix), tFuncV(tObj tMix,tMix,tMix)), tOr6( F_AND_TYPE(tInt), F_AND_TYPE(tArray), F_AND_TYPE(tMapping), F_AND_TYPE(tMultiset), F_AND_TYPE(tString),
-
F_AND_TYPE(tOr(tType(tMix),tPrg)) ),
+
F_AND_TYPE(tOr(tType(tMix),tPrg
(tObj
))
)
),
tIfnot(tFuncV(tNone, tNot(tMapping), tMix), tFuncV(tNone, tOr3(tArray,tMultiset,tSetvar(4,tMapping)), tVar(4)) ) ), OPT_TRY_OPTIMIZE,optimize_binary,generate_and); #define LOG_TYPE \ tOr7(tOr(tFuncV(tMix tObj,tMix,tMix), \ tFuncV(tObj,tMix,tMix)), \ tFuncV(tInt,tInt,tInt), \ tFuncV(tSetvar(1,tMapping),tSetvar(2,tMapping),tOr(tVar(1),tVar(2))), \ tFuncV(tSetvar(3,tMultiset),tSetvar(4,tMultiset),tOr(tVar(3),tVar(4))), \ tFuncV(tSetvar(5,tArray),tSetvar(6,tArray),tOr(tVar(5),tVar(6))), \ tFuncV(tString,tString,tString), \
-
tFuncV(tOr(tType(tMix),tPrg),tOr(tType(tMix),tPrg),tType(tMix)))
+
tFuncV(tOr(tType(tMix),tPrg
(tObj
)
)
,tOr(tType(tMix),tPrg
(tObj
)
)
,tType(tMix)))
ADD_EFUN2("`|",f_or,LOG_TYPE,OPT_TRY_OPTIMIZE,optimize_binary,generate_or); ADD_EFUN2("`^",f_xor,LOG_TYPE,OPT_TRY_OPTIMIZE,optimize_binary,generate_xor); #define SHIFT_TYPE \ tOr(tOr(tFuncV(tMix tObj,tMix,tMix), \ tFuncV(tObj tMix,tMix,tMix)), \ tFuncV(tInt,tInt,tInt))
pike.git/src/operators.c:3606:
tFunc(tOr(tInt,tFlt) tOr(tInt,tFlt),tFlt))), OPT_TRY_OPTIMIZE,0,generate_mod); /* function(object:mixed)|function(int:int)|function(float:float)|function(string:string) */ ADD_EFUN2("`~",f_compl, tOr6(tFunc(tObj,tMix), tFunc(tInt,tInt), tFunc(tFlt,tFlt), tFunc(tStr,tStr), tFunc(tType(tSetvar(0, tMix)), tType(tNot(tVar(0)))),
-
tFunc(
tProgram
, tType(tMix))),
+
tFunc(
tPrg(tObj)
, tType(tMix))),
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), OPT_TRY_OPTIMIZE, 0,generate_sizeof); /* 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 */