pike.git
/
src
/
modules
/
_Debug
/
debug.cmod
version
»
Context lines:
10
20
40
80
file
none
3
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)))