gecko-dev/js/ref/jsd/jsdebug.c

560 строки
15 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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 API - All public functions
*/
#include "jsd.h"
/***************************************************************************/
/* High Level calls */
JS_PUBLIC_API(JSDContext*)
JSD_DebuggerOnForUser(JSTaskState* jstaskstate,
JSD_UserCallbacks* callbacks,
void* user)
{
return jsd_DebuggerOnForUser(jstaskstate, callbacks, user);
}
JS_PUBLIC_API(JSDContext*)
JSD_DebuggerOn(void)
{
return jsd_DebuggerOn();
}
JS_PUBLIC_API(void)
JSD_DebuggerOff(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
jsd_DebuggerOff(jsdc);
}
JS_PUBLIC_API(uintN)
JSD_GetMajorVersion(void)
{
return JSD_MAJOR_VERSION;
}
JS_PUBLIC_API(uintN)
JSD_GetMinorVersion(void)
{
return JSD_MINOR_VERSION;
}
JS_PUBLIC_API(JSContext*)
JSD_GetDefaultJSContext(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsdc->dumbContext;
}
JS_PUBLIC_API(void)
JSD_SetUserCallbacks(JSTaskState* jstaskstate, JSD_UserCallbacks* callbacks, void* user)
{
jsd_SetUserCallbacks(jstaskstate, callbacks, user);
}
JS_PUBLIC_API(void)
JSD_JSContextInUse(JSDContext* jsdc, JSContext* context)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
jsd_JSContextUsed(jsdc, context);
}
JS_PUBLIC_API(JSDContext*)
JSD_JSDContextForJSContext(JSContext* context)
{
return jsd_JSDContextForJSContext(context);
}
/***************************************************************************/
/* Script functions */
JS_PUBLIC_API(void)
JSD_LockScriptSubsystem(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_LOCK_SCRIPTS(jsdc);
}
JS_PUBLIC_API(void)
JSD_UnlockScriptSubsystem(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_UNLOCK_SCRIPTS(jsdc);
}
JS_PUBLIC_API(JSDScript*)
JSD_IterateScripts(JSDContext* jsdc, JSDScript **iterp)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_IterateScripts(jsdc, iterp);
}
JS_PUBLIC_API(JSBool)
JSD_IsActiveScript(JSDContext* jsdc, JSDScript *jsdscript)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_IsActiveScript(jsdc, jsdscript);
}
JS_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);
}
JS_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);
}
JS_PUBLIC_API(uintN)
JSD_GetScriptBaseLineNumber(JSDContext* jsdc, JSDScript *jsdscript)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsd_GetScriptBaseLineNumber(jsdc, jsdscript);
}
JS_PUBLIC_API(uintN)
JSD_GetScriptLineExtent(JSDContext* jsdc, JSDScript *jsdscript)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsd_GetScriptLineExtent(jsdc, jsdscript);
}
JS_PUBLIC_API(JSBool)
JSD_SetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc hook, void* callerdata)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_SetScriptHook(jsdc, hook, callerdata);
}
JS_PUBLIC_API(JSBool)
JSD_GetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc* hook, void** callerdata)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_GetScriptHook(jsdc, hook, callerdata);
}
JS_PUBLIC_API(pruword)
JSD_GetClosestPC(JSDContext* jsdc, JSDScript* jsdscript, uintN line)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsd_GetClosestPC(jsdc, jsdscript, line);
}
JS_PUBLIC_API(uintN)
JSD_GetClosestLine(JSDContext* jsdc, JSDScript* jsdscript, pruword pc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsd_GetClosestLine(jsdc, jsdscript, pc);
}
JS_PUBLIC_API(void)
JSD_ScriptCreated(JSDContext* jsdc,
JSContext *cx,
const char *filename, /* URL this script loads from */
uintN lineno, /* line where this script starts */
JSScript *script,
JSFunction *fun)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
jsd_ScriptCreated(jsdc, cx, filename, lineno, script, fun);
}
JS_PUBLIC_API(void)
JSD_ScriptDestroyed(JSDContext* jsdc,
JSContext *cx,
JSScript *script)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
jsd_ScriptDestroyed(jsdc, cx, script);
}
/***************************************************************************/
/* Source Text functions */
JS_PUBLIC_API(void)
JSD_LockSourceTextSubsystem(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_LOCK_SOURCE_TEXT(jsdc);
}
JS_PUBLIC_API(void)
JSD_UnlockSourceTextSubsystem(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_UNLOCK_SOURCE_TEXT(jsdc);
}
JS_PUBLIC_API(JSDSourceText*)
JSD_IterateSources(JSDContext* jsdc, JSDSourceText **iterp)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_IterateSources(jsdc, iterp);
}
JS_PUBLIC_API(JSDSourceText*)
JSD_FindSourceForURL(JSDContext* jsdc, const char* url)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
PR_ASSERT(url);
return jsd_FindSourceForURL(jsdc, url);
}
JS_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);
}
JS_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);
}
JS_PUBLIC_API(void)
JSD_ClearSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
jsd_ClearSourceText(jsdc, jsdsrc);
}
JS_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);
}
JS_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);
}
JS_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);
}
JS_PUBLIC_API(uintN)
JSD_GetSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
return jsd_GetSourceAlterCount(jsdc, jsdsrc);
}
JS_PUBLIC_API(uintN)
JSD_IncrementSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
return jsd_IncrementSourceAlterCount(jsdc, jsdsrc);
}
JS_PUBLIC_API(void)
JSD_DestroyAllSources( JSDContext* jsdc )
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
jsd_DestroyAllSources(jsdc);
}
JS_PUBLIC_API(JSDSourceText*)
JSD_NewSourceText(JSDContext* jsdc, const char* url)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
PR_ASSERT(url);
return jsd_NewSourceText(jsdc, url);
}
JS_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);
}
JS_PUBLIC_API(JSBool)
JSD_AddFullSourceText(JSDContext* jsdc,
const char* text, /* *not* zero terminated */
size_t length,
const char* url)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
PR_ASSERT(url);
return jsd_AddFullSourceText(jsdc, text, length, url);
}
/***************************************************************************/
/* Execution/Interrupt Hook functions */
JS_PUBLIC_API(JSBool)
JSD_SetExecutionHook(JSDContext* jsdc,
JSDScript* jsdscript,
pruword pc,
JSD_ExecutionHookProc hook,
void* callerdata)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsd_SetExecutionHook(jsdc, jsdscript, pc, hook, callerdata);
}
JS_PUBLIC_API(JSBool)
JSD_ClearExecutionHook(JSDContext* jsdc,
JSDScript* jsdscript,
pruword pc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsd_ClearExecutionHook(jsdc, jsdscript, pc);
}
JS_PUBLIC_API(JSBool)
JSD_ClearAllExecutionHooksForScript(JSDContext* jsdc, JSDScript* jsdscript)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsd_ClearAllExecutionHooksForScript(jsdc, jsdscript);
}
JS_PUBLIC_API(JSBool)
JSD_ClearAllExecutionHooks(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_ClearAllExecutionHooks(jsdc);
}
JS_PUBLIC_API(JSBool)
JSD_SetInterruptHook(JSDContext* jsdc,
JSD_ExecutionHookProc hook,
void* callerdata)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_SetInterruptHook(jsdc, hook, callerdata);
}
JS_PUBLIC_API(JSBool)
JSD_ClearInterruptHook(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_ClearInterruptHook(jsdc);
}
JS_PUBLIC_API(JSBool)
JSD_SetDebugBreakHook(JSDContext* jsdc,
JSD_ExecutionHookProc hook,
void* callerdata)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_SetDebugBreakHook(jsdc, hook, callerdata);
}
JS_PUBLIC_API(JSBool)
JSD_ClearDebugBreakHook(JSDContext* jsdc)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_ClearDebugBreakHook(jsdc);
}
/***************************************************************************/
/* Stack Frame functions */
JS_PUBLIC_API(uintN)
JSD_GetCountOfStackFrames(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_GetCountOfStackFrames(jsdc, jsdthreadstate);
}
JS_PUBLIC_API(JSDStackFrameInfo*)
JSD_GetStackFrame(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_GetStackFrame(jsdc, jsdthreadstate);
}
JS_PUBLIC_API(JSDStackFrameInfo*)
JSD_GetCallingStackFrame(JSDContext* jsdc,
JSDThreadState* jsdthreadstate,
JSDStackFrameInfo* jsdframe)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_GetCallingStackFrame(jsdc, jsdthreadstate, jsdframe);
}
JS_PUBLIC_API(JSDScript*)
JSD_GetScriptForStackFrame(JSDContext* jsdc,
JSDThreadState* jsdthreadstate,
JSDStackFrameInfo* jsdframe)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_GetScriptForStackFrame(jsdc, jsdthreadstate, jsdframe);
}
JS_PUBLIC_API(pruword)
JSD_GetPCForStackFrame(JSDContext* jsdc,
JSDThreadState* jsdthreadstate,
JSDStackFrameInfo* jsdframe)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_GetPCForStackFrame(jsdc, jsdthreadstate, jsdframe);
}
JS_PUBLIC_API(JSBool)
JSD_EvaluateScriptInStackFrame(JSDContext* jsdc,
JSDThreadState* jsdthreadstate,
JSDStackFrameInfo* jsdframe,
const char *bytes, uintN length,
const char *filename, uintN 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);
}
JS_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);
}
/***************************************************************************/
JS_PUBLIC_API(JSBool)
JSD_SetErrorReporter(JSDContext* jsdc,
JSD_ErrorReporter reporter,
void* callerdata)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_SetErrorReporter(jsdc, reporter, callerdata);
}
JS_PUBLIC_API(JSBool)
JSD_GetErrorReporter(JSDContext* jsdc,
JSD_ErrorReporter* reporter,
void** callerdata)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
return jsd_GetErrorReporter(jsdc, reporter, callerdata);
}
/***************************************************************************/
/* Livewire specific API */
#ifdef LIVEWIRE
JS_PUBLIC_API(LWDBGScript*)
JSDLW_GetLWScript(JSDContext* jsdc, JSDScript* jsdscript)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsdlw_GetLWScript(jsdc, jsdscript);
}
JS_PUBLIC_API(JSDSourceText*)
JSDLW_PreLoadSource( JSDContext* jsdc, LWDBGApp* app,
const char* filename, JSBool clear )
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
PR_ASSERT(app);
PR_ASSERT(filename);
return jsdlw_PreLoadSource(jsdc, app, filename, clear);
}
JS_PUBLIC_API(JSDSourceText*)
JSDLW_ForceLoadSource( JSDContext* jsdc, JSDSourceText* jsdsrc )
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
return jsdlw_ForceLoadSource(jsdc, jsdsrc);
}
JS_PUBLIC_API(JSBool)
JSDLW_RawToProcessedLineNumber(JSDContext* jsdc, JSDScript* jsdscript,
uintN lineIn, uintN* lineOut)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsdlw_RawToProcessedLineNumber(jsdc, jsdscript, lineIn, lineOut);
}
JS_PUBLIC_API(JSBool)
JSDLW_ProcessedToRawLineNumber(JSDContext* jsdc, JSDScript* jsdscript,
uintN lineIn, uintN* lineOut)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_SCRIPT(jsdscript);
return jsdlw_ProcessedToRawLineNumber(jsdc, jsdscript, lineIn, lineOut);
}
#endif
/***************************************************************************/