pike.git
/
src
/
builtin.cmod
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/builtin.cmod:2363:
* assume no other entities are naughty enough to modify it). */ mapping_string_insert_string (env_allocs, env_alloc_var, putenv_str); else { struct svalue key; SET_SVAL(key, T_STRING, 0, string, env_alloc_var); map_delete (env_allocs, &key); } #endif /* !USE_SETENV */ }
-
#if defined(PIKE_DEBUG) && defined(PIKE_PORTABLE_BYTECODE)
-
-
/*! @decl void disassemble(function fun)
-
*! @belongs Debug
-
*!
-
*! Disassemble a Pike function to @[Stdio.stderr].
-
*!
-
*! @note
-
*! This function is only available if the Pike runtime
-
*! has been compiled with debug enabled.
-
*/
-
PIKEFUN void _disassemble(function fun)
-
{
-
if ((TYPEOF(*fun) != T_FUNCTION) ||
-
(SUBTYPEOF(*fun) == FUNCTION_BUILTIN)) {
-
fprintf(stderr,
-
"Disassembly only supported for functions implemented in Pike.\n");
-
} else if (!fun->u.object->prog) {
-
fprintf(stderr, "Function in destructed object.\n");
-
} else {
-
int f = SUBTYPEOF(*fun);
-
struct reference *ptr = PTR_FROM_INT(fun->u.object->prog, f);
-
struct program *p = PROG_FROM_PTR(fun->u.object->prog, ptr);
-
struct identifier *id = p->identifiers + ptr->identifier_offset;
-
if (id->func.offset >= 0) {
-
struct pike_string *tripples =
-
p->strings[read_program_data(p->program + id->func.offset, -1)];
-
switch(tripples->size_shift) {
-
#define CASE(SHIFT) \
-
case SHIFT: \
-
{ \
-
PIKE_CONCAT(p_wchar, SHIFT) *str = \
-
PIKE_CONCAT(STR, SHIFT)(tripples); \
-
int i=0; \
-
while(i < tripples->len) { \
-
fprintf(stderr, "@@@ %d: %s, %d, %d\n", \
-
i/3, \
-
instrs[*str - F_OFFSET]. \
-
name, \
-
str[1], str[2]); \
-
str += 3; \
-
i += 3; \
-
} \
-
} \
-
break
-
CASE(0);
-
CASE(1);
-
CASE(2);
-
#undef CASE
-
}
-
} else {
-
fprintf(stderr, "Prototype.\n");
-
}
-
}
-
pop_n_elems(args);
-
push_int(0);
-
}
-
-
#endif /* PIKE_DEBUG && PIKE_PORTABLE_BYTECODE */
-
+
/* * Backtrace handling. */ /*! @module Pike */ /*! @class BacktraceFrame */