js/jsd/jsdebug.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/jsd/jsdebug.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,1320 @@
     1.4 +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
     1.5 + * vim: set ts=8 sts=4 et sw=4 tw=99:
     1.6 + * This Source Code Form is subject to the terms of the Mozilla Public
     1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.9 +
    1.10 +/*
    1.11 + * JavaScript Debugging support - All public functions
    1.12 + */
    1.13 +
    1.14 +#include "jsd.h"
    1.15 +
    1.16 +/***************************************************************************/
    1.17 +/* High Level calls */
    1.18 +
    1.19 +JSD_PUBLIC_API(JSDContext*)
    1.20 +JSD_DebuggerOnForUser(JSRuntime*         jsrt,
    1.21 +                      JSD_UserCallbacks* callbacks,
    1.22 +                      void*              user)
    1.23 +{
    1.24 +    return jsd_DebuggerOnForUser(jsrt, callbacks, user, nullptr);
    1.25 +}
    1.26 +
    1.27 +JSD_PUBLIC_API(JSDContext*)
    1.28 +JSD_DebuggerOn(void)
    1.29 +{
    1.30 +    return jsd_DebuggerOn();
    1.31 +}
    1.32 +
    1.33 +JSD_PUBLIC_API(void)
    1.34 +JSD_DebuggerOff(JSDContext* jsdc)
    1.35 +{
    1.36 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
    1.37 +    jsd_DebuggerOff(jsdc);
    1.38 +}
    1.39 +
    1.40 +JSD_PUBLIC_API(void)
    1.41 +JSD_DebuggerPause(JSDContext* jsdc)
    1.42 +{
    1.43 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
    1.44 +    jsd_DebuggerPause(jsdc, false);
    1.45 +}
    1.46 +
    1.47 +JSD_PUBLIC_API(void)
    1.48 +JSD_DebuggerUnpause(JSDContext* jsdc)
    1.49 +{
    1.50 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
    1.51 +    jsd_DebuggerUnpause(jsdc);
    1.52 +}
    1.53 +
    1.54 +JSD_PUBLIC_API(unsigned)
    1.55 +JSD_GetMajorVersion(void)
    1.56 +{
    1.57 +    return JSD_MAJOR_VERSION;
    1.58 +}
    1.59 +
    1.60 +JSD_PUBLIC_API(unsigned)
    1.61 +JSD_GetMinorVersion(void)
    1.62 +{
    1.63 +    return JSD_MINOR_VERSION;
    1.64 +}
    1.65 +
    1.66 +JSD_PUBLIC_API(JSObject*)
    1.67 +JSD_GetDefaultGlobal(JSDContext* jsdc)
    1.68 +{
    1.69 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
    1.70 +    return jsdc->glob;
    1.71 +}
    1.72 +
    1.73 +JSD_PUBLIC_API(JSRuntime*)
    1.74 +JSD_GetJSRuntime(JSDContext* jsdc)
    1.75 +{
    1.76 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
    1.77 +    return jsdc->jsrt;
    1.78 +}
    1.79 +
    1.80 +JSD_PUBLIC_API(void)
    1.81 +JSD_SetUserCallbacks(JSRuntime* jsrt, JSD_UserCallbacks* callbacks, void* user)
    1.82 +{
    1.83 +    jsd_SetUserCallbacks(jsrt, callbacks, user);
    1.84 +}
    1.85 +
    1.86 +JSD_PUBLIC_API(void)
    1.87 +JSD_JSContextInUse(JSDContext* jsdc, JSContext* context)
    1.88 +{
    1.89 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
    1.90 +    /* we no longer need this information - may need it again in the future */
    1.91 +}
    1.92 +
    1.93 +JSD_PUBLIC_API(void *)
    1.94 +JSD_SetContextPrivate(JSDContext *jsdc, void *data)
    1.95 +{
    1.96 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
    1.97 +    return jsd_SetContextPrivate (jsdc, data);
    1.98 +}
    1.99 +
   1.100 +JSD_PUBLIC_API(void *)
   1.101 +JSD_GetContextPrivate(JSDContext *jsdc)
   1.102 +{
   1.103 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.104 +    return jsd_GetContextPrivate (jsdc);
   1.105 +}
   1.106 +
   1.107 +JSD_PUBLIC_API(void)
   1.108 +JSD_ClearAllProfileData(JSDContext *jsdc)
   1.109 +{
   1.110 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.111 +    jsd_ClearAllProfileData(jsdc);    
   1.112 +}
   1.113 +
   1.114 +JSD_PUBLIC_API(void)
   1.115 +JSD_SetContextFlags(JSDContext *jsdc, uint32_t flags)
   1.116 +{
   1.117 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.118 +    jsdc->flags = flags;
   1.119 +    if (flags & JSD_COLLECT_PROFILE_DATA) {
   1.120 +        /* Need to reenable our call hooks now */
   1.121 +        JS_SetExecuteHook(jsdc->jsrt, jsd_TopLevelCallHook, jsdc);
   1.122 +        JS_SetCallHook(jsdc->jsrt, jsd_FunctionCallHook, jsdc);
   1.123 +    }
   1.124 +}
   1.125 +
   1.126 +JSD_PUBLIC_API(uint32_t)
   1.127 +JSD_GetContextFlags(JSDContext *jsdc)
   1.128 +{
   1.129 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.130 +    return jsdc->flags;
   1.131 +}
   1.132 +    
   1.133 +JSD_PUBLIC_API(JSDContext*)
   1.134 +JSD_JSDContextForJSContext(JSContext* context)
   1.135 +{
   1.136 +    return jsd_JSDContextForJSContext(context);
   1.137 +}
   1.138 +
   1.139 +/***************************************************************************/
   1.140 +/* Script functions */
   1.141 +
   1.142 +JSD_PUBLIC_API(void)
   1.143 +JSD_LockScriptSubsystem(JSDContext* jsdc)
   1.144 +{
   1.145 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.146 +    JSD_LOCK_SCRIPTS(jsdc);
   1.147 +}
   1.148 +
   1.149 +JSD_PUBLIC_API(void)
   1.150 +JSD_UnlockScriptSubsystem(JSDContext* jsdc)
   1.151 +{
   1.152 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.153 +    JSD_UNLOCK_SCRIPTS(jsdc);
   1.154 +}
   1.155 +
   1.156 +JSD_PUBLIC_API(JSDScript*)
   1.157 +JSD_IterateScripts(JSDContext* jsdc, JSDScript **iterp)
   1.158 +{
   1.159 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.160 +    return jsd_IterateScripts(jsdc, iterp);
   1.161 +}
   1.162 +
   1.163 +JSD_PUBLIC_API(uint32_t)
   1.164 +JSD_GetScriptFlags(JSDContext *jsdc, JSDScript *script)
   1.165 +{
   1.166 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.167 +    return jsd_GetScriptFlags(jsdc, script);
   1.168 +}
   1.169 +    
   1.170 +JSD_PUBLIC_API(void)
   1.171 +JSD_SetScriptFlags(JSDContext *jsdc, JSDScript *script, uint32_t flags)
   1.172 +{
   1.173 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.174 +    jsd_SetScriptFlags(jsdc, script, flags);
   1.175 +}
   1.176 +
   1.177 +JSD_PUBLIC_API(unsigned)
   1.178 +JSD_GetScriptCallCount(JSDContext* jsdc, JSDScript *script)
   1.179 +{
   1.180 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.181 +    return jsd_GetScriptCallCount(jsdc, script);
   1.182 +}
   1.183 +
   1.184 +JSD_PUBLIC_API(unsigned)
   1.185 +JSD_GetScriptMaxRecurseDepth(JSDContext* jsdc, JSDScript *script)
   1.186 +{
   1.187 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.188 +    return jsd_GetScriptMaxRecurseDepth(jsdc, script);
   1.189 +}
   1.190 +    
   1.191 +
   1.192 +JSD_PUBLIC_API(double)
   1.193 +JSD_GetScriptMinExecutionTime(JSDContext* jsdc, JSDScript *script)
   1.194 +{
   1.195 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.196 +    return jsd_GetScriptMinExecutionTime(jsdc, script);
   1.197 +}
   1.198 +    
   1.199 +JSD_PUBLIC_API(double)
   1.200 +JSD_GetScriptMaxExecutionTime(JSDContext* jsdc, JSDScript *script)
   1.201 +{
   1.202 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.203 +    return jsd_GetScriptMaxExecutionTime(jsdc, script);
   1.204 +}
   1.205 +
   1.206 +JSD_PUBLIC_API(double)
   1.207 +JSD_GetScriptTotalExecutionTime(JSDContext* jsdc, JSDScript *script)
   1.208 +{
   1.209 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.210 +    return jsd_GetScriptTotalExecutionTime(jsdc, script);
   1.211 +}
   1.212 +
   1.213 +JSD_PUBLIC_API(double)
   1.214 +JSD_GetScriptMinOwnExecutionTime(JSDContext* jsdc, JSDScript *script)
   1.215 +{
   1.216 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.217 +    return jsd_GetScriptMinOwnExecutionTime(jsdc, script);
   1.218 +}
   1.219 +    
   1.220 +JSD_PUBLIC_API(double)
   1.221 +JSD_GetScriptMaxOwnExecutionTime(JSDContext* jsdc, JSDScript *script)
   1.222 +{
   1.223 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.224 +    return jsd_GetScriptMaxOwnExecutionTime(jsdc, script);
   1.225 +}
   1.226 +
   1.227 +JSD_PUBLIC_API(double)
   1.228 +JSD_GetScriptTotalOwnExecutionTime(JSDContext* jsdc, JSDScript *script)
   1.229 +{
   1.230 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.231 +    return jsd_GetScriptTotalOwnExecutionTime(jsdc, script);
   1.232 +}
   1.233 +
   1.234 +JSD_PUBLIC_API(void)
   1.235 +JSD_ClearScriptProfileData(JSDContext* jsdc, JSDScript *script)
   1.236 +{
   1.237 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.238 +    jsd_ClearScriptProfileData(jsdc, script);
   1.239 +}
   1.240 +
   1.241 +JSD_PUBLIC_API(JSScript*)
   1.242 +JSD_GetJSScript(JSDContext* jsdc, JSDScript *script)
   1.243 +{
   1.244 +    return jsd_GetJSScript(jsdc, script);
   1.245 +}
   1.246 +
   1.247 +JSD_PUBLIC_API(JSFunction*)
   1.248 +JSD_GetJSFunction(JSDContext* jsdc, JSDScript *script)
   1.249 +{
   1.250 +    return jsd_GetJSFunction (jsdc, script);
   1.251 +}
   1.252 +
   1.253 +JSD_PUBLIC_API(void *)
   1.254 +JSD_SetScriptPrivate(JSDScript *jsdscript, void *data)
   1.255 +{
   1.256 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.257 +    return jsd_SetScriptPrivate (jsdscript, data);
   1.258 +}
   1.259 +
   1.260 +JSD_PUBLIC_API(void *)
   1.261 +JSD_GetScriptPrivate(JSDScript *jsdscript)
   1.262 +{
   1.263 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.264 +    return jsd_GetScriptPrivate (jsdscript);
   1.265 +}
   1.266 +    
   1.267 +
   1.268 +JSD_PUBLIC_API(bool)
   1.269 +JSD_IsActiveScript(JSDContext* jsdc, JSDScript *jsdscript)
   1.270 +{
   1.271 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.272 +    return jsd_IsActiveScript(jsdc, jsdscript);
   1.273 +}
   1.274 +
   1.275 +JSD_PUBLIC_API(const char*)
   1.276 +JSD_GetScriptFilename(JSDContext* jsdc, JSDScript *jsdscript)
   1.277 +{
   1.278 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.279 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.280 +    return jsd_GetScriptFilename(jsdc, jsdscript);
   1.281 +}
   1.282 +
   1.283 +JSD_PUBLIC_API(JSString *)
   1.284 +JSD_GetScriptFunctionId(JSDContext* jsdc, JSDScript *jsdscript)
   1.285 +{
   1.286 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.287 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.288 +    return jsd_GetScriptFunctionId(jsdc, jsdscript);
   1.289 +}
   1.290 +
   1.291 +JSD_PUBLIC_API(unsigned)
   1.292 +JSD_GetScriptBaseLineNumber(JSDContext* jsdc, JSDScript *jsdscript)
   1.293 +{
   1.294 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.295 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.296 +    return jsd_GetScriptBaseLineNumber(jsdc, jsdscript);
   1.297 +}
   1.298 +
   1.299 +JSD_PUBLIC_API(unsigned)
   1.300 +JSD_GetScriptLineExtent(JSDContext* jsdc, JSDScript *jsdscript)
   1.301 +{
   1.302 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.303 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.304 +    return jsd_GetScriptLineExtent(jsdc, jsdscript);
   1.305 +}
   1.306 +
   1.307 +JSD_PUBLIC_API(bool)
   1.308 +JSD_SetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc hook, void* callerdata)
   1.309 +{
   1.310 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.311 +    return jsd_SetScriptHook(jsdc, hook, callerdata);
   1.312 +}
   1.313 +
   1.314 +JSD_PUBLIC_API(bool)
   1.315 +JSD_GetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc* hook, void** callerdata)
   1.316 +{
   1.317 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.318 +    return jsd_GetScriptHook(jsdc, hook, callerdata);
   1.319 +}
   1.320 +
   1.321 +JSD_PUBLIC_API(uintptr_t)
   1.322 +JSD_GetClosestPC(JSDContext* jsdc, JSDScript* jsdscript, unsigned line)
   1.323 +{
   1.324 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.325 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.326 +    return jsd_GetClosestPC(jsdc, jsdscript, line);
   1.327 +}
   1.328 +
   1.329 +JSD_PUBLIC_API(unsigned)
   1.330 +JSD_GetClosestLine(JSDContext* jsdc, JSDScript* jsdscript, uintptr_t pc)
   1.331 +{
   1.332 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.333 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.334 +    return jsd_GetClosestLine(jsdc, jsdscript, pc);
   1.335 +}
   1.336 +
   1.337 +JSD_PUBLIC_API(bool)
   1.338 +JSD_GetLinePCs(JSDContext* jsdc, JSDScript* jsdscript,
   1.339 +               unsigned startLine, unsigned maxLines,
   1.340 +               unsigned* count, unsigned** lines, uintptr_t** pcs)
   1.341 +{
   1.342 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.343 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.344 +    return jsd_GetLinePCs(jsdc, jsdscript, startLine, maxLines, count, lines, pcs);
   1.345 +}
   1.346 +
   1.347 +JSD_PUBLIC_API(void)
   1.348 +JSD_ScriptCreated(JSDContext* jsdc,
   1.349 +                  JSContext   *cx,
   1.350 +                  const char  *filename,    /* URL this script loads from */
   1.351 +                  unsigned       lineno,       /* line where this script starts */
   1.352 +                  JSScript    *script,
   1.353 +                  JSFunction  *fun)
   1.354 +{
   1.355 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.356 +    jsd_ScriptCreated(jsdc, cx, filename, lineno, script, fun);
   1.357 +}
   1.358 +
   1.359 +JSD_PUBLIC_API(void)
   1.360 +JSD_ScriptDestroyed(JSDContext* jsdc,
   1.361 +                    JSFreeOp    *fop,
   1.362 +                    JSScript    *script)
   1.363 +{
   1.364 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.365 +    jsd_ScriptDestroyed(jsdc, fop, script);
   1.366 +}
   1.367 +
   1.368 +/***************************************************************************/
   1.369 +/* Source Text functions */
   1.370 +
   1.371 +JSD_PUBLIC_API(void)
   1.372 +JSD_LockSourceTextSubsystem(JSDContext* jsdc)
   1.373 +{
   1.374 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.375 +    JSD_LOCK_SOURCE_TEXT(jsdc);
   1.376 +}
   1.377 +
   1.378 +JSD_PUBLIC_API(void)
   1.379 +JSD_UnlockSourceTextSubsystem(JSDContext* jsdc)
   1.380 +{
   1.381 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.382 +    JSD_UNLOCK_SOURCE_TEXT(jsdc);
   1.383 +}
   1.384 +
   1.385 +JSD_PUBLIC_API(JSDSourceText*)
   1.386 +JSD_IterateSources(JSDContext* jsdc, JSDSourceText **iterp)
   1.387 +{
   1.388 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.389 +    return jsd_IterateSources(jsdc, iterp);
   1.390 +}
   1.391 +
   1.392 +JSD_PUBLIC_API(JSDSourceText*)
   1.393 +JSD_FindSourceForURL(JSDContext* jsdc, const char* url)
   1.394 +{
   1.395 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.396 +    MOZ_ASSERT(url);
   1.397 +    return jsd_FindSourceForURL(jsdc, url);
   1.398 +}
   1.399 +
   1.400 +JSD_PUBLIC_API(const char*)
   1.401 +JSD_GetSourceURL(JSDContext* jsdc, JSDSourceText* jsdsrc)
   1.402 +{
   1.403 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.404 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.405 +    return jsd_GetSourceURL(jsdc,jsdsrc);
   1.406 +}
   1.407 +
   1.408 +JSD_PUBLIC_API(bool)
   1.409 +JSD_GetSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc,
   1.410 +                  const char** ppBuf, int* pLen)
   1.411 +{
   1.412 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.413 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.414 +    MOZ_ASSERT(ppBuf);
   1.415 +    MOZ_ASSERT(pLen);
   1.416 +    return jsd_GetSourceText(jsdc, jsdsrc, ppBuf, pLen);
   1.417 +}
   1.418 +
   1.419 +JSD_PUBLIC_API(void)
   1.420 +JSD_ClearSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc)
   1.421 +{
   1.422 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.423 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.424 +    jsd_ClearSourceText(jsdc, jsdsrc);
   1.425 +}
   1.426 +
   1.427 +
   1.428 +JSD_PUBLIC_API(JSDSourceStatus)
   1.429 +JSD_GetSourceStatus(JSDContext* jsdc, JSDSourceText* jsdsrc)
   1.430 +{
   1.431 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.432 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.433 +    return jsd_GetSourceStatus(jsdc, jsdsrc);
   1.434 +}
   1.435 +
   1.436 +JSD_PUBLIC_API(bool)
   1.437 +JSD_IsSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc)
   1.438 +{
   1.439 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.440 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.441 +    return jsd_IsSourceDirty(jsdc, jsdsrc);
   1.442 +}
   1.443 +
   1.444 +JSD_PUBLIC_API(void)
   1.445 +JSD_SetSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc, bool dirty)
   1.446 +{
   1.447 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.448 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.449 +    jsd_SetSourceDirty(jsdc, jsdsrc, dirty);
   1.450 +}
   1.451 +
   1.452 +JSD_PUBLIC_API(unsigned)
   1.453 +JSD_GetSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
   1.454 +{
   1.455 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.456 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.457 +    return jsd_GetSourceAlterCount(jsdc, jsdsrc);
   1.458 +}
   1.459 +
   1.460 +JSD_PUBLIC_API(unsigned)
   1.461 +JSD_IncrementSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
   1.462 +{
   1.463 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.464 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.465 +    return jsd_IncrementSourceAlterCount(jsdc, jsdsrc);
   1.466 +}
   1.467 +
   1.468 +JSD_PUBLIC_API(void)
   1.469 +JSD_DestroyAllSources( JSDContext* jsdc )
   1.470 +{
   1.471 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.472 +    jsd_DestroyAllSources(jsdc);
   1.473 +}
   1.474 +
   1.475 +JSD_PUBLIC_API(JSDSourceText*)
   1.476 +JSD_NewSourceText(JSDContext* jsdc, const char* url)
   1.477 +{
   1.478 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.479 +    MOZ_ASSERT(url);
   1.480 +    return jsd_NewSourceText(jsdc, url);
   1.481 +}
   1.482 +
   1.483 +JSD_PUBLIC_API(JSDSourceText*)
   1.484 +JSD_AppendSourceText(JSDContext* jsdc,
   1.485 +                     JSDSourceText* jsdsrc,
   1.486 +                     const char* text,       /* *not* zero terminated */
   1.487 +                     size_t length,
   1.488 +                     JSDSourceStatus status)
   1.489 +{
   1.490 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.491 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.492 +    return jsd_AppendSourceText(jsdc, jsdsrc, text, length, status);
   1.493 +}
   1.494 +
   1.495 +extern JSD_PUBLIC_API(JSDSourceText*)
   1.496 +JSD_AppendUCSourceText(JSDContext*     jsdc,
   1.497 +                       JSDSourceText*  jsdsrc,
   1.498 +                       const jschar*   text,       /* *not* zero terminated */
   1.499 +                       size_t          length,
   1.500 +                       JSDSourceStatus status)
   1.501 +{
   1.502 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.503 +    JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
   1.504 +    return jsd_AppendUCSourceText(jsdc, jsdsrc, text, length, status);
   1.505 +}
   1.506 +
   1.507 +JSD_PUBLIC_API(bool)
   1.508 +JSD_AddFullSourceText(JSDContext* jsdc,
   1.509 +                      const char* text,       /* *not* zero terminated */
   1.510 +                      size_t      length,
   1.511 +                      const char* url)
   1.512 +{
   1.513 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.514 +    MOZ_ASSERT(url);
   1.515 +    return jsd_AddFullSourceText(jsdc, text, length, url);
   1.516 +}
   1.517 +
   1.518 +/***************************************************************************/
   1.519 +/* Execution/Interrupt Hook functions */
   1.520 +
   1.521 +JSD_PUBLIC_API(bool)
   1.522 +JSD_SetExecutionHook(JSDContext*           jsdc,
   1.523 +                     JSDScript*            jsdscript,
   1.524 +                     uintptr_t             pc,
   1.525 +                     JSD_ExecutionHookProc hook,
   1.526 +                     void*                 callerdata)
   1.527 +{
   1.528 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.529 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.530 +    return jsd_SetExecutionHook(jsdc, jsdscript, pc, hook, callerdata);
   1.531 +}
   1.532 +
   1.533 +JSD_PUBLIC_API(bool)
   1.534 +JSD_ClearExecutionHook(JSDContext*           jsdc,
   1.535 +                       JSDScript*            jsdscript,
   1.536 +                       uintptr_t             pc)
   1.537 +{
   1.538 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.539 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.540 +    return jsd_ClearExecutionHook(jsdc, jsdscript, pc);
   1.541 +}
   1.542 +
   1.543 +JSD_PUBLIC_API(bool)
   1.544 +JSD_ClearAllExecutionHooksForScript(JSDContext* jsdc, JSDScript* jsdscript)
   1.545 +{
   1.546 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.547 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.548 +    return jsd_ClearAllExecutionHooksForScript(jsdc, jsdscript);
   1.549 +}
   1.550 +
   1.551 +JSD_PUBLIC_API(bool)
   1.552 +JSD_ClearAllExecutionHooks(JSDContext* jsdc)
   1.553 +{
   1.554 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.555 +    return jsd_ClearAllExecutionHooks(jsdc);
   1.556 +}
   1.557 +
   1.558 +JSD_PUBLIC_API(bool)
   1.559 +JSD_SetInterruptHook(JSDContext*           jsdc,
   1.560 +                     JSD_ExecutionHookProc hook,
   1.561 +                     void*                 callerdata)
   1.562 +{
   1.563 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.564 +    return jsd_SetInterruptHook(jsdc, hook, callerdata);
   1.565 +}
   1.566 +
   1.567 +JSD_PUBLIC_API(bool)
   1.568 +JSD_EnableSingleStepInterrupts(JSDContext* jsdc, JSDScript* jsdscript, bool enable)
   1.569 +{
   1.570 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.571 +    JSD_ASSERT_VALID_SCRIPT(jsdscript);
   1.572 +    return jsd_EnableSingleStepInterrupts(jsdc, jsdscript, enable);
   1.573 +}
   1.574 +
   1.575 +JSD_PUBLIC_API(bool)
   1.576 +JSD_ClearInterruptHook(JSDContext* jsdc)
   1.577 +{
   1.578 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.579 +    return jsd_ClearInterruptHook(jsdc);
   1.580 +}
   1.581 +
   1.582 +JSD_PUBLIC_API(bool)
   1.583 +JSD_SetDebugBreakHook(JSDContext*           jsdc,
   1.584 +                      JSD_ExecutionHookProc hook,
   1.585 +                      void*                 callerdata)
   1.586 +{
   1.587 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.588 +    return jsd_SetDebugBreakHook(jsdc, hook, callerdata);
   1.589 +}
   1.590 +
   1.591 +JSD_PUBLIC_API(bool)
   1.592 +JSD_ClearDebugBreakHook(JSDContext* jsdc)
   1.593 +{
   1.594 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.595 +    return jsd_ClearDebugBreakHook(jsdc);
   1.596 +}
   1.597 +
   1.598 +JSD_PUBLIC_API(bool)
   1.599 +JSD_SetDebuggerHook(JSDContext*           jsdc,
   1.600 +                    JSD_ExecutionHookProc hook,
   1.601 +                    void*                 callerdata)
   1.602 +{
   1.603 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.604 +    return jsd_SetDebuggerHook(jsdc, hook, callerdata);
   1.605 +}
   1.606 +
   1.607 +JSD_PUBLIC_API(bool)
   1.608 +JSD_ClearDebuggerHook(JSDContext* jsdc)
   1.609 +{
   1.610 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.611 +    return jsd_ClearDebuggerHook(jsdc);
   1.612 +}
   1.613 +
   1.614 +JSD_PUBLIC_API(bool)
   1.615 +JSD_SetThrowHook(JSDContext*           jsdc,
   1.616 +                 JSD_ExecutionHookProc hook,
   1.617 +                 void*                 callerdata)
   1.618 +{
   1.619 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.620 +    return jsd_SetThrowHook(jsdc, hook, callerdata);
   1.621 +}
   1.622 +
   1.623 +JSD_PUBLIC_API(bool)
   1.624 +JSD_ClearThrowHook(JSDContext* jsdc)
   1.625 +{
   1.626 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.627 +    return jsd_ClearThrowHook(jsdc);
   1.628 +}
   1.629 +
   1.630 +JSD_PUBLIC_API(bool)
   1.631 +JSD_SetTopLevelHook(JSDContext*      jsdc,
   1.632 +                    JSD_CallHookProc hook,
   1.633 +                    void*            callerdata)
   1.634 +{
   1.635 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.636 +    return jsd_SetTopLevelHook(jsdc, hook, callerdata);
   1.637 +}
   1.638 +
   1.639 +JSD_PUBLIC_API(bool)
   1.640 +JSD_ClearTopLevelHook(JSDContext* jsdc)
   1.641 +{
   1.642 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.643 +    return jsd_ClearTopLevelHook(jsdc);
   1.644 +}
   1.645 +
   1.646 +JSD_PUBLIC_API(bool)
   1.647 +JSD_SetFunctionHook(JSDContext*      jsdc,
   1.648 +                    JSD_CallHookProc hook,
   1.649 +                    void*            callerdata)
   1.650 +{
   1.651 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.652 +    return jsd_SetFunctionHook(jsdc, hook, callerdata);
   1.653 +}
   1.654 +
   1.655 +JSD_PUBLIC_API(bool)
   1.656 +JSD_ClearFunctionHook(JSDContext* jsdc)
   1.657 +{
   1.658 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.659 +    return jsd_ClearFunctionHook(jsdc);
   1.660 +}
   1.661 +
   1.662 +/***************************************************************************/
   1.663 +/* Stack Frame functions */
   1.664 +
   1.665 +JSD_PUBLIC_API(unsigned)
   1.666 +JSD_GetCountOfStackFrames(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
   1.667 +{
   1.668 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.669 +    return jsd_GetCountOfStackFrames(jsdc, jsdthreadstate);
   1.670 +}
   1.671 +
   1.672 +JSD_PUBLIC_API(JSDStackFrameInfo*)
   1.673 +JSD_GetStackFrame(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
   1.674 +{
   1.675 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.676 +    return jsd_GetStackFrame(jsdc, jsdthreadstate);
   1.677 +}
   1.678 +
   1.679 +JSD_PUBLIC_API(JSContext*)
   1.680 +JSD_GetJSContext(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
   1.681 +{
   1.682 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.683 +    return jsd_GetJSContext(jsdc, jsdthreadstate);
   1.684 +}
   1.685 +
   1.686 +JSD_PUBLIC_API(JSDStackFrameInfo*)
   1.687 +JSD_GetCallingStackFrame(JSDContext* jsdc,
   1.688 +                         JSDThreadState* jsdthreadstate,
   1.689 +                         JSDStackFrameInfo* jsdframe)
   1.690 +{
   1.691 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.692 +    return jsd_GetCallingStackFrame(jsdc, jsdthreadstate, jsdframe);
   1.693 +}
   1.694 +
   1.695 +JSD_PUBLIC_API(JSDScript*)
   1.696 +JSD_GetScriptForStackFrame(JSDContext* jsdc,
   1.697 +                           JSDThreadState* jsdthreadstate,
   1.698 +                           JSDStackFrameInfo* jsdframe)
   1.699 +{
   1.700 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.701 +    return jsd_GetScriptForStackFrame(jsdc, jsdthreadstate, jsdframe);
   1.702 +}
   1.703 +
   1.704 +JSD_PUBLIC_API(uintptr_t)
   1.705 +JSD_GetPCForStackFrame(JSDContext* jsdc,
   1.706 +                       JSDThreadState* jsdthreadstate,
   1.707 +                       JSDStackFrameInfo* jsdframe)
   1.708 +{
   1.709 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.710 +    return jsd_GetPCForStackFrame(jsdc, jsdthreadstate, jsdframe);
   1.711 +}
   1.712 +
   1.713 +JSD_PUBLIC_API(JSDValue*)
   1.714 +JSD_GetCallObjectForStackFrame(JSDContext* jsdc,
   1.715 +                               JSDThreadState* jsdthreadstate,
   1.716 +                               JSDStackFrameInfo* jsdframe)
   1.717 +{
   1.718 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.719 +    return jsd_GetCallObjectForStackFrame(jsdc, jsdthreadstate, jsdframe);
   1.720 +}
   1.721 +
   1.722 +JSD_PUBLIC_API(JSDValue*)
   1.723 +JSD_GetScopeChainForStackFrame(JSDContext* jsdc,
   1.724 +                               JSDThreadState* jsdthreadstate,
   1.725 +                               JSDStackFrameInfo* jsdframe)
   1.726 +{
   1.727 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.728 +    return jsd_GetScopeChainForStackFrame(jsdc, jsdthreadstate, jsdframe);
   1.729 +}
   1.730 +
   1.731 +JSD_PUBLIC_API(JSDValue*)
   1.732 +JSD_GetThisForStackFrame(JSDContext* jsdc,
   1.733 +                         JSDThreadState* jsdthreadstate,
   1.734 +                         JSDStackFrameInfo* jsdframe)
   1.735 +{
   1.736 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.737 +    return jsd_GetThisForStackFrame(jsdc, jsdthreadstate, jsdframe);
   1.738 +}
   1.739 +
   1.740 +JSD_PUBLIC_API(JSString *)
   1.741 +JSD_GetIdForStackFrame(JSDContext* jsdc,
   1.742 +                       JSDThreadState* jsdthreadstate,
   1.743 +                       JSDStackFrameInfo* jsdframe)
   1.744 +{
   1.745 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.746 +    return jsd_GetIdForStackFrame(jsdc, jsdthreadstate, jsdframe);
   1.747 +}
   1.748 +
   1.749 +JSD_PUBLIC_API(bool)
   1.750 +JSD_IsStackFrameDebugger(JSDContext* jsdc,
   1.751 +                         JSDThreadState* jsdthreadstate,
   1.752 +                         JSDStackFrameInfo* jsdframe)
   1.753 +{
   1.754 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.755 +    return jsd_IsStackFrameDebugger(jsdc, jsdthreadstate, jsdframe);
   1.756 +}
   1.757 +
   1.758 +JSD_PUBLIC_API(bool)
   1.759 +JSD_IsStackFrameConstructing(JSDContext* jsdc,
   1.760 +                             JSDThreadState* jsdthreadstate,
   1.761 +                             JSDStackFrameInfo* jsdframe)
   1.762 +{
   1.763 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.764 +    return jsd_IsStackFrameConstructing(jsdc, jsdthreadstate, jsdframe);
   1.765 +}
   1.766 +
   1.767 +JSD_PUBLIC_API(bool)
   1.768 +JSD_EvaluateUCScriptInStackFrame(JSDContext* jsdc,
   1.769 +                                 JSDThreadState* jsdthreadstate,
   1.770 +                                 JSDStackFrameInfo* jsdframe,
   1.771 +                                 const jschar *bytes, unsigned length,
   1.772 +                                 const char *filename, unsigned lineno, JS::MutableHandleValue rval)
   1.773 +{
   1.774 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.775 +    MOZ_ASSERT(bytes);
   1.776 +    MOZ_ASSERT(length);
   1.777 +    MOZ_ASSERT(filename);
   1.778 +
   1.779 +    return jsd_EvaluateUCScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
   1.780 +                                            bytes, length, filename, lineno,
   1.781 +                                            true, rval);
   1.782 +}
   1.783 +
   1.784 +JSD_PUBLIC_API(bool)
   1.785 +JSD_AttemptUCScriptInStackFrame(JSDContext* jsdc,
   1.786 +                                JSDThreadState* jsdthreadstate,
   1.787 +                                JSDStackFrameInfo* jsdframe,
   1.788 +                                const jschar *bytes, unsigned length,
   1.789 +                                const char *filename, unsigned lineno,
   1.790 +                                JS::MutableHandleValue rval)
   1.791 +{
   1.792 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.793 +    MOZ_ASSERT(bytes);
   1.794 +    MOZ_ASSERT(length);
   1.795 +    MOZ_ASSERT(filename);
   1.796 +
   1.797 +    return jsd_EvaluateUCScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
   1.798 +                                            bytes, length, filename, lineno,
   1.799 +                                            false, rval);
   1.800 +}
   1.801 +
   1.802 +JSD_PUBLIC_API(bool)
   1.803 +JSD_EvaluateScriptInStackFrame(JSDContext* jsdc,
   1.804 +                               JSDThreadState* jsdthreadstate,
   1.805 +                               JSDStackFrameInfo* jsdframe,
   1.806 +                               const char *bytes, unsigned length,
   1.807 +                               const char *filename, unsigned lineno, JS::MutableHandleValue rval)
   1.808 +{
   1.809 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.810 +    MOZ_ASSERT(bytes);
   1.811 +    MOZ_ASSERT(length);
   1.812 +    MOZ_ASSERT(filename);
   1.813 +
   1.814 +    return jsd_EvaluateScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
   1.815 +                                          bytes, length,
   1.816 +                                          filename, lineno, true, rval);
   1.817 +}
   1.818 +
   1.819 +JSD_PUBLIC_API(bool)
   1.820 +JSD_AttemptScriptInStackFrame(JSDContext* jsdc,
   1.821 +                              JSDThreadState* jsdthreadstate,
   1.822 +                              JSDStackFrameInfo* jsdframe,
   1.823 +                              const char *bytes, unsigned length,
   1.824 +                              const char *filename, unsigned lineno, JS::MutableHandleValue rval)
   1.825 +{
   1.826 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.827 +    MOZ_ASSERT(bytes);
   1.828 +    MOZ_ASSERT(length);
   1.829 +    MOZ_ASSERT(filename);
   1.830 +
   1.831 +    return jsd_EvaluateScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
   1.832 +                                          bytes, length,
   1.833 +                                          filename, lineno, false, rval);
   1.834 +}
   1.835 +
   1.836 +JSD_PUBLIC_API(JSString*)
   1.837 +JSD_ValToStringInStackFrame(JSDContext* jsdc,
   1.838 +                            JSDThreadState* jsdthreadstate,
   1.839 +                            JSDStackFrameInfo* jsdframe,
   1.840 +                            jsval val)
   1.841 +{
   1.842 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.843 +    return jsd_ValToStringInStackFrame(jsdc, jsdthreadstate, jsdframe, val);
   1.844 +}
   1.845 +
   1.846 +JSD_PUBLIC_API(JSDValue*)
   1.847 +JSD_GetException(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
   1.848 +{
   1.849 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.850 +    return jsd_GetException(jsdc, jsdthreadstate);
   1.851 +}
   1.852 +
   1.853 +extern JSD_PUBLIC_API(bool)
   1.854 +JSD_SetException(JSDContext* jsdc, JSDThreadState* jsdthreadstate,
   1.855 +                 JSDValue* jsdval)
   1.856 +{
   1.857 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.858 +    return jsd_SetException(jsdc, jsdthreadstate, jsdval);
   1.859 +}
   1.860 +
   1.861 +/***************************************************************************/
   1.862 +
   1.863 +JSD_PUBLIC_API(bool)
   1.864 +JSD_SetErrorReporter(JSDContext*       jsdc,
   1.865 +                     JSD_ErrorReporter reporter,
   1.866 +                     void*             callerdata)
   1.867 +{
   1.868 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.869 +    return jsd_SetErrorReporter(jsdc, reporter, callerdata);
   1.870 +}
   1.871 +
   1.872 +JSD_PUBLIC_API(bool)
   1.873 +JSD_GetErrorReporter(JSDContext*        jsdc,
   1.874 +                     JSD_ErrorReporter* reporter,
   1.875 +                     void**             callerdata)
   1.876 +{
   1.877 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.878 +    return jsd_GetErrorReporter(jsdc, reporter, callerdata);
   1.879 +}
   1.880 +
   1.881 +/***************************************************************************/
   1.882 +
   1.883 +JSD_PUBLIC_API(bool)
   1.884 +JSD_IsLockingAndThreadIdSupported()
   1.885 +{
   1.886 +#ifdef JSD_THREADSAFE
   1.887 +    return true;
   1.888 +#else
   1.889 +    return false;
   1.890 +#endif
   1.891 +}
   1.892 +
   1.893 +JSD_PUBLIC_API(JSDStaticLock*)
   1.894 +JSD_CreateLock()
   1.895 +{
   1.896 +#ifdef JSD_THREADSAFE
   1.897 +    return jsd_CreateLock();
   1.898 +#else
   1.899 +    return (void*)1;
   1.900 +#endif
   1.901 +}
   1.902 +
   1.903 +JSD_PUBLIC_API(void)
   1.904 +JSD_Lock(JSDStaticLock* lock)
   1.905 +{
   1.906 +#ifdef JSD_THREADSAFE
   1.907 +    jsd_Lock(lock);
   1.908 +#endif
   1.909 +}
   1.910 +
   1.911 +JSD_PUBLIC_API(void)
   1.912 +JSD_Unlock(JSDStaticLock* lock)
   1.913 +{
   1.914 +#ifdef JSD_THREADSAFE
   1.915 +    jsd_Unlock(lock);
   1.916 +#endif
   1.917 +}
   1.918 +
   1.919 +JSD_PUBLIC_API(bool)
   1.920 +JSD_IsLocked(JSDStaticLock* lock)
   1.921 +{
   1.922 +#if defined(JSD_THREADSAFE) && defined(DEBUG)
   1.923 +    return jsd_IsLocked(lock);
   1.924 +#else
   1.925 +    return true;
   1.926 +#endif
   1.927 +}
   1.928 +
   1.929 +JSD_PUBLIC_API(bool)
   1.930 +JSD_IsUnlocked(JSDStaticLock* lock)
   1.931 +{
   1.932 +#if defined(JSD_THREADSAFE) && defined(DEBUG)
   1.933 +    return ! jsd_IsLocked(lock);
   1.934 +#else
   1.935 +    return true;
   1.936 +#endif
   1.937 +}
   1.938 +
   1.939 +JSD_PUBLIC_API(void*)
   1.940 +JSD_CurrentThread()
   1.941 +{
   1.942 +    return JSD_CURRENT_THREAD();
   1.943 +}
   1.944 +
   1.945 +/***************************************************************************/
   1.946 +/* Value and Property Functions */
   1.947 +
   1.948 +JSD_PUBLIC_API(JSDValue*)
   1.949 +JSD_NewValue(JSDContext* jsdc, jsval val)
   1.950 +{
   1.951 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.952 +    return jsd_NewValue(jsdc, val);
   1.953 +}
   1.954 +
   1.955 +JSD_PUBLIC_API(void)
   1.956 +JSD_DropValue(JSDContext* jsdc, JSDValue* jsdval)
   1.957 +{
   1.958 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.959 +    JSD_ASSERT_VALID_VALUE(jsdval);
   1.960 +    jsd_DropValue(jsdc, jsdval);
   1.961 +}
   1.962 +
   1.963 +JSD_PUBLIC_API(jsval)
   1.964 +JSD_GetValueWrappedJSVal(JSDContext* jsdc, JSDValue* jsdval)
   1.965 +{
   1.966 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.967 +    JSD_ASSERT_VALID_VALUE(jsdval);
   1.968 +    return jsd_GetValueWrappedJSVal(jsdc, jsdval);
   1.969 +}
   1.970 +
   1.971 +JSD_PUBLIC_API(void)
   1.972 +JSD_RefreshValue(JSDContext* jsdc, JSDValue* jsdval)
   1.973 +{
   1.974 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.975 +    JSD_ASSERT_VALID_VALUE(jsdval);
   1.976 +    jsd_RefreshValue(jsdc, jsdval);
   1.977 +}
   1.978 +
   1.979 +/**************************************************/
   1.980 +
   1.981 +JSD_PUBLIC_API(bool)
   1.982 +JSD_IsValueObject(JSDContext* jsdc, JSDValue* jsdval)
   1.983 +{
   1.984 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.985 +    JSD_ASSERT_VALID_VALUE(jsdval);
   1.986 +    return jsd_IsValueObject(jsdc, jsdval);
   1.987 +}
   1.988 +
   1.989 +JSD_PUBLIC_API(bool)
   1.990 +JSD_IsValueNumber(JSDContext* jsdc, JSDValue* jsdval)
   1.991 +{
   1.992 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
   1.993 +    JSD_ASSERT_VALID_VALUE(jsdval);
   1.994 +    return jsd_IsValueNumber(jsdc, jsdval);
   1.995 +}
   1.996 +
   1.997 +JSD_PUBLIC_API(bool)
   1.998 +JSD_IsValueInt(JSDContext* jsdc, JSDValue* jsdval)
   1.999 +{
  1.1000 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1001 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1002 +    return jsd_IsValueInt(jsdc, jsdval);
  1.1003 +}
  1.1004 +
  1.1005 +JSD_PUBLIC_API(bool)
  1.1006 +JSD_IsValueDouble(JSDContext* jsdc, JSDValue* jsdval)
  1.1007 +{
  1.1008 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1009 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1010 +    return jsd_IsValueDouble(jsdc, jsdval);
  1.1011 +}
  1.1012 +
  1.1013 +JSD_PUBLIC_API(bool)
  1.1014 +JSD_IsValueString(JSDContext* jsdc, JSDValue* jsdval)
  1.1015 +{
  1.1016 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1017 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1018 +    return jsd_IsValueString(jsdc, jsdval);
  1.1019 +}
  1.1020 +
  1.1021 +JSD_PUBLIC_API(bool)
  1.1022 +JSD_IsValueBoolean(JSDContext* jsdc, JSDValue* jsdval)
  1.1023 +{
  1.1024 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1025 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1026 +    return jsd_IsValueBoolean(jsdc, jsdval);
  1.1027 +}
  1.1028 +
  1.1029 +JSD_PUBLIC_API(bool)
  1.1030 +JSD_IsValueNull(JSDContext* jsdc, JSDValue* jsdval)
  1.1031 +{
  1.1032 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1033 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1034 +    return jsd_IsValueNull(jsdc, jsdval);
  1.1035 +}
  1.1036 +
  1.1037 +JSD_PUBLIC_API(bool)
  1.1038 +JSD_IsValueVoid(JSDContext* jsdc, JSDValue* jsdval)
  1.1039 +{
  1.1040 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1041 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1042 +    return jsd_IsValueVoid(jsdc, jsdval);
  1.1043 +}
  1.1044 +
  1.1045 +JSD_PUBLIC_API(bool)
  1.1046 +JSD_IsValuePrimitive(JSDContext* jsdc, JSDValue* jsdval)
  1.1047 +{
  1.1048 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1049 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1050 +    return jsd_IsValuePrimitive(jsdc, jsdval);
  1.1051 +}
  1.1052 +
  1.1053 +JSD_PUBLIC_API(bool)
  1.1054 +JSD_IsValueFunction(JSDContext* jsdc, JSDValue* jsdval)
  1.1055 +{
  1.1056 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1057 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1058 +    return jsd_IsValueFunction(jsdc, jsdval);
  1.1059 +}
  1.1060 +
  1.1061 +JSD_PUBLIC_API(bool)
  1.1062 +JSD_IsValueNative(JSDContext* jsdc, JSDValue* jsdval)
  1.1063 +{
  1.1064 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1065 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1066 +    return jsd_IsValueNative(jsdc, jsdval);
  1.1067 +}
  1.1068 +
  1.1069 +/**************************************************/
  1.1070 +
  1.1071 +JSD_PUBLIC_API(bool)
  1.1072 +JSD_GetValueBoolean(JSDContext* jsdc, JSDValue* jsdval)
  1.1073 +{
  1.1074 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1075 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1076 +    return jsd_GetValueBoolean(jsdc, jsdval);
  1.1077 +}
  1.1078 +
  1.1079 +JSD_PUBLIC_API(int32_t)
  1.1080 +JSD_GetValueInt(JSDContext* jsdc, JSDValue* jsdval)
  1.1081 +{
  1.1082 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1083 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1084 +    return jsd_GetValueInt(jsdc, jsdval);
  1.1085 +}
  1.1086 +
  1.1087 +JSD_PUBLIC_API(double)
  1.1088 +JSD_GetValueDouble(JSDContext* jsdc, JSDValue* jsdval)
  1.1089 +{
  1.1090 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1091 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1092 +    return jsd_GetValueDouble(jsdc, jsdval);
  1.1093 +}
  1.1094 +
  1.1095 +JSD_PUBLIC_API(JSString*)
  1.1096 +JSD_GetValueString(JSDContext* jsdc, JSDValue* jsdval)
  1.1097 +{
  1.1098 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1099 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1100 +    return jsd_GetValueString(jsdc, jsdval);
  1.1101 +}
  1.1102 +
  1.1103 +JSD_PUBLIC_API(JSString *)
  1.1104 +JSD_GetValueFunctionId(JSDContext* jsdc, JSDValue* jsdval)
  1.1105 +{
  1.1106 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1107 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1108 +    return jsd_GetValueFunctionId(jsdc, jsdval);
  1.1109 +}
  1.1110 +
  1.1111 +JSD_PUBLIC_API(JSFunction*)
  1.1112 +JSD_GetValueFunction(JSDContext* jsdc, JSDValue* jsdval)
  1.1113 +{
  1.1114 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1115 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1116 +    return jsd_GetValueFunction(jsdc, jsdval);
  1.1117 +}
  1.1118 +
  1.1119 +/**************************************************/
  1.1120 +
  1.1121 +JSD_PUBLIC_API(unsigned)
  1.1122 +JSD_GetCountOfProperties(JSDContext* jsdc, JSDValue* jsdval)
  1.1123 +{
  1.1124 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1125 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1126 +    return jsd_GetCountOfProperties(jsdc, jsdval);
  1.1127 +}
  1.1128 +
  1.1129 +JSD_PUBLIC_API(JSDProperty*)
  1.1130 +JSD_IterateProperties(JSDContext* jsdc, JSDValue* jsdval, JSDProperty **iterp)
  1.1131 +{
  1.1132 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1133 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1134 +    MOZ_ASSERT(iterp);
  1.1135 +    return jsd_IterateProperties(jsdc, jsdval, iterp);
  1.1136 +}
  1.1137 +
  1.1138 +JSD_PUBLIC_API(JSDProperty*)
  1.1139 +JSD_GetValueProperty(JSDContext* jsdc, JSDValue* jsdval, JSString* name)
  1.1140 +{
  1.1141 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1142 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1143 +    MOZ_ASSERT(name);
  1.1144 +    return jsd_GetValueProperty(jsdc, jsdval, name);
  1.1145 +}
  1.1146 +
  1.1147 +JSD_PUBLIC_API(JSDValue*)
  1.1148 +JSD_GetValuePrototype(JSDContext* jsdc, JSDValue* jsdval)
  1.1149 +{
  1.1150 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1151 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1152 +    return jsd_GetValuePrototype(jsdc, jsdval);
  1.1153 +}
  1.1154 +
  1.1155 +JSD_PUBLIC_API(JSDValue*)
  1.1156 +JSD_GetValueParent(JSDContext* jsdc, JSDValue* jsdval)
  1.1157 +{
  1.1158 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1159 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1160 +    return jsd_GetValueParent(jsdc, jsdval);
  1.1161 +}
  1.1162 +
  1.1163 +JSD_PUBLIC_API(JSDValue*)
  1.1164 +JSD_GetValueConstructor(JSDContext* jsdc, JSDValue* jsdval)
  1.1165 +{
  1.1166 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1167 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1168 +    return jsd_GetValueConstructor(jsdc, jsdval);
  1.1169 +}
  1.1170 +
  1.1171 +JSD_PUBLIC_API(const char*)
  1.1172 +JSD_GetValueClassName(JSDContext* jsdc, JSDValue* jsdval)
  1.1173 +{
  1.1174 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1175 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1176 +    return jsd_GetValueClassName(jsdc, jsdval);
  1.1177 +}
  1.1178 +
  1.1179 +JSD_PUBLIC_API(JSDScript*)
  1.1180 +JSD_GetScriptForValue(JSDContext* jsdc, JSDValue* jsdval)
  1.1181 +{
  1.1182 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1183 +    return jsd_GetScriptForValue(jsdc, jsdval);
  1.1184 +}
  1.1185 +/**************************************************/
  1.1186 +
  1.1187 +JSD_PUBLIC_API(void)
  1.1188 +JSD_DropProperty(JSDContext* jsdc, JSDProperty* jsdprop)
  1.1189 +{
  1.1190 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1191 +    JSD_ASSERT_VALID_PROPERTY(jsdprop);
  1.1192 +    jsd_DropProperty(jsdc, jsdprop);
  1.1193 +}
  1.1194 +
  1.1195 +
  1.1196 +JSD_PUBLIC_API(JSDValue*)
  1.1197 +JSD_GetPropertyName(JSDContext* jsdc, JSDProperty* jsdprop)
  1.1198 +{
  1.1199 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1200 +    JSD_ASSERT_VALID_PROPERTY(jsdprop);
  1.1201 +    return jsd_GetPropertyName(jsdc, jsdprop);
  1.1202 +}
  1.1203 +
  1.1204 +JSD_PUBLIC_API(JSDValue*)
  1.1205 +JSD_GetPropertyValue(JSDContext* jsdc, JSDProperty* jsdprop)
  1.1206 +{
  1.1207 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1208 +    JSD_ASSERT_VALID_PROPERTY(jsdprop);
  1.1209 +    return jsd_GetPropertyValue(jsdc, jsdprop);
  1.1210 +}
  1.1211 +
  1.1212 +JSD_PUBLIC_API(JSDValue*)
  1.1213 +JSD_GetPropertyAlias(JSDContext* jsdc, JSDProperty* jsdprop)
  1.1214 +{
  1.1215 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1216 +    JSD_ASSERT_VALID_PROPERTY(jsdprop);
  1.1217 +    return jsd_GetPropertyAlias(jsdc, jsdprop);
  1.1218 +}
  1.1219 +
  1.1220 +JSD_PUBLIC_API(unsigned)
  1.1221 +JSD_GetPropertyFlags(JSDContext* jsdc, JSDProperty* jsdprop)
  1.1222 +{
  1.1223 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1224 +    JSD_ASSERT_VALID_PROPERTY(jsdprop);
  1.1225 +    return jsd_GetPropertyFlags(jsdc, jsdprop);
  1.1226 +}
  1.1227 +
  1.1228 +/**************************************************/
  1.1229 +/* Object Functions */
  1.1230 +
  1.1231 +JSD_PUBLIC_API(void)
  1.1232 +JSD_LockObjectSubsystem(JSDContext* jsdc)
  1.1233 +{
  1.1234 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1235 +    JSD_LOCK_OBJECTS(jsdc);
  1.1236 +}
  1.1237 +
  1.1238 +JSD_PUBLIC_API(void)
  1.1239 +JSD_UnlockObjectSubsystem(JSDContext* jsdc)
  1.1240 +{
  1.1241 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1242 +    JSD_UNLOCK_OBJECTS(jsdc);
  1.1243 +}
  1.1244 +
  1.1245 +JSD_PUBLIC_API(JSDObject*)
  1.1246 +JSD_IterateObjects(JSDContext* jsdc, JSDObject** iterp)
  1.1247 +{
  1.1248 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1249 +    return jsd_IterateObjects(jsdc, iterp);
  1.1250 +}
  1.1251 +
  1.1252 +JSD_PUBLIC_API(JSObject*)
  1.1253 +JSD_GetWrappedObject(JSDContext* jsdc, JSDObject* jsdobj)
  1.1254 +{
  1.1255 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1256 +    JSD_ASSERT_VALID_OBJECT(jsdobj);
  1.1257 +    return jsd_GetWrappedObject(jsdc, jsdobj);
  1.1258 +
  1.1259 +}
  1.1260 +
  1.1261 +JSD_PUBLIC_API(const char*)
  1.1262 +JSD_GetObjectNewURL(JSDContext* jsdc, JSDObject* jsdobj)
  1.1263 +{
  1.1264 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1265 +    JSD_ASSERT_VALID_OBJECT(jsdobj);
  1.1266 +    return jsd_GetObjectNewURL(jsdc, jsdobj);
  1.1267 +}
  1.1268 +
  1.1269 +JSD_PUBLIC_API(unsigned)
  1.1270 +JSD_GetObjectNewLineNumber(JSDContext* jsdc, JSDObject* jsdobj)
  1.1271 +{
  1.1272 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1273 +    JSD_ASSERT_VALID_OBJECT(jsdobj);
  1.1274 +    return jsd_GetObjectNewLineNumber(jsdc, jsdobj);
  1.1275 +}
  1.1276 +
  1.1277 +JSD_PUBLIC_API(const char*)
  1.1278 +JSD_GetObjectConstructorURL(JSDContext* jsdc, JSDObject* jsdobj)
  1.1279 +{
  1.1280 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1281 +    JSD_ASSERT_VALID_OBJECT(jsdobj);
  1.1282 +    return jsd_GetObjectConstructorURL(jsdc, jsdobj);
  1.1283 +}
  1.1284 +
  1.1285 +JSD_PUBLIC_API(unsigned)
  1.1286 +JSD_GetObjectConstructorLineNumber(JSDContext* jsdc, JSDObject* jsdobj)
  1.1287 +{
  1.1288 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1289 +    JSD_ASSERT_VALID_OBJECT(jsdobj);
  1.1290 +    return jsd_GetObjectConstructorLineNumber(jsdc, jsdobj);
  1.1291 +}
  1.1292 +
  1.1293 +JSD_PUBLIC_API(const char*)
  1.1294 +JSD_GetObjectConstructorName(JSDContext* jsdc, JSDObject* jsdobj)
  1.1295 +{
  1.1296 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1297 +    JSD_ASSERT_VALID_OBJECT(jsdobj);
  1.1298 +    return jsd_GetObjectConstructorName(jsdc, jsdobj);
  1.1299 +}
  1.1300 +
  1.1301 +JSD_PUBLIC_API(JSDObject*)
  1.1302 +JSD_GetJSDObjectForJSObject(JSDContext* jsdc, JSObject* jsobj)
  1.1303 +{
  1.1304 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1305 +    MOZ_ASSERT(jsobj);
  1.1306 +    return jsd_GetJSDObjectForJSObject(jsdc, jsobj);
  1.1307 +}
  1.1308 +
  1.1309 +JSD_PUBLIC_API(JSDObject*)
  1.1310 +JSD_GetObjectForValue(JSDContext* jsdc, JSDValue* jsdval)
  1.1311 +{
  1.1312 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1313 +    JSD_ASSERT_VALID_VALUE(jsdval);
  1.1314 +    return jsd_GetObjectForValue(jsdc, jsdval);
  1.1315 +}
  1.1316 +
  1.1317 +JSD_PUBLIC_API(JSDValue*)
  1.1318 +JSD_GetValueForObject(JSDContext* jsdc, JSDObject* jsdobj)
  1.1319 +{
  1.1320 +    JSD_ASSERT_VALID_CONTEXT(jsdc);
  1.1321 +    JSD_ASSERT_VALID_OBJECT(jsdobj);
  1.1322 +    return jsd_GetValueForObject(jsdc, jsdobj);
  1.1323 +}

mercurial