зеркало из https://github.com/mozilla/pjs.git
433 строки
12 KiB
C
433 строки
12 KiB
C
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||
|
*
|
||
|
* The contents of this file are subject to the Netscape Public License
|
||
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
||
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
||
|
* http://www.mozilla.org/NPL/
|
||
|
*
|
||
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* NPL.
|
||
|
*
|
||
|
* The Initial Developer of this code under the NPL is Netscape
|
||
|
* Communications Corporation. Portions created by Netscape are
|
||
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||
|
* Reserved.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
** JavaScript Debugger Navigator API - All public functions
|
||
|
*/
|
||
|
|
||
|
#include "jsd.h"
|
||
|
|
||
|
/* use a global context for now (avoid direct references to it!) */
|
||
|
static JSDContext _static_context;
|
||
|
|
||
|
/***************************************************************************/
|
||
|
/* High Level calls */
|
||
|
|
||
|
PR_PUBLIC_API(JSDContext*)
|
||
|
JSD_DebuggerOn(void)
|
||
|
{
|
||
|
return jsd_DebuggerOn();
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_DebuggerOff(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
jsd_DebuggerOff(jsdc);
|
||
|
}
|
||
|
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_GetMajorVersion(void)
|
||
|
{
|
||
|
return JSD_MAJOR_VERSION;
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_GetMinorVersion(void)
|
||
|
{
|
||
|
return JSD_MINOR_VERSION;
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSContext*)
|
||
|
JSD_GetDefaultJSContext(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsdc->dumbContext;
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_SetUserCallbacks(JSTaskState* jstaskstate, JSD_UserCallbacks* callbacks, void* user)
|
||
|
{
|
||
|
jsd_SetUserCallbacks(jstaskstate, callbacks, user);
|
||
|
}
|
||
|
|
||
|
/***************************************************************************/
|
||
|
/* Script functions */
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_LockScriptSubsystem(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
jsd_LockScriptSubsystem(jsdc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_UnlockScriptSubsystem(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
jsd_UnlockScriptSubsystem(jsdc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDScript*)
|
||
|
JSD_IterateScripts(JSDContext* jsdc, JSDScript **iterp)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_IterateScripts(jsdc, iterp);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(const char*)
|
||
|
JSD_GetScriptFilename(JSDContext* jsdc, JSDScript *jsdscript)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_GetScriptFilename(jsdc, jsdscript);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(const char*)
|
||
|
JSD_GetScriptFunctionName(JSDContext* jsdc, JSDScript *jsdscript)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_GetScriptFunctionName(jsdc, jsdscript);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_GetScriptBaseLineNumber(JSDContext* jsdc, JSDScript *jsdscript)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_GetScriptBaseLineNumber(jsdc, jsdscript);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_GetScriptLineExtent(JSDContext* jsdc, JSDScript *jsdscript)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_GetScriptLineExtent(jsdc, jsdscript);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSD_ScriptHookProc)
|
||
|
JSD_SetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc hook, void* callerdata)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_SetScriptHook(jsdc, hook, callerdata);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSD_ScriptHookProc)
|
||
|
JSD_GetScriptHook(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_GetScriptHook(jsdc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(prword_t)
|
||
|
JSD_GetClosestPC(JSDContext* jsdc, JSDScript* jsdscript, PRUintn line)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_GetClosestPC(jsdc, jsdscript, line);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_GetClosestLine(JSDContext* jsdc, JSDScript* jsdscript, prword_t pc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_GetClosestLine(jsdc, jsdscript, pc);
|
||
|
}
|
||
|
|
||
|
/***************************************************************************/
|
||
|
/* Source Text functions */
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_LockSourceTextSubsystem(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
jsd_LockSourceTextSubsystem(jsdc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_UnlockSourceTextSubsystem(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
jsd_UnlockSourceTextSubsystem(jsdc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDSourceText*)
|
||
|
JSD_IterateSources(JSDContext* jsdc, JSDSourceText **iterp)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_IterateSources(jsdc, iterp);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDSourceText*)
|
||
|
JSD_FindSourceForURL(JSDContext* jsdc, const char* url)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
PR_ASSERT(url);
|
||
|
return jsd_FindSourceForURL(jsdc, url);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(const char*)
|
||
|
JSD_GetSourceURL(JSDContext* jsdc, JSDSourceText* jsdsrc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
return jsd_GetSourceURL(jsdc,jsdsrc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_GetSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc,
|
||
|
const char** ppBuf, int* pLen)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
PR_ASSERT(ppBuf);
|
||
|
PR_ASSERT(pLen);
|
||
|
return jsd_GetSourceText(jsdc, jsdsrc, ppBuf, pLen);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_ClearSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
jsd_ClearSourceText(jsdc, jsdsrc);
|
||
|
}
|
||
|
|
||
|
|
||
|
PR_PUBLIC_API(JSDSourceStatus)
|
||
|
JSD_GetSourceStatus(JSDContext* jsdc, JSDSourceText* jsdsrc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
return jsd_GetSourceStatus(jsdc, jsdsrc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_IsSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
return jsd_IsSourceDirty(jsdc, jsdsrc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(void)
|
||
|
JSD_SetSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc, JSBool dirty)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
jsd_SetSourceDirty(jsdc, jsdsrc, dirty);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_GetSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
return jsd_GetSourceAlterCount(jsdc, jsdsrc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_IncrementSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
return jsd_IncrementSourceAlterCount(jsdc, jsdsrc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDSourceText*)
|
||
|
JSD_NewSourceText(JSDContext* jsdc, const char* url)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_NewSourceText(jsdc, url);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDSourceText*)
|
||
|
JSD_AppendSourceText(JSDContext* jsdc,
|
||
|
JSDSourceText* jsdsrc,
|
||
|
const char* text, /* *not* zero terminated */
|
||
|
size_t length,
|
||
|
JSDSourceStatus status)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
|
||
|
return jsd_AppendSourceText(jsdc, jsdsrc, text, length, status);
|
||
|
}
|
||
|
|
||
|
/***************************************************************************/
|
||
|
/* Execution/Interrupt Hook functions */
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_SetExecutionHook(JSDContext* jsdc,
|
||
|
JSDScript* jsdscript,
|
||
|
prword_t pc,
|
||
|
JSD_ExecutionHookProc hook,
|
||
|
void* callerdata)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_SetExecutionHook(jsdc, jsdscript, pc, hook, callerdata);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_ClearExecutionHook(JSDContext* jsdc,
|
||
|
JSDScript* jsdscript,
|
||
|
prword_t pc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_ClearExecutionHook(jsdc, jsdscript, pc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_ClearAllExecutionHooksForScript(JSDContext* jsdc, JSDScript* jsdscript)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
JSD_ASSERT_VALID_SCRIPT(jsdscript);
|
||
|
return jsd_ClearAllExecutionHooksForScript(jsdc, jsdscript);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_ClearAllExecutionHooks(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_ClearAllExecutionHooks(jsdc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_SetInterruptHook(JSDContext* jsdc,
|
||
|
JSD_ExecutionHookProc hook,
|
||
|
void* callerdata)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_SetInterruptHook(jsdc, hook, callerdata);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_ClearInterruptHook(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_ClearInterruptHook(jsdc);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_SetDebugBreakHook(JSDContext* jsdc,
|
||
|
JSD_ExecutionHookProc hook,
|
||
|
void* callerdata)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_SetDebugBreakHook(jsdc, hook, callerdata);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_ClearDebugBreakHook(JSDContext* jsdc)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_ClearDebugBreakHook(jsdc);
|
||
|
}
|
||
|
|
||
|
|
||
|
/***************************************************************************/
|
||
|
/* Stack Frame functions */
|
||
|
|
||
|
PR_PUBLIC_API(PRUintn)
|
||
|
JSD_GetCountOfStackFrames(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
|
||
|
return jsd_GetCountOfStackFrames(jsdc, jsdthreadstate);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDStackFrameInfo*)
|
||
|
JSD_GetStackFrame(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
|
||
|
return jsd_GetStackFrame(jsdc, jsdthreadstate);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDStackFrameInfo*)
|
||
|
JSD_GetCallingStackFrame(JSDContext* jsdc,
|
||
|
JSDThreadState* jsdthreadstate,
|
||
|
JSDStackFrameInfo* jsdframe)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
|
||
|
return jsd_GetCallingStackFrame(jsdc, jsdthreadstate, jsdframe);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSDScript*)
|
||
|
JSD_GetScriptForStackFrame(JSDContext* jsdc,
|
||
|
JSDThreadState* jsdthreadstate,
|
||
|
JSDStackFrameInfo* jsdframe)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
|
||
|
return jsd_GetScriptForStackFrame(jsdc, jsdthreadstate, jsdframe);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(prword_t)
|
||
|
JSD_GetPCForStackFrame(JSDContext* jsdc,
|
||
|
JSDThreadState* jsdthreadstate,
|
||
|
JSDStackFrameInfo* jsdframe)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
|
||
|
return jsd_GetPCForStackFrame(jsdc, jsdthreadstate, jsdframe);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSBool)
|
||
|
JSD_EvaluateScriptInStackFrame(JSDContext* jsdc,
|
||
|
JSDThreadState* jsdthreadstate,
|
||
|
JSDStackFrameInfo* jsdframe,
|
||
|
const char *bytes, PRUintn length,
|
||
|
const char *filename, PRUintn lineno, jsval *rval)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
PR_ASSERT(bytes);
|
||
|
PR_ASSERT(length);
|
||
|
PR_ASSERT(filename);
|
||
|
PR_ASSERT(rval);
|
||
|
|
||
|
return jsd_EvaluateScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
|
||
|
bytes, length,
|
||
|
filename, lineno, rval);
|
||
|
}
|
||
|
|
||
|
PR_PUBLIC_API(JSString*)
|
||
|
JSD_ValToStringInStackFrame(JSDContext* jsdc,
|
||
|
JSDThreadState* jsdthreadstate,
|
||
|
JSDStackFrameInfo* jsdframe,
|
||
|
jsval val)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_ValToStringInStackFrame(jsdc, jsdthreadstate, jsdframe, val);
|
||
|
}
|
||
|
|
||
|
/***************************************************************************/
|
||
|
|
||
|
PR_PUBLIC_API(JSD_ErrorReporter)
|
||
|
JSD_SetErrorReporter( JSDContext* jsdc, JSD_ErrorReporter reporter, void* callerdata)
|
||
|
{
|
||
|
JSD_ASSERT_VALID_CONTEXT(jsdc);
|
||
|
return jsd_SetErrorReporter(jsdc, reporter, callerdata);
|
||
|
}
|