pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:305:
} } return 0; } static int generate_comparison(node *n) { if(count_args(CDR(n))==2) {
-
do_docode(CDR(n),DO_NOT_COPY);
+
if(
do_docode(CDR(n),DO_NOT_COPY)
!= 2)
+
fatal("Count args was wrong in generate_comparison.\n")
;
if(CAR(n)->u.sval.u.efun->function == f_eq) emit2(F_EQ); else if(CAR(n)->u.sval.u.efun->function == f_ne) emit2(F_NE); else if(CAR(n)->u.sval.u.efun->function == f_lt) emit2(F_LT); else if(CAR(n)->u.sval.u.efun->function == f_le) emit2(F_LE); else if(CAR(n)->u.sval.u.efun->function == f_gt)
pike.git/src/operators.c:1121:
free_array(sp[-1].u.array); sp[-1].u.array=a; break; } default: error("[ .. ] can only be done on strings and arrays.\n"); } }
+
void f_sizeof(INT32 args)
+
{
+
INT32 tmp;
+
if(args<1)
+
error("Too few arguments to sizeof()\n");
+
+
tmp=lpc_sizeof(sp-args);
+
+
pop_n_elems(args);
+
push_int(tmp);
+
}
+
+
static int generate_sizeof(node *n)
+
{
+
node **arg;
+
if(count_args(CDR(n)) != 1) return 0;
+
if(do_docode(CDR(n),DO_NOT_COPY) != 1)
+
fatal("Count args was wrong in sizeof().\n");
+
emit2(F_SIZEOF);
+
return 1;
+
}
+
void init_operators() { add_efun2("`==",f_eq,"function(mixed,mixed:int)",OPT_TRY_OPTIMIZE,0,generate_comparison); add_efun2("`!=",f_ne,"function(mixed,mixed:int)",OPT_TRY_OPTIMIZE,0,generate_comparison); add_efun2("`!",f_not,"function(mixed:int)",OPT_TRY_OPTIMIZE,0,generate_not); #define CMP_TYPE "function(object,mixed:int)|function(mixed,object:int)|function(int|float,int|float:int)|function(string,string:int)" 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);
pike.git/src/operators.c:1158:
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...:mixed)|function(int...:int)|!function(int...:mixed)&function(float|int...:float)|function(string*,string:string)",OPT_TRY_OPTIMIZE,optimize_binary,generate_multiply); add_efun2("`/",f_divide,"function(object,mixed:mixed)|function(int,int:int)|function(float|int,float:float)|function(float,int:float)|function(string,string:string*)",OPT_TRY_OPTIMIZE,0,generate_divide); add_efun2("`%",f_mod,"function(object,mixed:mixed)|function(int,int:int)|!function(int,int:mixed)&function(int|float,int|float:float)",OPT_TRY_OPTIMIZE,0,generate_mod); add_efun2("`~",f_compl,"function(object:mixed)|function(int:int)|function(float:float)",OPT_TRY_OPTIMIZE,0,generate_compl);
+
add_efun2("sizeof", f_sizeof, "function(string|list|array|mapping|object:int)",0,0,generate_sizeof);
}