mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2024-11-27 22:22:17 +00:00
qcvm -trace now shows the current function name and nest-depth
This commit is contained in:
parent
83438d9833
commit
9a42dd1c3a
2 changed files with 19 additions and 0 deletions
17
exec.c
17
exec.c
|
@ -50,6 +50,8 @@ MEM_VEC_FUN_RESIZE(qc_program, size_t, profile)
|
|||
|
||||
MEM_VEC_FUNCTIONS(qc_program, prog_builtin, builtins)
|
||||
|
||||
MEM_VEC_FUNCTIONS(qc_program, const char*, function_stack)
|
||||
|
||||
static void loaderror(const char *fmt, ...)
|
||||
{
|
||||
int err = errno;
|
||||
|
@ -417,6 +419,12 @@ static void prog_print_statement(qc_program *prog, prog_section_statement *st)
|
|||
printf("<illegal instruction %d>\n", st->opcode);
|
||||
return;
|
||||
}
|
||||
if ((prog->xflags & VMXF_TRACE) && prog->function_stack_count) {
|
||||
size_t i;
|
||||
for (i = 0; i < prog->function_stack_count; ++i)
|
||||
printf("->");
|
||||
printf("%s:", prog->function_stack[prog->function_stack_count-1]);
|
||||
}
|
||||
printf(" <> %-12s", asm_instr[st->opcode].m);
|
||||
if (st->opcode >= INSTR_IF &&
|
||||
st->opcode <= INSTR_IFNOT)
|
||||
|
@ -514,6 +522,10 @@ static qcint prog_enterfunction(qc_program *prog, prog_section_function *func)
|
|||
st.stmt = prog->statement;
|
||||
st.function = func;
|
||||
|
||||
if (prog->xflags & VMXF_TRACE) {
|
||||
(void)!qc_program_function_stack_add(prog, prog_getstring(prog, func->name));
|
||||
}
|
||||
|
||||
#ifdef QCVM_BACKUP_STRATEGY_CALLER_VARS
|
||||
if (prog->stack_count)
|
||||
{
|
||||
|
@ -566,6 +578,11 @@ static qcint prog_leavefunction(qc_program *prog)
|
|||
|
||||
qc_exec_stack st = prog->stack[prog->stack_count-1];
|
||||
|
||||
if (prog->xflags & VMXF_TRACE) {
|
||||
if (prog->function_stack_count)
|
||||
prog->function_stack_count--;
|
||||
}
|
||||
|
||||
#ifdef QCVM_BACKUP_STRATEGY_CALLER_VARS
|
||||
if (prog->stack_count > 1) {
|
||||
prev = prog->stack[prog->stack_count-2].function;
|
||||
|
|
2
gmqcc.h
2
gmqcc.h
|
@ -876,6 +876,8 @@ typedef struct qc_program_s {
|
|||
MEM_VECTOR_MAKE(qcint, entitydata);
|
||||
MEM_VECTOR_MAKE(bool, entitypool);
|
||||
|
||||
MEM_VECTOR_MAKE(const char*, function_stack);
|
||||
|
||||
uint16_t crc16;
|
||||
|
||||
size_t tempstring_start;
|
||||
|
|
Loading…
Reference in a new issue