pike.git / src / operators.c

version» Context lines:

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);   }