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.
53
1999/05/25
13
:
32
:
12
mirar Exp $");
+
RCSID("$Id: operators.c,v 1.
54
1999/05/25
21
:
21
:
31
mirar 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:2027:
ADD_EFUN2("`!=",f_ne,tFuncV(,tMix,tInt),OPT_TRY_OPTIMIZE,0,generate_comparison); /* function(mixed:int) */ add_efun2("`!",f_not,"function(mixed:int(0..1))",OPT_TRY_OPTIMIZE,optimize_not,generate_not); #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); add_efun2("`>=",f_ge,CMP_TYPE,OPT_TRY_OPTIMIZE,0,generate_comparison);
-
/* !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) */
+
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
))),
+
tFuncV(
tInt
,tInt,tInt),
+
tIfnot(tFuncV(
tInt
,tInt,tMix),
+
tFuncV(
tOr(tInt
,
tFlt),
tOr(tInt,tFlt),tFlt)),
+
tIfnot(tFuncV(
tOr(tInt
,
tFlt),
tOr(tInt,tFlt),tMix),
+
tFuncV(
tOr3(tStr
,
tInt,tFlt),
+
tOr3(tStr,tInt,tFlt),tStr)),
+
tFuncV(tSetvar(0,tArray),
tSetvar(1,tArray),
+
tOr(
tVar(0)
,tVar(1
)
))
,
+
tFuncV(
tSetvar(0
,
tMapping),
tSetvar(1,
tMapping
),
+
tOr
(tVar(
0
),tVar(
1
))),
+
tFuncV(
tSetvar(0
,
tMultiset),
tSetvar(
1
,tMultiset),
+
tOr(
tVar(
0
)
,tVar(1
))
))
,
OPT_TRY_OPTIMIZE,optimize_binary,generate_sum); ADD_EFUN2("`-",f_minus, tOr7(tIfnot(tFuncV(,tNot(tObj),tMix),tFunction), tFuncV(tInt,tInt,tInt), tIfnot(tFuncV(tInt,tInt,tMix), tFuncV(tOr(tInt,tFlt),tOr(tInt,tFlt),tFlt)), tFuncV(tArr(tSetvar(0,tMix)),tArray,tArr(tVar(0))), tFuncV(tMap(tSetvar(1,tMix),tSetvar(2,tMix)), tMapping,tMap(tVar(1),tVar(2))),
pike.git/src/operators.c:2067:
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)" add_efun2("`&",f_and,LOG_TYPE,OPT_TRY_OPTIMIZE,optimize_binary,generate_and); 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 "function(object,mixed:mixed)|function(mixed,object:mixed)|function(int,int:int)" add_efun2("`<<",f_lsh,SHIFT_TYPE,OPT_TRY_OPTIMIZE,0,generate_lsh); add_efun2("`>>",f_rsh,SHIFT_TYPE,OPT_TRY_OPTIMIZE,0,generate_rsh); /* !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) */
-
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)),
+
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,tInt),
+
tIfnot(tFuncV(
tInt
,tInt,tMix),
+
tFuncV(
tOr(tFlt
,
tInt),
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); /* !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)) */ 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);