michael@0: /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- michael@0: * vim: set ts=8 sts=4 et sw=4 tw=99: michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: * JavaScript Debugging support - All public functions michael@0: */ michael@0: michael@0: #include "jsd.h" michael@0: michael@0: /***************************************************************************/ michael@0: /* High Level calls */ michael@0: michael@0: JSD_PUBLIC_API(JSDContext*) michael@0: JSD_DebuggerOnForUser(JSRuntime* jsrt, michael@0: JSD_UserCallbacks* callbacks, michael@0: void* user) michael@0: { michael@0: return jsd_DebuggerOnForUser(jsrt, callbacks, user, nullptr); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDContext*) michael@0: JSD_DebuggerOn(void) michael@0: { michael@0: return jsd_DebuggerOn(); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_DebuggerOff(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_DebuggerOff(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_DebuggerPause(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_DebuggerPause(jsdc, false); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_DebuggerUnpause(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_DebuggerUnpause(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetMajorVersion(void) michael@0: { michael@0: return JSD_MAJOR_VERSION; michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetMinorVersion(void) michael@0: { michael@0: return JSD_MINOR_VERSION; michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSObject*) michael@0: JSD_GetDefaultGlobal(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsdc->glob; michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSRuntime*) michael@0: JSD_GetJSRuntime(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsdc->jsrt; michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_SetUserCallbacks(JSRuntime* jsrt, JSD_UserCallbacks* callbacks, void* user) michael@0: { michael@0: jsd_SetUserCallbacks(jsrt, callbacks, user); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_JSContextInUse(JSDContext* jsdc, JSContext* context) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: /* we no longer need this information - may need it again in the future */ michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void *) michael@0: JSD_SetContextPrivate(JSDContext *jsdc, void *data) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetContextPrivate (jsdc, data); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void *) michael@0: JSD_GetContextPrivate(JSDContext *jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetContextPrivate (jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_ClearAllProfileData(JSDContext *jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_ClearAllProfileData(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_SetContextFlags(JSDContext *jsdc, uint32_t flags) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsdc->flags = flags; michael@0: if (flags & JSD_COLLECT_PROFILE_DATA) { michael@0: /* Need to reenable our call hooks now */ michael@0: JS_SetExecuteHook(jsdc->jsrt, jsd_TopLevelCallHook, jsdc); michael@0: JS_SetCallHook(jsdc->jsrt, jsd_FunctionCallHook, jsdc); michael@0: } michael@0: } michael@0: michael@0: JSD_PUBLIC_API(uint32_t) michael@0: JSD_GetContextFlags(JSDContext *jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsdc->flags; michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDContext*) michael@0: JSD_JSDContextForJSContext(JSContext* context) michael@0: { michael@0: return jsd_JSDContextForJSContext(context); michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: /* Script functions */ michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_LockScriptSubsystem(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_LOCK_SCRIPTS(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_UnlockScriptSubsystem(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_UNLOCK_SCRIPTS(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDScript*) michael@0: JSD_IterateScripts(JSDContext* jsdc, JSDScript **iterp) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_IterateScripts(jsdc, iterp); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(uint32_t) michael@0: JSD_GetScriptFlags(JSDContext *jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptFlags(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_SetScriptFlags(JSDContext *jsdc, JSDScript *script, uint32_t flags) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_SetScriptFlags(jsdc, script, flags); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetScriptCallCount(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptCallCount(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetScriptMaxRecurseDepth(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptMaxRecurseDepth(jsdc, script); michael@0: } michael@0: michael@0: michael@0: JSD_PUBLIC_API(double) michael@0: JSD_GetScriptMinExecutionTime(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptMinExecutionTime(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(double) michael@0: JSD_GetScriptMaxExecutionTime(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptMaxExecutionTime(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(double) michael@0: JSD_GetScriptTotalExecutionTime(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptTotalExecutionTime(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(double) michael@0: JSD_GetScriptMinOwnExecutionTime(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptMinOwnExecutionTime(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(double) michael@0: JSD_GetScriptMaxOwnExecutionTime(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptMaxOwnExecutionTime(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(double) michael@0: JSD_GetScriptTotalOwnExecutionTime(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptTotalOwnExecutionTime(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_ClearScriptProfileData(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_ClearScriptProfileData(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSScript*) michael@0: JSD_GetJSScript(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: return jsd_GetJSScript(jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSFunction*) michael@0: JSD_GetJSFunction(JSDContext* jsdc, JSDScript *script) michael@0: { michael@0: return jsd_GetJSFunction (jsdc, script); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void *) michael@0: JSD_SetScriptPrivate(JSDScript *jsdscript, void *data) michael@0: { michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_SetScriptPrivate (jsdscript, data); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void *) michael@0: JSD_GetScriptPrivate(JSDScript *jsdscript) michael@0: { michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetScriptPrivate (jsdscript); michael@0: } michael@0: michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsActiveScript(JSDContext* jsdc, JSDScript *jsdscript) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_IsActiveScript(jsdc, jsdscript); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(const char*) michael@0: JSD_GetScriptFilename(JSDContext* jsdc, JSDScript *jsdscript) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetScriptFilename(jsdc, jsdscript); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSString *) michael@0: JSD_GetScriptFunctionId(JSDContext* jsdc, JSDScript *jsdscript) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetScriptFunctionId(jsdc, jsdscript); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetScriptBaseLineNumber(JSDContext* jsdc, JSDScript *jsdscript) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetScriptBaseLineNumber(jsdc, jsdscript); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetScriptLineExtent(JSDContext* jsdc, JSDScript *jsdscript) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetScriptLineExtent(jsdc, jsdscript); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc hook, void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetScriptHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_GetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc* hook, void** callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(uintptr_t) michael@0: JSD_GetClosestPC(JSDContext* jsdc, JSDScript* jsdscript, unsigned line) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetClosestPC(jsdc, jsdscript, line); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetClosestLine(JSDContext* jsdc, JSDScript* jsdscript, uintptr_t pc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetClosestLine(jsdc, jsdscript, pc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_GetLinePCs(JSDContext* jsdc, JSDScript* jsdscript, michael@0: unsigned startLine, unsigned maxLines, michael@0: unsigned* count, unsigned** lines, uintptr_t** pcs) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_GetLinePCs(jsdc, jsdscript, startLine, maxLines, count, lines, pcs); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_ScriptCreated(JSDContext* jsdc, michael@0: JSContext *cx, michael@0: const char *filename, /* URL this script loads from */ michael@0: unsigned lineno, /* line where this script starts */ michael@0: JSScript *script, michael@0: JSFunction *fun) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_ScriptCreated(jsdc, cx, filename, lineno, script, fun); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_ScriptDestroyed(JSDContext* jsdc, michael@0: JSFreeOp *fop, michael@0: JSScript *script) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_ScriptDestroyed(jsdc, fop, script); michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: /* Source Text functions */ michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_LockSourceTextSubsystem(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_LOCK_SOURCE_TEXT(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_UnlockSourceTextSubsystem(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_UNLOCK_SOURCE_TEXT(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDSourceText*) michael@0: JSD_IterateSources(JSDContext* jsdc, JSDSourceText **iterp) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_IterateSources(jsdc, iterp); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDSourceText*) michael@0: JSD_FindSourceForURL(JSDContext* jsdc, const char* url) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(url); michael@0: return jsd_FindSourceForURL(jsdc, url); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(const char*) michael@0: JSD_GetSourceURL(JSDContext* jsdc, JSDSourceText* jsdsrc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: return jsd_GetSourceURL(jsdc,jsdsrc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_GetSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc, michael@0: const char** ppBuf, int* pLen) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: MOZ_ASSERT(ppBuf); michael@0: MOZ_ASSERT(pLen); michael@0: return jsd_GetSourceText(jsdc, jsdsrc, ppBuf, pLen); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_ClearSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: jsd_ClearSourceText(jsdc, jsdsrc); michael@0: } michael@0: michael@0: michael@0: JSD_PUBLIC_API(JSDSourceStatus) michael@0: JSD_GetSourceStatus(JSDContext* jsdc, JSDSourceText* jsdsrc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: return jsd_GetSourceStatus(jsdc, jsdsrc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: return jsd_IsSourceDirty(jsdc, jsdsrc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_SetSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc, bool dirty) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: jsd_SetSourceDirty(jsdc, jsdsrc, dirty); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: return jsd_GetSourceAlterCount(jsdc, jsdsrc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_IncrementSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: return jsd_IncrementSourceAlterCount(jsdc, jsdsrc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_DestroyAllSources( JSDContext* jsdc ) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: jsd_DestroyAllSources(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDSourceText*) michael@0: JSD_NewSourceText(JSDContext* jsdc, const char* url) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(url); michael@0: return jsd_NewSourceText(jsdc, url); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDSourceText*) michael@0: JSD_AppendSourceText(JSDContext* jsdc, michael@0: JSDSourceText* jsdsrc, michael@0: const char* text, /* *not* zero terminated */ michael@0: size_t length, michael@0: JSDSourceStatus status) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: return jsd_AppendSourceText(jsdc, jsdsrc, text, length, status); michael@0: } michael@0: michael@0: extern JSD_PUBLIC_API(JSDSourceText*) michael@0: JSD_AppendUCSourceText(JSDContext* jsdc, michael@0: JSDSourceText* jsdsrc, michael@0: const jschar* text, /* *not* zero terminated */ michael@0: size_t length, michael@0: JSDSourceStatus status) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc); michael@0: return jsd_AppendUCSourceText(jsdc, jsdsrc, text, length, status); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_AddFullSourceText(JSDContext* jsdc, michael@0: const char* text, /* *not* zero terminated */ michael@0: size_t length, michael@0: const char* url) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(url); michael@0: return jsd_AddFullSourceText(jsdc, text, length, url); michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: /* Execution/Interrupt Hook functions */ michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetExecutionHook(JSDContext* jsdc, michael@0: JSDScript* jsdscript, michael@0: uintptr_t pc, michael@0: JSD_ExecutionHookProc hook, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_SetExecutionHook(jsdc, jsdscript, pc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearExecutionHook(JSDContext* jsdc, michael@0: JSDScript* jsdscript, michael@0: uintptr_t pc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_ClearExecutionHook(jsdc, jsdscript, pc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearAllExecutionHooksForScript(JSDContext* jsdc, JSDScript* jsdscript) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_ClearAllExecutionHooksForScript(jsdc, jsdscript); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearAllExecutionHooks(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ClearAllExecutionHooks(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetInterruptHook(JSDContext* jsdc, michael@0: JSD_ExecutionHookProc hook, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetInterruptHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_EnableSingleStepInterrupts(JSDContext* jsdc, JSDScript* jsdscript, bool enable) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_SCRIPT(jsdscript); michael@0: return jsd_EnableSingleStepInterrupts(jsdc, jsdscript, enable); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearInterruptHook(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ClearInterruptHook(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetDebugBreakHook(JSDContext* jsdc, michael@0: JSD_ExecutionHookProc hook, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetDebugBreakHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearDebugBreakHook(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ClearDebugBreakHook(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetDebuggerHook(JSDContext* jsdc, michael@0: JSD_ExecutionHookProc hook, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetDebuggerHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearDebuggerHook(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ClearDebuggerHook(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetThrowHook(JSDContext* jsdc, michael@0: JSD_ExecutionHookProc hook, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetThrowHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearThrowHook(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ClearThrowHook(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetTopLevelHook(JSDContext* jsdc, michael@0: JSD_CallHookProc hook, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetTopLevelHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearTopLevelHook(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ClearTopLevelHook(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetFunctionHook(JSDContext* jsdc, michael@0: JSD_CallHookProc hook, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetFunctionHook(jsdc, hook, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_ClearFunctionHook(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ClearFunctionHook(jsdc); michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: /* Stack Frame functions */ michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetCountOfStackFrames(JSDContext* jsdc, JSDThreadState* jsdthreadstate) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetCountOfStackFrames(jsdc, jsdthreadstate); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDStackFrameInfo*) michael@0: JSD_GetStackFrame(JSDContext* jsdc, JSDThreadState* jsdthreadstate) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetStackFrame(jsdc, jsdthreadstate); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSContext*) michael@0: JSD_GetJSContext(JSDContext* jsdc, JSDThreadState* jsdthreadstate) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetJSContext(jsdc, jsdthreadstate); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDStackFrameInfo*) michael@0: JSD_GetCallingStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetCallingStackFrame(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDScript*) michael@0: JSD_GetScriptForStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptForStackFrame(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(uintptr_t) michael@0: JSD_GetPCForStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetPCForStackFrame(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetCallObjectForStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetCallObjectForStackFrame(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetScopeChainForStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScopeChainForStackFrame(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetThisForStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetThisForStackFrame(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSString *) michael@0: JSD_GetIdForStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetIdForStackFrame(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsStackFrameDebugger(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_IsStackFrameDebugger(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsStackFrameConstructing(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_IsStackFrameConstructing(jsdc, jsdthreadstate, jsdframe); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_EvaluateUCScriptInStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe, michael@0: const jschar *bytes, unsigned length, michael@0: const char *filename, unsigned lineno, JS::MutableHandleValue rval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(bytes); michael@0: MOZ_ASSERT(length); michael@0: MOZ_ASSERT(filename); michael@0: michael@0: return jsd_EvaluateUCScriptInStackFrame(jsdc, jsdthreadstate,jsdframe, michael@0: bytes, length, filename, lineno, michael@0: true, rval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_AttemptUCScriptInStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe, michael@0: const jschar *bytes, unsigned length, michael@0: const char *filename, unsigned lineno, michael@0: JS::MutableHandleValue rval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(bytes); michael@0: MOZ_ASSERT(length); michael@0: MOZ_ASSERT(filename); michael@0: michael@0: return jsd_EvaluateUCScriptInStackFrame(jsdc, jsdthreadstate,jsdframe, michael@0: bytes, length, filename, lineno, michael@0: false, rval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_EvaluateScriptInStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe, michael@0: const char *bytes, unsigned length, michael@0: const char *filename, unsigned lineno, JS::MutableHandleValue rval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(bytes); michael@0: MOZ_ASSERT(length); michael@0: MOZ_ASSERT(filename); michael@0: michael@0: return jsd_EvaluateScriptInStackFrame(jsdc, jsdthreadstate,jsdframe, michael@0: bytes, length, michael@0: filename, lineno, true, rval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_AttemptScriptInStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe, michael@0: const char *bytes, unsigned length, michael@0: const char *filename, unsigned lineno, JS::MutableHandleValue rval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(bytes); michael@0: MOZ_ASSERT(length); michael@0: MOZ_ASSERT(filename); michael@0: michael@0: return jsd_EvaluateScriptInStackFrame(jsdc, jsdthreadstate,jsdframe, michael@0: bytes, length, michael@0: filename, lineno, false, rval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSString*) michael@0: JSD_ValToStringInStackFrame(JSDContext* jsdc, michael@0: JSDThreadState* jsdthreadstate, michael@0: JSDStackFrameInfo* jsdframe, michael@0: jsval val) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_ValToStringInStackFrame(jsdc, jsdthreadstate, jsdframe, val); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetException(JSDContext* jsdc, JSDThreadState* jsdthreadstate) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetException(jsdc, jsdthreadstate); michael@0: } michael@0: michael@0: extern JSD_PUBLIC_API(bool) michael@0: JSD_SetException(JSDContext* jsdc, JSDThreadState* jsdthreadstate, michael@0: JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetException(jsdc, jsdthreadstate, jsdval); michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_SetErrorReporter(JSDContext* jsdc, michael@0: JSD_ErrorReporter reporter, michael@0: void* callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_SetErrorReporter(jsdc, reporter, callerdata); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_GetErrorReporter(JSDContext* jsdc, michael@0: JSD_ErrorReporter* reporter, michael@0: void** callerdata) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetErrorReporter(jsdc, reporter, callerdata); michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsLockingAndThreadIdSupported() michael@0: { michael@0: #ifdef JSD_THREADSAFE michael@0: return true; michael@0: #else michael@0: return false; michael@0: #endif michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDStaticLock*) michael@0: JSD_CreateLock() michael@0: { michael@0: #ifdef JSD_THREADSAFE michael@0: return jsd_CreateLock(); michael@0: #else michael@0: return (void*)1; michael@0: #endif michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_Lock(JSDStaticLock* lock) michael@0: { michael@0: #ifdef JSD_THREADSAFE michael@0: jsd_Lock(lock); michael@0: #endif michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_Unlock(JSDStaticLock* lock) michael@0: { michael@0: #ifdef JSD_THREADSAFE michael@0: jsd_Unlock(lock); michael@0: #endif michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsLocked(JSDStaticLock* lock) michael@0: { michael@0: #if defined(JSD_THREADSAFE) && defined(DEBUG) michael@0: return jsd_IsLocked(lock); michael@0: #else michael@0: return true; michael@0: #endif michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsUnlocked(JSDStaticLock* lock) michael@0: { michael@0: #if defined(JSD_THREADSAFE) && defined(DEBUG) michael@0: return ! jsd_IsLocked(lock); michael@0: #else michael@0: return true; michael@0: #endif michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void*) michael@0: JSD_CurrentThread() michael@0: { michael@0: return JSD_CURRENT_THREAD(); michael@0: } michael@0: michael@0: /***************************************************************************/ michael@0: /* Value and Property Functions */ michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_NewValue(JSDContext* jsdc, jsval val) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_NewValue(jsdc, val); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_DropValue(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: jsd_DropValue(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(jsval) michael@0: JSD_GetValueWrappedJSVal(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueWrappedJSVal(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_RefreshValue(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: jsd_RefreshValue(jsdc, jsdval); michael@0: } michael@0: michael@0: /**************************************************/ michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueObject(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueObject(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueNumber(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueNumber(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueInt(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueInt(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueDouble(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueDouble(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueString(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueString(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueBoolean(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueBoolean(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueNull(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueNull(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueVoid(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueVoid(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValuePrimitive(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValuePrimitive(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueFunction(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueFunction(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_IsValueNative(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_IsValueNative(jsdc, jsdval); michael@0: } michael@0: michael@0: /**************************************************/ michael@0: michael@0: JSD_PUBLIC_API(bool) michael@0: JSD_GetValueBoolean(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueBoolean(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(int32_t) michael@0: JSD_GetValueInt(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueInt(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(double) michael@0: JSD_GetValueDouble(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueDouble(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSString*) michael@0: JSD_GetValueString(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueString(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSString *) michael@0: JSD_GetValueFunctionId(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueFunctionId(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSFunction*) michael@0: JSD_GetValueFunction(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueFunction(jsdc, jsdval); michael@0: } michael@0: michael@0: /**************************************************/ michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetCountOfProperties(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetCountOfProperties(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDProperty*) michael@0: JSD_IterateProperties(JSDContext* jsdc, JSDValue* jsdval, JSDProperty **iterp) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: MOZ_ASSERT(iterp); michael@0: return jsd_IterateProperties(jsdc, jsdval, iterp); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDProperty*) michael@0: JSD_GetValueProperty(JSDContext* jsdc, JSDValue* jsdval, JSString* name) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: MOZ_ASSERT(name); michael@0: return jsd_GetValueProperty(jsdc, jsdval, name); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetValuePrototype(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValuePrototype(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetValueParent(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueParent(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetValueConstructor(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueConstructor(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(const char*) michael@0: JSD_GetValueClassName(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetValueClassName(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDScript*) michael@0: JSD_GetScriptForValue(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_GetScriptForValue(jsdc, jsdval); michael@0: } michael@0: /**************************************************/ michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_DropProperty(JSDContext* jsdc, JSDProperty* jsdprop) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_PROPERTY(jsdprop); michael@0: jsd_DropProperty(jsdc, jsdprop); michael@0: } michael@0: michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetPropertyName(JSDContext* jsdc, JSDProperty* jsdprop) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_PROPERTY(jsdprop); michael@0: return jsd_GetPropertyName(jsdc, jsdprop); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetPropertyValue(JSDContext* jsdc, JSDProperty* jsdprop) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_PROPERTY(jsdprop); michael@0: return jsd_GetPropertyValue(jsdc, jsdprop); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetPropertyAlias(JSDContext* jsdc, JSDProperty* jsdprop) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_PROPERTY(jsdprop); michael@0: return jsd_GetPropertyAlias(jsdc, jsdprop); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetPropertyFlags(JSDContext* jsdc, JSDProperty* jsdprop) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_PROPERTY(jsdprop); michael@0: return jsd_GetPropertyFlags(jsdc, jsdprop); michael@0: } michael@0: michael@0: /**************************************************/ michael@0: /* Object Functions */ michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_LockObjectSubsystem(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_LOCK_OBJECTS(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(void) michael@0: JSD_UnlockObjectSubsystem(JSDContext* jsdc) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_UNLOCK_OBJECTS(jsdc); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDObject*) michael@0: JSD_IterateObjects(JSDContext* jsdc, JSDObject** iterp) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: return jsd_IterateObjects(jsdc, iterp); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSObject*) michael@0: JSD_GetWrappedObject(JSDContext* jsdc, JSDObject* jsdobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_OBJECT(jsdobj); michael@0: return jsd_GetWrappedObject(jsdc, jsdobj); michael@0: michael@0: } michael@0: michael@0: JSD_PUBLIC_API(const char*) michael@0: JSD_GetObjectNewURL(JSDContext* jsdc, JSDObject* jsdobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_OBJECT(jsdobj); michael@0: return jsd_GetObjectNewURL(jsdc, jsdobj); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetObjectNewLineNumber(JSDContext* jsdc, JSDObject* jsdobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_OBJECT(jsdobj); michael@0: return jsd_GetObjectNewLineNumber(jsdc, jsdobj); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(const char*) michael@0: JSD_GetObjectConstructorURL(JSDContext* jsdc, JSDObject* jsdobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_OBJECT(jsdobj); michael@0: return jsd_GetObjectConstructorURL(jsdc, jsdobj); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(unsigned) michael@0: JSD_GetObjectConstructorLineNumber(JSDContext* jsdc, JSDObject* jsdobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_OBJECT(jsdobj); michael@0: return jsd_GetObjectConstructorLineNumber(jsdc, jsdobj); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(const char*) michael@0: JSD_GetObjectConstructorName(JSDContext* jsdc, JSDObject* jsdobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_OBJECT(jsdobj); michael@0: return jsd_GetObjectConstructorName(jsdc, jsdobj); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDObject*) michael@0: JSD_GetJSDObjectForJSObject(JSDContext* jsdc, JSObject* jsobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: MOZ_ASSERT(jsobj); michael@0: return jsd_GetJSDObjectForJSObject(jsdc, jsobj); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDObject*) michael@0: JSD_GetObjectForValue(JSDContext* jsdc, JSDValue* jsdval) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_VALUE(jsdval); michael@0: return jsd_GetObjectForValue(jsdc, jsdval); michael@0: } michael@0: michael@0: JSD_PUBLIC_API(JSDValue*) michael@0: JSD_GetValueForObject(JSDContext* jsdc, JSDObject* jsdobj) michael@0: { michael@0: JSD_ASSERT_VALID_CONTEXT(jsdc); michael@0: JSD_ASSERT_VALID_OBJECT(jsdobj); michael@0: return jsd_GetValueForObject(jsdc, jsdobj); michael@0: }