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.
63
1999/10/
15
21
:
08
:
44
noring
Exp $");
+
RCSID("$Id: operators.c,v 1.
64
1999/10/
24
14
:
10
:
22
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:72:
#define CALL_OPERATOR(OP, args) \ if(!sp[-args].u.object->prog) \ bad_arg_error(lfun_names[OP], sp-args, args, 1, "object", sp-args, \ "Called in destructed object.\n"); \ if(FIND_LFUN(sp[-args].u.object->prog,OP) == -1) \ bad_arg_error(lfun_names[OP], sp-args, args, 1, "object", sp-args, \ "Operator not in object.\n"); \ apply_lfun(sp[-args].u.object, OP, args-1); \ free_svalue(sp-2); \ sp[-2]=sp[-1]; \
-
sp--;
+
sp--;
\
+
dmalloc_touch_svalue(sp);
void f_add(INT32 args) { INT_TYPE e,size; TYPE_FIELD types; types=0; for(e=-args;e<0;e++) types|=1<<sp[e].type; switch(types)
pike.git/src/operators.c:106:
apply_lfun(sp[-args].u.object, LFUN_ADD_EQ, args-1); pop_stack(); return; } if(FIND_LFUN(sp[-args].u.object->prog,LFUN_ADD) != -1) { apply_lfun(sp[-args].u.object, LFUN_ADD, args-1); free_svalue(sp-2); sp[-2]=sp[-1]; sp--;
+
dmalloc_touch_svalue(sp);
return; } } for(e=1;e<args;e++) { if(sp[e-args].type == T_OBJECT && sp[e-args].u.object->prog && FIND_LFUN(sp[e-args].u.object->prog,LFUN_RADD) != -1) { struct svalue *tmp=sp+e-args;
pike.git/src/operators.c:597:
static int call_lfun(int left, int right) { if(sp[-2].type == T_OBJECT && sp[-2].u.object->prog && FIND_LFUN(sp[-2].u.object->prog,left) != -1) { apply_lfun(sp[-2].u.object, left, 1); free_svalue(sp-2); sp[-2]=sp[-1]; sp--;
+
dmalloc_touch_svalue(sp);
return 1; } if(sp[-1].type == T_OBJECT && sp[-1].u.object->prog && FIND_LFUN(sp[-1].u.object->prog,right) != -1) { push_svalue(sp-2); apply_lfun(sp[-2].u.object, right, 1); free_svalue(sp-3); sp[-3]=sp[-1]; sp--;
-
+
dmalloc_touch_svalue(sp);
pop_stack(); return 1; } return 0; } void o_subtract(void) { if (sp[-2].type != sp[-1].type && !float_promote())