forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			432 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			432 lines
		
	
	
	
		
			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);
 | |
| }
 | 
