pike.git / src / modules / _Debug / debug.cmod

version» Context lines:

pike.git/src/modules/_Debug/debug.cmod:116:    *! Find the next object/array/mapping/multiset/program or string.    *!    *! All objects, arrays, mappings, multisets, programs and strings are    *! stored in linked lists inside Pike. This function returns the next    *! item on the corresponding list. It is mainly meant for debugging    *! the Pike runtime, but can also be used to control memory usage.    *!    *! @seealso    *! @[next_object()], @[prev()]    */ - static void f__next(INT32 args) + PIKEFUN mixed next(mixed x) + rawtype tOr6(tFunc(tStr,tStr), +  tFunc(tObj,tObj), +  tFunc(tMapping,tMapping), +  tFunc(tMultiset,tMultiset), +  tFunc(tPrg(tObj),tPrg(tObj)), +  tFunc(tArray,tArray));   { -  struct svalue tmp; -  -  pop_n_elems(args-1); -  args = 1; -  tmp=Pike_sp[-1]; +  struct svalue tmp = *x;    switch(TYPEOF(tmp))    { -  case T_OBJECT: tmp.u.object=tmp.u.object->next; break; +  case T_OBJECT: +  tmp.u.object=tmp.u.object->next; +  while(tmp.u.object && !tmp.u.object->prog) +  tmp.u.object=tmp.u.object->next; +  break;    case T_ARRAY: tmp.u.array=tmp.u.array->next; break;    case T_MAPPING: tmp.u.mapping=tmp.u.mapping->next; break;    case T_MULTISET:tmp.u.multiset=tmp.u.multiset->next; break;    case T_PROGRAM: tmp.u.program=tmp.u.program->next; break;    case T_STRING: tmp.u.string=next_pike_string(tmp.u.string); break;    default:    SIMPLE_BAD_ARG_ERROR("next", 1,    "object|array|mapping|multiset|program|string");    } -  +     if(tmp.u.refs) -  +  assign_svalue(Pike_sp-1, &tmp); +  else    { -  assign_svalue(Pike_sp-1,&tmp); -  }else{ +     pop_stack();    push_int(0);    }   }    - PIKEFUN mixed next(mixed x) - rawtype tOr6(tFunc(tStr,tStr), -  tFunc(tObj,tObj), -  tFunc(tMapping,tMapping), -  tFunc(tMultiset,tMultiset), -  tFunc(tPrg(tObj),tPrg(tObj)), -  tFunc(tArray,tArray)); - { -  f__next(1); - } -  +    /*! @decl mixed prev(mixed x)    *!    *! Find the previous object/array/mapping/multiset or program.    *!    *! All objects, arrays, mappings, multisets and programs are    *! stored in linked lists inside Pike. This function returns the previous    *! item on the corresponding list. It is mainly meant for debugging    *! the Pike runtime, but can also be used to control memory usage.    *!    *! @note    *! Unlike @[next()] this function does not work on strings.    *!    *! @seealso    *! @[next_object()], @[next()]    */ - static void f__prev(INT32 args) + PIKEFUN mixed prev(mixed x) + rawtype tOr5(tFunc(tObj,tObj), +  tFunc(tMapping,tMapping), +  tFunc(tMultiset,tMultiset), +  tFunc(tPrg(tObj),tPrg(tObj)), +  tFunc(tArray,tArray));   { -  struct svalue tmp; -  -  pop_n_elems(args-1); -  args = 1; -  tmp=Pike_sp[-1]; +  struct svalue tmp = *x;    switch(TYPEOF(tmp))    { -  case T_OBJECT: tmp.u.object=tmp.u.object->prev; break; +  case T_OBJECT: +  tmp.u.object=tmp.u.object->prev; +  while(tmp.u.object && !tmp.u.object->prog) +  tmp.u.object=tmp.u.object->prev; +  break;    case T_ARRAY: tmp.u.array=tmp.u.array->prev; break;    case T_MAPPING: tmp.u.mapping=tmp.u.mapping->prev; break;    case T_MULTISET:tmp.u.multiset=tmp.u.multiset->prev; break;    case T_PROGRAM: tmp.u.program=tmp.u.program->prev; break;    default:    SIMPLE_BAD_ARG_ERROR("prev", 1, "object|array|mapping|multiset|program");    }    if(tmp.u.refs) -  +  assign_svalue(Pike_sp-1, &tmp); +  else    { -  assign_svalue(Pike_sp-1,&tmp); -  }else{ +     pop_stack();    push_int(0);    }   }    - PIKEFUN mixed prev(mixed x) - rawtype tOr5(tFunc(tObj,tObj), -  tFunc(tMapping,tMapping), -  tFunc(tMultiset,tMultiset), -  tFunc(tPrg(tObj),tPrg(tObj)), -  tFunc(tArray,tArray)); - { -  f__prev(1); - } -  +    #ifdef PIKE_DEBUG   /* This function is for debugging *ONLY*    * do not document please. /Hubbe    */   PIKEFUN int leak(array|mapping|multiset|object|function|program|string|type val)    export;   {    INT32 i;       if(!REFCOUNTED_TYPE(TYPEOF(*val)))