pike.git / src / operators.c

version» Context lines:

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())