*/
void PRVM_PrintStatement (dstatement_t *s)
{
- int i;
+ size_t i;
+
+ if( prog->statement_linenums ) {
+ int opnum;
+
+ opnum = s - prog->statements;
+ Con_Printf( "%s:%i: ", PRVM_GetString( prog->xfunction->s_file ), prog->statement_linenums[ opnum ] );
+ }
if ( (unsigned)s->op < sizeof(prvm_opnames)/sizeof(prvm_opnames[0]))
{
Con_Print("prvm_profile <program name>\n");
return;
}
-
+
PRVM_Begin;
if(!PRVM_SetProgFromString(Cmd_Argv(1)))
return;
num++;
best->profile = 0;
best->builtinsprofile = 0;
+ best->callcount = 0;
}
} while (best);
PRVM_SetProg(i);
PRVM_Crash();
}
-
+
prog = oldprog;
}
void PRVM_Crash()
{
+ if (prog == NULL)
+ return;
- //TODO: make this more compilant with PR_Crash
- if (prog->depth < 1)
+ if( prog->depth > 0 )
{
- // kill the stack just to be sure
- prog->depth = 0;
- prog->localstack_used = 0;
- return;
+ Con_Printf("QuakeC crash report for %s:\n", PRVM_NAME);
+ PRVM_PrintState();
}
- Con_Printf("QuakeC crash report for %s:\n", PRVM_NAME);
- PRVM_PrintState();
-
// dump the stack so host_error can shutdown functions
prog->depth = 0;
prog->localstack_used = 0;
+ // reset the prog pointer
+ prog = NULL;
}
/*
int i, j, c, o;
if (!f)
- PRVM_ERROR ("PRVM_EnterFunction: NULL function in %s\n", PRVM_NAME);
+ PRVM_ERROR ("PRVM_EnterFunction: NULL function in %s", PRVM_NAME);
prog->stack[prog->depth].s = prog->xstatement;
prog->stack[prog->depth].f = prog->xfunction;
// save off any locals that the new function steps on
c = f->locals;
if (prog->localstack_used + c > PRVM_LOCALSTACK_SIZE)
- PRVM_ERROR ("PRVM_ExecuteProgram: locals stack overflow in %s\n", PRVM_NAME);
+ PRVM_ERROR ("PRVM_ExecuteProgram: locals stack overflow in %s", PRVM_NAME);
for (i=0 ; i < c ; i++)
prog->localstack[prog->localstack_used+i] = ((int *)prog->globals.generic)[f->parm_start + i];
PRVM_ERROR ("prog stack underflow in %s", PRVM_NAME);
if (!prog->xfunction)
- PRVM_ERROR ("PR_LeaveFunction: NULL function in %s\n", PRVM_NAME);
+ PRVM_ERROR ("PR_LeaveFunction: NULL function in %s", PRVM_NAME);
// restore locals from the stack
c = prog->xfunction->locals;
prog->localstack_used -= c;
if (prog->localstack_used < 0)
- PRVM_ERROR ("PRVM_ExecuteProgram: locals stack underflow in %s\n", PRVM_NAME);
+ PRVM_ERROR ("PRVM_ExecuteProgram: locals stack underflow in %s", PRVM_NAME);
for (i=0 ; i < c ; i++)
((int *)prog->globals.generic)[prog->xfunction->parm_start + i] = prog->localstack[prog->localstack_used+i];
extern cvar_t prvm_boundscheck;
extern cvar_t prvm_traceqc;
extern int PRVM_ED_FindFieldOffset (const char *field);
-extern ddef_t* PRVM_ED_FindGlobal(const char *name);
+extern ddef_t* PRVM_ED_FindGlobal(const char *name);
void PRVM_ExecuteProgram (func_t fnum, const char *errormessage)
{
dstatement_t *st;