pike.git/
src/
modules/
_Debug/
debug.cmod
Branch:
Tag:
Non-build tags
All tags
No tags
2015-03-08
2015-03-08 13:23:29 by Henrik Grubbström (Grubba) <grubba@grubba.org>
da8b64e035deabc83860efccf171aa89eeebccab (
174
lines) (+
174
/-
0
)
[
Show
|
Annotate
]
Branch:
8.1
Debug: Converted to a cmod.
1:
+
/*
+
|| This file is part of Pike. For copyright information see COPYRIGHT.
+
|| Pike is distributed under GPL, LGPL and MPL. See the file COPYING
+
|| for more information.
+
*/
-
+
#include "global.h"
+
#include "module.h"
+
#include "pike_error.h"
+
#include "interpret.h"
+
#include "pike_embed.h"
+
#include "module_support.h"
+
#include "pike_security.h"
+
#include "builtin_functions.h"
+
+
#define DEFAULT_CMOD_STORAGE
+
+
DECLARATIONS
+
+
/*! @decl int(0..) map_all_objects(function(object:void) cb)
+
*! @belongs Debug
+
*!
+
*! Call cb for all objects that currently exist. The callback will
+
*! not be called with destructed objects as it's argument.
+
*!
+
*! 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()]
+
*/
+
PIKEFUN int(0..) map_all_objects(function(object:void) cb)
+
{
+
struct object *o = first_object;
+
INT32 total = 0;
+
ASSERT_SECURITY_ROOT("map_all_objects");
+
+
while( o )
+
{
+
struct object *next = o->next;
+
if( o->prog )
+
{
+
ref_push_object( o );
+
safe_apply_svalue( Pike_sp-2, 1, 1 );
+
pop_stack();
+
}
+
total++;
+
o = next;
+
}
+
RETURN total;
+
}
+
+
#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)
+
{
+
INT32 i;
+
+
if(!REFCOUNTED_TYPE(TYPEOF(*val)))
+
SIMPLE_BAD_ARG_ERROR("leak", 1,
+
"array|mapping|multiset|object|"
+
"function|program|string|type");
+
+
add_ref(val->u.dummy);
+
i = val->u.refs[0];
+
RETURN i;
+
}
+
+
/*! @decl int(0..) debug(int(0..) level)
+
*! @belongs Debug
+
*!
+
*! Set the run-time debug level.
+
*!
+
*! @returns
+
*! The old debug level will be returned.
+
*!
+
*! @note
+
*! This function is only available if the Pike runtime has been compiled
+
*! with RTL debug.
+
*/
+
PIKEFUN int(0..) debug(int(0..) d)
+
{
+
pop_n_elems(args);
+
push_int(d_flag);
+
d_flag = d;
+
}
+
+
/*! @decl int(0..) optimizer_debug(int(0..) level)
+
*! @belongs Debug
+
*!
+
*! Set the optimizer debug level.
+
*!
+
*! @returns
+
*! The old optimizer debug level will be returned.
+
*!
+
*! @note
+
*! This function is only available if the Pike runtime has been compiled
+
*! with RTL debug.
+
*/
+
PIKEFUN int(0..) optimizer_debug(int(0..) l)
+
{
+
pop_n_elems(args);
+
push_int(l_flag);
+
l_flag = l;
+
}
+
+
/*! @decl int(0..) assembler_debug(int(0..) level)
+
*! @belongs Debug
+
*!
+
*! Set the assembler debug level.
+
*!
+
*! @returns
+
*! The old assembler debug level will be returned.
+
*!
+
*! @note
+
*! This function is only available if the Pike runtime has been compiled
+
*! with RTL debug.
+
*/
+
PIKEFUN int(0..) assembler_debug(int(0..) l)
+
{
+
pop_n_elems(args);
+
push_int(a_flag);
+
a_flag = l;
+
}
+
+
/*! @decl void dump_program_tables(program p, int(0..)|void indent)
+
*! @belongs Debug
+
*!
+
*! Dumps the internal tables for the program @[p] on stderr.
+
*!
+
*! @param p
+
*! Program to dump.
+
*!
+
*! @param indent
+
*! Number of spaces to indent the output.
+
*/
+
PIKEFUN void dump_program_tables(program p, int(0..)|void indent)
+
{
+
dump_program_tables(p, indent?indent->u.integer:0);
+
pop_n_elems(args);
+
}
+
+
#ifdef YYDEBUG
+
+
/*! @decl int(0..) compiler_trace(int(0..) level)
+
*! @belongs Debug
+
*!
+
*! Set the compiler trace level.
+
*!
+
*! @returns
+
*! The old compiler trace level will be returned.
+
*!
+
*! @note
+
*! This function is only available if the Pike runtime has been compiled
+
*! with RTL debug.
+
*/
+
PIKEFUN int(0..) compiler_trace(int(0..) yyd)
+
{
+
extern int yydebug;
+
pop_n_elems(args);
+
push_int(yydebug);
+
yydebug = yyd;
+
}
+
+
#endif /* YYDEBUG */
+
+
#endif /* PIKE_DEBUG */
Newline at end of file added.