Back to index

lightning-sunbird  0.9+nobinonly
Functions
jsd_hook.c File Reference
#include "jsd.h"

Go to the source code of this file.

Functions

JSTrapStatus JS_DLL_CALLBACK jsd_InterruptHandler (JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval, void *closure)
JSTrapStatus JS_DLL_CALLBACK jsd_DebuggerHandler (JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval, void *closure)
JSTrapStatus JS_DLL_CALLBACK jsd_ThrowHandler (JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval, void *closure)
JSTrapStatus jsd_CallExecutionHook (JSDContext *jsdc, JSContext *cx, uintN type, JSD_ExecutionHookProc hook, void *hookData, jsval *rval)
JSBool jsd_CallCallHook (JSDContext *jsdc, JSContext *cx, uintN type, JSD_CallHookProc hook, void *hookData)
JSBool jsd_SetInterruptHook (JSDContext *jsdc, JSD_ExecutionHookProc hook, void *callerdata)
JSBool jsd_ClearInterruptHook (JSDContext *jsdc)
JSBool jsd_SetDebugBreakHook (JSDContext *jsdc, JSD_ExecutionHookProc hook, void *callerdata)
JSBool jsd_ClearDebugBreakHook (JSDContext *jsdc)
JSBool jsd_SetDebuggerHook (JSDContext *jsdc, JSD_ExecutionHookProc hook, void *callerdata)
JSBool jsd_ClearDebuggerHook (JSDContext *jsdc)
JSBool jsd_SetThrowHook (JSDContext *jsdc, JSD_ExecutionHookProc hook, void *callerdata)
JSBool jsd_ClearThrowHook (JSDContext *jsdc)
JSBool jsd_SetFunctionHook (JSDContext *jsdc, JSD_CallHookProc hook, void *callerdata)
JSBool jsd_ClearFunctionHook (JSDContext *jsdc)
JSBool jsd_SetTopLevelHook (JSDContext *jsdc, JSD_CallHookProc hook, void *callerdata)
JSBool jsd_ClearTopLevelHook (JSDContext *jsdc)

Function Documentation

JSBool jsd_CallCallHook ( JSDContext jsdc,
JSContext cx,
uintN  type,
JSD_CallHookProc  hook,
void hookData 
)

Definition at line 205 of file jsd_hook.c.

{
    JSBool hookanswer;
    JSDThreadState*  jsdthreadstate;
    
    hookanswer = JS_FALSE;
    if(hook && NULL != (jsdthreadstate = jsd_NewThreadState(jsdc, cx)))
    {
        hookanswer = hook(jsdc, jsdthreadstate, type, hookData);
        jsd_DestroyThreadState(jsdc, jsdthreadstate);
    }

    return hookanswer;
}

Here is the call graph for this function:

Here is the caller graph for this function:

JSTrapStatus jsd_CallExecutionHook ( JSDContext jsdc,
JSContext cx,
uintN  type,
JSD_ExecutionHookProc  hook,
void hookData,
jsval rval 
)

Definition at line 153 of file jsd_hook.c.

