- not built -

fixed NS_IF_ADDREF(aHook)s
added more hook attributes
This commit is contained in:
rginda%netscape.com 2001-04-16 23:43:09 +00:00
parent b52e7f3dd9
commit 1982921232
3 changed files with 87 additions and 31 deletions

View File

@ -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;
};

View File

@ -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;
}

View File

@ -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___ */