pike.git / src / builtin_functions.c

version» Context lines:

pike.git/src/builtin_functions.c:5399:    *!    *! Objects might be missed if @[cb] creates new objects or destroys    *! old ones.    *!    *! This function is only intended to be used for debug purposes.    *!    *! @returns    *! The total number of objects    *!    *! @seealso -  *! @[next_object()] +  *! @[next_object()], @[find_all_clones()]    */   static void f_map_all_objects( INT32 UNUSED(args) )   {    struct object *o = first_object;    INT32 total = 0;    ASSERT_SECURITY_ROOT("_map_all_objects");    while( o )    {    struct object *next = o->next;    if( o->prog )
pike.git/src/builtin_functions.c:5422:    safe_apply_svalue( Pike_sp-2, 1, 1 );    pop_stack();    }    total++;    o = next;    }    pop_stack();    push_int(total);   }    + /*! @decl array(object) find_all_clones(program p, @ +  *! int(0..1)|void include_subclasses) +  *! +  *! Return an array with all objects that are clones of @[p]. +  *! +  *! @param p +  *! Program that the objects should be a clone of. +  *! +  *! @param include_subclasses +  *! If true, include also objects that are clones of programs +  *! that have inherited @[p]. Note that this adds significant +  *! overhead. +  *! +  *! This function is only intended to be used for debug purposes. +  *! +  *! @seealso +  *! @[map_all_objects()] +  */ + static void f_find_all_clones(INT32 args) + { +  INT_TYPE include_subclasses = 0; +  struct object *o = first_object; +  struct program *p = NULL; +  +  get_all_args("Debug.find_all_clones", args, "%p.%i", +  &p, &include_subclasses); +  +  BEGIN_AGGREGATE_ARRAY(10) { +  +  for (o = first_object; o; o = o->next) { +  if (o->prog == p) { +  ref_push_object(o); +  DO_AGGREGATE_ARRAY(120); +  continue; +  } +  if (include_subclasses && o->prog && +  (o->prog->num_inherits > p->num_inherits)) { +  int e; +  /* Check if o->prog has inherited p. */ +  if (o->prog->storage_needed < p->storage_needed) continue; +  for (e = o->prog->num_inherits - p->num_inherits; e-- > 1;) { +  if (o->prog->inherits[e].prog == p) { +  /* Found. */ +  ref_push_object(o); +  DO_AGGREGATE_ARRAY(120); +  break; +  } +  } +  } +  } +  +  } END_AGGREGATE_ARRAY; + } +    /*! @decl void verify_internals()    *! @belongs Debug    *!    *! Perform sanity checks.    *!    *! This function goes through most of the internal Pike structures and    *! generates a fatal error if one of them is found to be out of order.    *! It is only used for debugging.    *!    *! @note
pike.git/src/builtin_functions.c:9742:    ADD_INT_CONSTANT("PIKE_WEAK_INDICES", PIKE_WEAK_INDICES, 0);    ADD_INT_CONSTANT("PIKE_WEAK_VALUES", PIKE_WEAK_VALUES, 0);      /* function(void|object:object) */    ADD_EFUN("next_object",f_next_object,    tFunc(tOr(tVoid,tObj),tObj),OPT_EXTERNAL_DEPEND);       ADD_EFUN("_map_all_objects",f_map_all_objects,    tFunc(tFunction,tIntPos),OPT_EXTERNAL_DEPEND);    +  ADD_EFUN("_find_all_clones", f_find_all_clones, +  tFunc(tPrg(tObj) tOr(tInt01,tVoid),tArr(tObj)), OPT_EXTERNAL_DEPEND); +    /* function(string:string)|function(object:object)|function(mapping:mapping)|function(multiset:multiset)|function(program:program)|function(array:array) */    ADD_EFUN("_next",f__next,    tOr6(tFunc(tStr,tStr),    tFunc(tObj,tObj),    tFunc(tMapping,tMapping),    tFunc(tMultiset,tMultiset),    tFunc(tPrg(tObj),tPrg(tObj)),    tFunc(tArray,tArray)),OPT_EXTERNAL_DEPEND);      /* function(object:object)|function(mapping:mapping)|function(multiset:multiset)|function(program:program)|function(array:array) */