{
    uintN hookanswer = JSD_HOOK_THROW == type ? 
                            JSD_HOOK_RETURN_CONTINUE_THROW :
                            JSD_HOOK_RETURN_CONTINUE;
    JSDThreadState* jsdthreadstate;

    if(hook && NULL != (jsdthreadstate = jsd_NewThreadState(jsdc,cx)))
    {
        if ((type != JSD_HOOK_THROW && type != JSD_HOOK_INTERRUPTED) ||
            jsdc->flags & JSD_MASK_TOP_FRAME_ONLY ||
            !(jsdthreadstate->flags & TS_HAS_DISABLED_FRAME))
        {
            /*
             * if it's not a throw and it's not an interrupt,
             * or we're only masking the top frame,
             * or there are no disabled frames in this stack,
             * then call out.
             */
             hookanswer = hook(jsdc, jsdthreadstate, type, hookData, rval);
             jsd_DestroyThreadState(jsdc, jsdthreadstate);
        }
    }

    switch(hookanswer)
    {
        case JSD_HOOK_RETURN_ABORT:
        case JSD_HOOK_RETURN_HOOK_ERROR:
            return JSTRAP_ERROR;
        case JSD_HOOK_RETURN_RET_WITH_VAL:
            return JSTRAP_RETURN;
        case JSD_HOOK_RETURN_THROW_WITH_VAL:
            return JSTRAP_THROW;
        case JSD_HOOK_RETURN_CONTINUE:
            break;
        case JSD_HOOK_RETURN_CONTINUE_THROW:
            /* only makes sense for jsd_ThrowHandler (which init'd rval) */
            JS_ASSERT(JSD_HOOK_THROW == type);
            return JSTRAP_THROW;
        default:
            JS_ASSERT(0);
            break;
    }
    return JSTRAP_CONTINUE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 263 of file jsd_hook.c.

{
    JSD_LOCK();
    jsdc->debugBreakHook      = NULL;
    JSD_UNLOCK();

    return JS_TRUE;
}

Here is the caller graph for this function:

Definition at line 286 of file jsd_hook.c.

{
    JSD_LOCK();
    jsdc->debuggerHook      = NULL;
    JSD_UNLOCK();

    return JS_TRUE;
}

Here is the caller graph for this function:

Definition at line 332 of file jsd_hook.c.

{
    JSD_LOCK();
    jsdc->functionHook      = NULL;
    JSD_UNLOCK();

    return JS_TRUE;
}

Here is the caller graph for this function:

Definition at line 239 of file jsd_hook.c.

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 309 of file jsd_hook.c.

{
    JSD_LOCK();
    jsdc->throwHook      = NULL;
    JSD_UNLOCK();

    return JS_TRUE;
}

Here is the caller graph for this function:

Definition at line 355 of file jsd_hook.c.

{
    JSD_LOCK();
    jsdc->toplevelHook      = NULL;
    JSD_UNLOCK();

    return JS_TRUE;
}

Here is the caller graph for this function:

JSTrapStatus JS_DLL_CALLBACK jsd_DebuggerHandler ( JSContext cx,
JSScript script,
jsbytecode pc,
jsval rval,
void closure 
)

Definition at line 84 of file jsd_hook.c.

{
    JSDScript*      jsdscript;
    JSDContext*     jsdc = (JSDContext*) closure;
    JSD_ExecutionHookProc hook;
    void*                 hookData;

    if( ! jsdc || ! jsdc->inited )
        return JSTRAP_CONTINUE;

    if( JSD_IS_DANGEROUS_THREAD(jsdc) )
        return JSTRAP_CONTINUE;

    /* local in case jsdc->debuggerHook gets cleared on another thread */
    JSD_LOCK();
    hook     = jsdc->debuggerHook;
    hookData = jsdc->debuggerHookData;
    JSD_UNLOCK();
    if(!hook)
        return JSTRAP_CONTINUE;

    JSD_LOCK_SCRIPTS(jsdc);
    jsdscript = jsd_FindJSDScript(jsdc, script);
    JSD_UNLOCK_SCRIPTS(jsdc);
    if( ! jsdscript )
        return JSTRAP_CONTINUE;

    return jsd_CallExecutionHook(jsdc, cx, JSD_HOOK_DEBUGGER_KEYWORD,
                                 hook, hookData, rval);
}

Here is the call graph for this function:

Here is the caller graph for this function:

JSTrapStatus JS_DLL_CALLBACK jsd_InterruptHandler ( JSContext cx,
JSScript script,
jsbytecode pc,
jsval rval,
void closure 
)

Definition at line 45 of file jsd_hook.c.

{
    JSDScript*      jsdscript;
    JSDContext*     jsdc = (JSDContext*) closure;
    JSD_ExecutionHookProc hook;
    void*                 hookData;

    if( ! jsdc || ! jsdc->inited )
        return JSTRAP_CONTINUE;

    if( JSD_IS_DANGEROUS_THREAD(jsdc) )
        return JSTRAP_CONTINUE;

    /* local in case jsdc->interruptHook gets cleared on another thread */
    JSD_LOCK();
    hook     = jsdc->interruptHook;
    hookData = jsdc->interruptHookData;
    JSD_UNLOCK();

    if (!hook)
        return JSTRAP_CONTINUE;
    
    JSD_LOCK_SCRIPTS(jsdc);
    jsdscript = jsd_FindJSDScript(jsdc, script);
    JSD_UNLOCK_SCRIPTS(jsdc);
    if( ! jsdscript )
        return JSTRAP_CONTINUE;

#ifdef LIVEWIRE
    if( ! jsdlw_UserCodeAtPC(jsdc, jsdscript, (jsuword)pc) )
        return JSTRAP_CONTINUE;
#endif

    return jsd_CallExecutionHook(jsdc, cx, JSD_HOOK_INTERRUPTED,
                                 hook, hookData, rval);
}

Here is the call graph for this function:

Here is the caller graph for this function:

JSBool jsd_SetDebugBreakHook ( JSDContext jsdc,
JSD_ExecutionHookProc  hook,
void callerdata 
)

Definition at line 250 of file jsd_hook.c.

Here is the caller graph for this function:

JSBool jsd_SetDebuggerHook ( JSDContext jsdc,
JSD_ExecutionHookProc  hook,
void callerdata 
)

Definition at line 273 of file jsd_hook.c.

Here is the caller graph for this function:

JSBool jsd_SetFunctionHook ( JSDContext jsdc,
JSD_CallHookProc  hook,
void callerdata 
)

Definition at line 319 of file jsd_hook.c.

Here is the caller graph for this function:

JSBool jsd_SetInterruptHook ( JSDContext jsdc,
JSD_ExecutionHookProc  hook,
void callerdata 
)

Definition at line 225 of file jsd_hook.c.

Here is the call graph for this function:

Here is the caller graph for this function:

JSBool jsd_SetThrowHook ( JSDContext jsdc,
JSD_ExecutionHookProc  hook,
void callerdata 
)

Definition at line 296 of file jsd_hook.c.

{
    JSD_LOCK();
    jsdc->throwHookData  = callerdata;
    jsdc->throwHook      = hook;
    JSD_UNLOCK();

    return JS_TRUE;
}

Here is the caller graph for this function:

JSBool jsd_SetTopLevelHook ( JSDContext jsdc,
JSD_CallHookProc  hook,
void callerdata 
)

Definition at line 342 of file jsd_hook.c.

Here is the caller graph for this function:

JSTrapStatus JS_DLL_CALLBACK jsd_ThrowHandler ( JSContext cx,
JSScript script,
jsbytecode pc,
jsval rval,
void closure 
)

Definition at line 118 of file jsd_hook.c.

{
    JSDScript*      jsdscript;
    JSDContext*     jsdc = (JSDContext*) closure;
    JSD_ExecutionHookProc hook;
    void*                 hookData;

    if( ! jsdc || ! jsdc->inited )
        return JSD_HOOK_RETURN_CONTINUE_THROW;

    if( JSD_IS_DANGEROUS_THREAD(jsdc) )
        return JSD_HOOK_RETURN_CONTINUE_THROW;

    /* local in case jsdc->throwHook gets cleared on another thread */
    JSD_LOCK();
    hook     = jsdc->throwHook;
    hookData = jsdc->throwHookData;
    JSD_UNLOCK();
    if (!hook)
        return JSD_HOOK_RETURN_CONTINUE_THROW;

    JSD_LOCK_SCRIPTS(jsdc);
    jsdscript = jsd_FindJSDScript(jsdc, script);
    JSD_UNLOCK_SCRIPTS(jsdc);
    if( ! jsdscript )
        return JSD_HOOK_RETURN_CONTINUE_THROW;

    JS_GetPendingException(cx, rval);

    return jsd_CallExecutionHook(jsdc, cx, JSD_HOOK_THROW,
                                 hook, hookData, rval);
}

Here is the call graph for this function:

Here is the caller graph for this function: