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 +}