mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 03:05:34 +00:00
- not built -
fixed NS_IF_ADDREF(aHook)s added more hook attributes
This commit is contained in:
parent
b52e7f3dd9
commit
1982921232
@ -98,7 +98,7 @@ interface jsdIValue : nsISupports
|
||||
[scriptable, uuid(ae89a7e2-1dd1-11b2-8c2f-af82086291a5)]
|
||||
interface jsdIScriptHook : nsISupports
|
||||
{
|
||||
void onScriptHook (in jsdIContext aCx, in jsdIScript aScript,
|
||||
void onScriptLoaded (in jsdIContext aCx, in jsdIScript aScript,
|
||||
in boolean aCreating);
|
||||
|
||||
};
|
||||
@ -106,16 +106,16 @@ interface jsdIScriptHook : nsISupports
|
||||
[scriptable, uuid(9a7b6ad0-1dd1-11b2-a789-fcfae96356a2)]
|
||||
interface jsdIExecutionHook : nsISupports
|
||||
{
|
||||
const unsigned long HOOK_RETURN_HOOK_ERROR = 0;
|
||||
const unsigned long HOOK_RETURN_CONTINUE = 1;
|
||||
const unsigned long HOOK_RETURN_ABORT = 2;
|
||||
const unsigned long HOOK_RETURN_RET_WITH_VAL = 3;
|
||||
const unsigned long HOOK_RETURN_THROW_WITH_VAL = 4;
|
||||
const unsigned long HOOK_RETURN_CONTINUE_THROW = 5;
|
||||
const unsigned long RETURN_HOOK_ERROR = 0;
|
||||
const unsigned long RETURN_CONTINUE = 1;
|
||||
const unsigned long RETURN_ABORT = 2;
|
||||
const unsigned long RETURN_RET_WITH_VAL = 3;
|
||||
const unsigned long RETURN_THROW_WITH_VAL = 4;
|
||||
const unsigned long RETURN_CONTINUE_THROW = 5;
|
||||
|
||||
unsigned long onExecutionHook (in jsdIContext aCx,
|
||||
in jsdIThreadState aThreadState,
|
||||
in unsigned long aType, out nsISupports rval);
|
||||
unsigned long onExecute (in jsdIContext aCx,
|
||||
in jsdIThreadState aThreadState,
|
||||
in unsigned long aType, out nsISupports rval);
|
||||
};
|
||||
|
||||
[scriptable, uuid(01be7f9a-1dd2-11b2-9d55-aaf919b27c73)]
|
||||
@ -123,8 +123,10 @@ interface jsdIDebuggerService : nsISupports
|
||||
{
|
||||
void init ();
|
||||
|
||||
attribute jsdIScriptHook scriptHook;
|
||||
attribute jsdIExecutionHook debugBreakHook;
|
||||
attribute jsdIExecutionHook debuggerHook;
|
||||
attribute jsdIExecutionHook interruptHook;
|
||||
|
||||
attribute jsdIScriptHook scriptHook;
|
||||
|
||||
};
|
||||
|
||||
|
@ -54,20 +54,19 @@ jsds_SetContextProc (JSDContext* jsdc, void* user)
|
||||
}
|
||||
|
||||
static PRUint32
|
||||
jsds_InterruptHookProc (JSDContext* jsdc, JSDThreadState* jsdthreadstate,
|
||||
jsds_ExecutionHookProc (JSDContext* jsdc, JSDThreadState* jsdthreadstate,
|
||||
uintN type, void* callerdata, jsval* rval)
|
||||
{
|
||||
if (!callerdata)
|
||||
return JSD_HOOK_RETURN_CONTINUE;
|
||||
NS_PRECONDITION (callerdata, "no callerdata for jsds_ExecutionHookProc.");
|
||||
|
||||
jsdIExecutionHook *hook = NS_STATIC_CAST(jsdIExecutionHook *, callerdata);
|
||||
nsISupports *is_rv = 0;
|
||||
|
||||
PRUint32 hook_rv = JSD_HOOK_RETURN_CONTINUE;
|
||||
|
||||
hook->OnExecutionHook (jsdContext::FromPtr(jsdc),
|
||||
jsdThreadState::FromPtr(jsdthreadstate),
|
||||
type, &is_rv, &hook_rv);
|
||||
hook->OnExecute (jsdContext::FromPtr(jsdc),
|
||||
jsdThreadState::FromPtr(jsdthreadstate),
|
||||
type, &is_rv, &hook_rv);
|
||||
return hook_rv;
|
||||
}
|
||||
|
||||
@ -79,9 +78,9 @@ jsds_ScriptHookProc (JSDContext* jsdc, JSDScript* jsdscript, JSBool creating,
|
||||
return;
|
||||
|
||||
jsdIScriptHook *hook = NS_STATIC_CAST(jsdIScriptHook *, callerdata);
|
||||
hook->OnScriptHook (jsdContext::FromPtr(jsdc),
|
||||
jsdScript::FromPtr(jsdc, jsdscript),
|
||||
creating ? PR_TRUE : PR_FALSE);
|
||||
hook->OnScriptLoaded (jsdContext::FromPtr(jsdc),
|
||||
jsdScript::FromPtr(jsdc, jsdscript),
|
||||
creating ? PR_TRUE : PR_FALSE);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -107,10 +106,58 @@ jsdService::Init (void)
|
||||
jsd_uc.setContext = jsds_SetContextProc;
|
||||
|
||||
mJSDcx = JSD_DebuggerOnForUser (mJSrt, &jsd_uc, NULL);
|
||||
JSD_SetInterruptHook (mJSDcx, jsds_InterruptHookProc,
|
||||
NS_STATIC_CAST(void *, 0 /*aHook*/));
|
||||
JSD_SetScriptHook (mJSDcx, jsds_ScriptHookProc,
|
||||
NS_STATIC_CAST(void *, 0 /*aHook*/));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* hook attribute get/set functions */
|
||||
|
||||
NS_IMETHODIMP
|
||||
jsdService::SetDebugBreakHook (jsdIExecutionHook *aHook)
|
||||
{
|
||||
mDebugBreakHook = aHook;
|
||||
if (aHook)
|
||||
JSD_SetDebugBreakHook (mJSDcx, jsds_ExecutionHookProc,
|
||||
NS_STATIC_CAST(void *, aHook));
|
||||
else
|
||||
JSD_ClearDebugBreakHook (mJSDcx);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
jsdService::GetDebugBreakHook (jsdIExecutionHook **aHook)
|
||||
{
|
||||
if (!aHook)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aHook = mDebugBreakHook;
|
||||
NS_IF_ADDREF(*aHook);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
jsdService::SetDebuggerHook (jsdIExecutionHook *aHook)
|
||||
{
|
||||
mDebuggerHook = aHook;
|
||||
if (aHook)
|
||||
JSD_SetDebuggerHook (mJSDcx, jsds_ExecutionHookProc,
|
||||
NS_STATIC_CAST(void *, aHook));
|
||||
else
|
||||
JSD_ClearDebuggerHook (mJSDcx);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
jsdService::GetDebuggerHook (jsdIExecutionHook **aHook)
|
||||
{
|
||||
if (!aHook)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aHook = mDebuggerHook;
|
||||
NS_IF_ADDREF(*aHook);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -119,8 +166,12 @@ NS_IMETHODIMP
|
||||
jsdService::SetInterruptHook (jsdIExecutionHook *aHook)
|
||||
{
|
||||
mInterruptHook = aHook;
|
||||
JSD_SetInterruptHook (mJSDcx, jsds_InterruptHookProc,
|
||||
NS_STATIC_CAST(void *, aHook));
|
||||
if (aHook)
|
||||
JSD_SetInterruptHook (mJSDcx, jsds_ExecutionHookProc,
|
||||
NS_STATIC_CAST(void *, aHook));
|
||||
else
|
||||
JSD_ClearInterruptHook (mJSDcx);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -131,7 +182,7 @@ jsdService::GetInterruptHook (jsdIExecutionHook **aHook)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aHook = mInterruptHook;
|
||||
NS_IF_ADDREF(aHook);
|
||||
NS_IF_ADDREF(*aHook);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
@ -150,7 +201,7 @@ jsdService::GetScriptHook (jsdIScriptHook **aHook)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aHook = mScriptHook;
|
||||
NS_IF_ADDREF(aHook);
|
||||
NS_IF_ADDREF(*aHook);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -54,7 +54,8 @@ class jsdService : public jsdIDebuggerService
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_JSDIDEBUGGERSERVICE
|
||||
|
||||
jsdService() : mJSrt(0), mJSDcx(0), mScriptHook(0), mInterruptHook(0)
|
||||
jsdService() : mJSrt(0), mJSDcx(0), mDebugBreakHook(0), mDebuggerHook(0),
|
||||
mInterruptHook(0), mScriptHook(0)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
}
|
||||
@ -63,8 +64,10 @@ class jsdService : public jsdIDebuggerService
|
||||
private:
|
||||
JSRuntime *mJSrt;
|
||||
JSDContext *mJSDcx;
|
||||
nsCOMPtr<jsdIScriptHook> mScriptHook;
|
||||
nsCOMPtr<jsdIExecutionHook> mDebugBreakHook;
|
||||
nsCOMPtr<jsdIExecutionHook> mDebuggerHook;
|
||||
nsCOMPtr<jsdIExecutionHook> mInterruptHook;
|
||||
nsCOMPtr<jsdIScriptHook> mScriptHook;
|
||||
};
|
||||
|
||||
#endif /* JSDSERVICE_H___ */
|
||||
|
Loading…
Reference in New Issue
Block a user