js/jsd/jsdebug.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
michael@0 2 * vim: set ts=8 sts=4 et sw=4 tw=99:
michael@0 3 * This Source Code Form is subject to the terms of the Mozilla Public
michael@0 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 6
michael@0 7 /*
michael@0 8 * JavaScript Debugging support - All public functions
michael@0 9 */
michael@0 10
michael@0 11 #include "jsd.h"
michael@0 12
michael@0 13 /***************************************************************************/
michael@0 14 /* High Level calls */
michael@0 15
michael@0 16 JSD_PUBLIC_API(JSDContext*)
michael@0 17 JSD_DebuggerOnForUser(JSRuntime* jsrt,
michael@0 18 JSD_UserCallbacks* callbacks,
michael@0 19 void* user)
michael@0 20 {
michael@0 21 return jsd_DebuggerOnForUser(jsrt, callbacks, user, nullptr);
michael@0 22 }
michael@0 23
michael@0 24 JSD_PUBLIC_API(JSDContext*)
michael@0 25 JSD_DebuggerOn(void)
michael@0 26 {
michael@0 27 return jsd_DebuggerOn();
michael@0 28 }
michael@0 29
michael@0 30 JSD_PUBLIC_API(void)
michael@0 31 JSD_DebuggerOff(JSDContext* jsdc)
michael@0 32 {
michael@0 33 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 34 jsd_DebuggerOff(jsdc);
michael@0 35 }
michael@0 36
michael@0 37 JSD_PUBLIC_API(void)
michael@0 38 JSD_DebuggerPause(JSDContext* jsdc)
michael@0 39 {
michael@0 40 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 41 jsd_DebuggerPause(jsdc, false);
michael@0 42 }
michael@0 43
michael@0 44 JSD_PUBLIC_API(void)
michael@0 45 JSD_DebuggerUnpause(JSDContext* jsdc)
michael@0 46 {
michael@0 47 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 48 jsd_DebuggerUnpause(jsdc);
michael@0 49 }
michael@0 50
michael@0 51 JSD_PUBLIC_API(unsigned)
michael@0 52 JSD_GetMajorVersion(void)
michael@0 53 {
michael@0 54 return JSD_MAJOR_VERSION;
michael@0 55 }
michael@0 56
michael@0 57 JSD_PUBLIC_API(unsigned)
michael@0 58 JSD_GetMinorVersion(void)
michael@0 59 {
michael@0 60 return JSD_MINOR_VERSION;
michael@0 61 }
michael@0 62
michael@0 63 JSD_PUBLIC_API(JSObject*)
michael@0 64 JSD_GetDefaultGlobal(JSDContext* jsdc)
michael@0 65 {
michael@0 66 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 67 return jsdc->glob;
michael@0 68 }
michael@0 69
michael@0 70 JSD_PUBLIC_API(JSRuntime*)
michael@0 71 JSD_GetJSRuntime(JSDContext* jsdc)
michael@0 72 {
michael@0 73 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 74 return jsdc->jsrt;
michael@0 75 }
michael@0 76
michael@0 77 JSD_PUBLIC_API(void)
michael@0 78 JSD_SetUserCallbacks(JSRuntime* jsrt, JSD_UserCallbacks* callbacks, void* user)
michael@0 79 {
michael@0 80 jsd_SetUserCallbacks(jsrt, callbacks, user);
michael@0 81 }
michael@0 82
michael@0 83 JSD_PUBLIC_API(void)
michael@0 84 JSD_JSContextInUse(JSDContext* jsdc, JSContext* context)
michael@0 85 {
michael@0 86 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 87 /* we no longer need this information - may need it again in the future */
michael@0 88 }
michael@0 89
michael@0 90 JSD_PUBLIC_API(void *)
michael@0 91 JSD_SetContextPrivate(JSDContext *jsdc, void *data)
michael@0 92 {
michael@0 93 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 94 return jsd_SetContextPrivate (jsdc, data);
michael@0 95 }
michael@0 96
michael@0 97 JSD_PUBLIC_API(void *)
michael@0 98 JSD_GetContextPrivate(JSDContext *jsdc)
michael@0 99 {
michael@0 100 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 101 return jsd_GetContextPrivate (jsdc);
michael@0 102 }
michael@0 103
michael@0 104 JSD_PUBLIC_API(void)
michael@0 105 JSD_ClearAllProfileData(JSDContext *jsdc)
michael@0 106 {
michael@0 107 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 108 jsd_ClearAllProfileData(jsdc);
michael@0 109 }
michael@0 110
michael@0 111 JSD_PUBLIC_API(void)
michael@0 112 JSD_SetContextFlags(JSDContext *jsdc, uint32_t flags)
michael@0 113 {
michael@0 114 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 115 jsdc->flags = flags;
michael@0 116 if (flags & JSD_COLLECT_PROFILE_DATA) {
michael@0 117 /* Need to reenable our call hooks now */
michael@0 118 JS_SetExecuteHook(jsdc->jsrt, jsd_TopLevelCallHook, jsdc);
michael@0 119 JS_SetCallHook(jsdc->jsrt, jsd_FunctionCallHook, jsdc);
michael@0 120 }
michael@0 121 }
michael@0 122
michael@0 123 JSD_PUBLIC_API(uint32_t)
michael@0 124 JSD_GetContextFlags(JSDContext *jsdc)
michael@0 125 {
michael@0 126 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 127 return jsdc->flags;
michael@0 128 }
michael@0 129
michael@0 130 JSD_PUBLIC_API(JSDContext*)
michael@0 131 JSD_JSDContextForJSContext(JSContext* context)
michael@0 132 {
michael@0 133 return jsd_JSDContextForJSContext(context);
michael@0 134 }
michael@0 135
michael@0 136 /***************************************************************************/
michael@0 137 /* Script functions */
michael@0 138
michael@0 139 JSD_PUBLIC_API(void)
michael@0 140 JSD_LockScriptSubsystem(JSDContext* jsdc)
michael@0 141 {
michael@0 142 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 143 JSD_LOCK_SCRIPTS(jsdc);
michael@0 144 }
michael@0 145
michael@0 146 JSD_PUBLIC_API(void)
michael@0 147 JSD_UnlockScriptSubsystem(JSDContext* jsdc)
michael@0 148 {
michael@0 149 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 150 JSD_UNLOCK_SCRIPTS(jsdc);
michael@0 151 }
michael@0 152
michael@0 153 JSD_PUBLIC_API(JSDScript*)
michael@0 154 JSD_IterateScripts(JSDContext* jsdc, JSDScript **iterp)
michael@0 155 {
michael@0 156 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 157 return jsd_IterateScripts(jsdc, iterp);
michael@0 158 }
michael@0 159
michael@0 160 JSD_PUBLIC_API(uint32_t)
michael@0 161 JSD_GetScriptFlags(JSDContext *jsdc, JSDScript *script)
michael@0 162 {
michael@0 163 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 164 return jsd_GetScriptFlags(jsdc, script);
michael@0 165 }
michael@0 166
michael@0 167 JSD_PUBLIC_API(void)
michael@0 168 JSD_SetScriptFlags(JSDContext *jsdc, JSDScript *script, uint32_t flags)
michael@0 169 {
michael@0 170 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 171 jsd_SetScriptFlags(jsdc, script, flags);
michael@0 172 }
michael@0 173
michael@0 174 JSD_PUBLIC_API(unsigned)
michael@0 175 JSD_GetScriptCallCount(JSDContext* jsdc, JSDScript *script)
michael@0 176 {
michael@0 177 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 178 return jsd_GetScriptCallCount(jsdc, script);
michael@0 179 }
michael@0 180
michael@0 181 JSD_PUBLIC_API(unsigned)
michael@0 182 JSD_GetScriptMaxRecurseDepth(JSDContext* jsdc, JSDScript *script)
michael@0 183 {
michael@0 184 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 185 return jsd_GetScriptMaxRecurseDepth(jsdc, script);
michael@0 186 }
michael@0 187
michael@0 188
michael@0 189 JSD_PUBLIC_API(double)
michael@0 190 JSD_GetScriptMinExecutionTime(JSDContext* jsdc, JSDScript *script)
michael@0 191 {
michael@0 192 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 193 return jsd_GetScriptMinExecutionTime(jsdc, script);
michael@0 194 }
michael@0 195
michael@0 196 JSD_PUBLIC_API(double)
michael@0 197 JSD_GetScriptMaxExecutionTime(JSDContext* jsdc, JSDScript *script)
michael@0 198 {
michael@0 199 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 200 return jsd_GetScriptMaxExecutionTime(jsdc, script);
michael@0 201 }
michael@0 202
michael@0 203 JSD_PUBLIC_API(double)
michael@0 204 JSD_GetScriptTotalExecutionTime(JSDContext* jsdc, JSDScript *script)
michael@0 205 {
michael@0 206 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 207 return jsd_GetScriptTotalExecutionTime(jsdc, script);
michael@0 208 }
michael@0 209
michael@0 210 JSD_PUBLIC_API(double)
michael@0 211 JSD_GetScriptMinOwnExecutionTime(JSDContext* jsdc, JSDScript *script)
michael@0 212 {
michael@0 213 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 214 return jsd_GetScriptMinOwnExecutionTime(jsdc, script);
michael@0 215 }
michael@0 216
michael@0 217 JSD_PUBLIC_API(double)
michael@0 218 JSD_GetScriptMaxOwnExecutionTime(JSDContext* jsdc, JSDScript *script)
michael@0 219 {
michael@0 220 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 221 return jsd_GetScriptMaxOwnExecutionTime(jsdc, script);
michael@0 222 }
michael@0 223
michael@0 224 JSD_PUBLIC_API(double)
michael@0 225 JSD_GetScriptTotalOwnExecutionTime(JSDContext* jsdc, JSDScript *script)
michael@0 226 {
michael@0 227 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 228 return jsd_GetScriptTotalOwnExecutionTime(jsdc, script);
michael@0 229 }
michael@0 230
michael@0 231 JSD_PUBLIC_API(void)
michael@0 232 JSD_ClearScriptProfileData(JSDContext* jsdc, JSDScript *script)
michael@0 233 {
michael@0 234 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 235 jsd_ClearScriptProfileData(jsdc, script);
michael@0 236 }
michael@0 237
michael@0 238 JSD_PUBLIC_API(JSScript*)
michael@0 239 JSD_GetJSScript(JSDContext* jsdc, JSDScript *script)
michael@0 240 {
michael@0 241 return jsd_GetJSScript(jsdc, script);
michael@0 242 }
michael@0 243
michael@0 244 JSD_PUBLIC_API(JSFunction*)
michael@0 245 JSD_GetJSFunction(JSDContext* jsdc, JSDScript *script)
michael@0 246 {
michael@0 247 return jsd_GetJSFunction (jsdc, script);
michael@0 248 }
michael@0 249
michael@0 250 JSD_PUBLIC_API(void *)
michael@0 251 JSD_SetScriptPrivate(JSDScript *jsdscript, void *data)
michael@0 252 {
michael@0 253 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 254 return jsd_SetScriptPrivate (jsdscript, data);
michael@0 255 }
michael@0 256
michael@0 257 JSD_PUBLIC_API(void *)
michael@0 258 JSD_GetScriptPrivate(JSDScript *jsdscript)
michael@0 259 {
michael@0 260 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 261 return jsd_GetScriptPrivate (jsdscript);
michael@0 262 }
michael@0 263
michael@0 264
michael@0 265 JSD_PUBLIC_API(bool)
michael@0 266 JSD_IsActiveScript(JSDContext* jsdc, JSDScript *jsdscript)
michael@0 267 {
michael@0 268 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 269 return jsd_IsActiveScript(jsdc, jsdscript);
michael@0 270 }
michael@0 271
michael@0 272 JSD_PUBLIC_API(const char*)
michael@0 273 JSD_GetScriptFilename(JSDContext* jsdc, JSDScript *jsdscript)
michael@0 274 {
michael@0 275 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 276 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 277 return jsd_GetScriptFilename(jsdc, jsdscript);
michael@0 278 }
michael@0 279
michael@0 280 JSD_PUBLIC_API(JSString *)
michael@0 281 JSD_GetScriptFunctionId(JSDContext* jsdc, JSDScript *jsdscript)
michael@0 282 {
michael@0 283 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 284 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 285 return jsd_GetScriptFunctionId(jsdc, jsdscript);
michael@0 286 }
michael@0 287
michael@0 288 JSD_PUBLIC_API(unsigned)
michael@0 289 JSD_GetScriptBaseLineNumber(JSDContext* jsdc, JSDScript *jsdscript)
michael@0 290 {
michael@0 291 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 292 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 293 return jsd_GetScriptBaseLineNumber(jsdc, jsdscript);
michael@0 294 }
michael@0 295
michael@0 296 JSD_PUBLIC_API(unsigned)
michael@0 297 JSD_GetScriptLineExtent(JSDContext* jsdc, JSDScript *jsdscript)
michael@0 298 {
michael@0 299 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 300 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 301 return jsd_GetScriptLineExtent(jsdc, jsdscript);
michael@0 302 }
michael@0 303
michael@0 304 JSD_PUBLIC_API(bool)
michael@0 305 JSD_SetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc hook, void* callerdata)
michael@0 306 {
michael@0 307 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 308 return jsd_SetScriptHook(jsdc, hook, callerdata);
michael@0 309 }
michael@0 310
michael@0 311 JSD_PUBLIC_API(bool)
michael@0 312 JSD_GetScriptHook(JSDContext* jsdc, JSD_ScriptHookProc* hook, void** callerdata)
michael@0 313 {
michael@0 314 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 315 return jsd_GetScriptHook(jsdc, hook, callerdata);
michael@0 316 }
michael@0 317
michael@0 318 JSD_PUBLIC_API(uintptr_t)
michael@0 319 JSD_GetClosestPC(JSDContext* jsdc, JSDScript* jsdscript, unsigned line)
michael@0 320 {
michael@0 321 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 322 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 323 return jsd_GetClosestPC(jsdc, jsdscript, line);
michael@0 324 }
michael@0 325
michael@0 326 JSD_PUBLIC_API(unsigned)
michael@0 327 JSD_GetClosestLine(JSDContext* jsdc, JSDScript* jsdscript, uintptr_t pc)
michael@0 328 {
michael@0 329 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 330 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 331 return jsd_GetClosestLine(jsdc, jsdscript, pc);
michael@0 332 }
michael@0 333
michael@0 334 JSD_PUBLIC_API(bool)
michael@0 335 JSD_GetLinePCs(JSDContext* jsdc, JSDScript* jsdscript,
michael@0 336 unsigned startLine, unsigned maxLines,
michael@0 337 unsigned* count, unsigned** lines, uintptr_t** pcs)
michael@0 338 {
michael@0 339 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 340 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 341 return jsd_GetLinePCs(jsdc, jsdscript, startLine, maxLines, count, lines, pcs);
michael@0 342 }
michael@0 343
michael@0 344 JSD_PUBLIC_API(void)
michael@0 345 JSD_ScriptCreated(JSDContext* jsdc,
michael@0 346 JSContext *cx,
michael@0 347 const char *filename, /* URL this script loads from */
michael@0 348 unsigned lineno, /* line where this script starts */
michael@0 349 JSScript *script,
michael@0 350 JSFunction *fun)
michael@0 351 {
michael@0 352 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 353 jsd_ScriptCreated(jsdc, cx, filename, lineno, script, fun);
michael@0 354 }
michael@0 355
michael@0 356 JSD_PUBLIC_API(void)
michael@0 357 JSD_ScriptDestroyed(JSDContext* jsdc,
michael@0 358 JSFreeOp *fop,
michael@0 359 JSScript *script)
michael@0 360 {
michael@0 361 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 362 jsd_ScriptDestroyed(jsdc, fop, script);
michael@0 363 }
michael@0 364
michael@0 365 /***************************************************************************/
michael@0 366 /* Source Text functions */
michael@0 367
michael@0 368 JSD_PUBLIC_API(void)
michael@0 369 JSD_LockSourceTextSubsystem(JSDContext* jsdc)
michael@0 370 {
michael@0 371 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 372 JSD_LOCK_SOURCE_TEXT(jsdc);
michael@0 373 }
michael@0 374
michael@0 375 JSD_PUBLIC_API(void)
michael@0 376 JSD_UnlockSourceTextSubsystem(JSDContext* jsdc)
michael@0 377 {
michael@0 378 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 379 JSD_UNLOCK_SOURCE_TEXT(jsdc);
michael@0 380 }
michael@0 381
michael@0 382 JSD_PUBLIC_API(JSDSourceText*)
michael@0 383 JSD_IterateSources(JSDContext* jsdc, JSDSourceText **iterp)
michael@0 384 {
michael@0 385 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 386 return jsd_IterateSources(jsdc, iterp);
michael@0 387 }
michael@0 388
michael@0 389 JSD_PUBLIC_API(JSDSourceText*)
michael@0 390 JSD_FindSourceForURL(JSDContext* jsdc, const char* url)
michael@0 391 {
michael@0 392 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 393 MOZ_ASSERT(url);
michael@0 394 return jsd_FindSourceForURL(jsdc, url);
michael@0 395 }
michael@0 396
michael@0 397 JSD_PUBLIC_API(const char*)
michael@0 398 JSD_GetSourceURL(JSDContext* jsdc, JSDSourceText* jsdsrc)
michael@0 399 {
michael@0 400 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 401 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 402 return jsd_GetSourceURL(jsdc,jsdsrc);
michael@0 403 }
michael@0 404
michael@0 405 JSD_PUBLIC_API(bool)
michael@0 406 JSD_GetSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc,
michael@0 407 const char** ppBuf, int* pLen)
michael@0 408 {
michael@0 409 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 410 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 411 MOZ_ASSERT(ppBuf);
michael@0 412 MOZ_ASSERT(pLen);
michael@0 413 return jsd_GetSourceText(jsdc, jsdsrc, ppBuf, pLen);
michael@0 414 }
michael@0 415
michael@0 416 JSD_PUBLIC_API(void)
michael@0 417 JSD_ClearSourceText(JSDContext* jsdc, JSDSourceText* jsdsrc)
michael@0 418 {
michael@0 419 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 420 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 421 jsd_ClearSourceText(jsdc, jsdsrc);
michael@0 422 }
michael@0 423
michael@0 424
michael@0 425 JSD_PUBLIC_API(JSDSourceStatus)
michael@0 426 JSD_GetSourceStatus(JSDContext* jsdc, JSDSourceText* jsdsrc)
michael@0 427 {
michael@0 428 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 429 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 430 return jsd_GetSourceStatus(jsdc, jsdsrc);
michael@0 431 }
michael@0 432
michael@0 433 JSD_PUBLIC_API(bool)
michael@0 434 JSD_IsSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc)
michael@0 435 {
michael@0 436 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 437 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 438 return jsd_IsSourceDirty(jsdc, jsdsrc);
michael@0 439 }
michael@0 440
michael@0 441 JSD_PUBLIC_API(void)
michael@0 442 JSD_SetSourceDirty(JSDContext* jsdc, JSDSourceText* jsdsrc, bool dirty)
michael@0 443 {
michael@0 444 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 445 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 446 jsd_SetSourceDirty(jsdc, jsdsrc, dirty);
michael@0 447 }
michael@0 448
michael@0 449 JSD_PUBLIC_API(unsigned)
michael@0 450 JSD_GetSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
michael@0 451 {
michael@0 452 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 453 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 454 return jsd_GetSourceAlterCount(jsdc, jsdsrc);
michael@0 455 }
michael@0 456
michael@0 457 JSD_PUBLIC_API(unsigned)
michael@0 458 JSD_IncrementSourceAlterCount(JSDContext* jsdc, JSDSourceText* jsdsrc)
michael@0 459 {
michael@0 460 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 461 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 462 return jsd_IncrementSourceAlterCount(jsdc, jsdsrc);
michael@0 463 }
michael@0 464
michael@0 465 JSD_PUBLIC_API(void)
michael@0 466 JSD_DestroyAllSources( JSDContext* jsdc )
michael@0 467 {
michael@0 468 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 469 jsd_DestroyAllSources(jsdc);
michael@0 470 }
michael@0 471
michael@0 472 JSD_PUBLIC_API(JSDSourceText*)
michael@0 473 JSD_NewSourceText(JSDContext* jsdc, const char* url)
michael@0 474 {
michael@0 475 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 476 MOZ_ASSERT(url);
michael@0 477 return jsd_NewSourceText(jsdc, url);
michael@0 478 }
michael@0 479
michael@0 480 JSD_PUBLIC_API(JSDSourceText*)
michael@0 481 JSD_AppendSourceText(JSDContext* jsdc,
michael@0 482 JSDSourceText* jsdsrc,
michael@0 483 const char* text, /* *not* zero terminated */
michael@0 484 size_t length,
michael@0 485 JSDSourceStatus status)
michael@0 486 {
michael@0 487 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 488 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 489 return jsd_AppendSourceText(jsdc, jsdsrc, text, length, status);
michael@0 490 }
michael@0 491
michael@0 492 extern JSD_PUBLIC_API(JSDSourceText*)
michael@0 493 JSD_AppendUCSourceText(JSDContext* jsdc,
michael@0 494 JSDSourceText* jsdsrc,
michael@0 495 const jschar* text, /* *not* zero terminated */
michael@0 496 size_t length,
michael@0 497 JSDSourceStatus status)
michael@0 498 {
michael@0 499 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 500 JSD_ASSERT_VALID_SOURCE_TEXT(jsdsrc);
michael@0 501 return jsd_AppendUCSourceText(jsdc, jsdsrc, text, length, status);
michael@0 502 }
michael@0 503
michael@0 504 JSD_PUBLIC_API(bool)
michael@0 505 JSD_AddFullSourceText(JSDContext* jsdc,
michael@0 506 const char* text, /* *not* zero terminated */
michael@0 507 size_t length,
michael@0 508 const char* url)
michael@0 509 {
michael@0 510 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 511 MOZ_ASSERT(url);
michael@0 512 return jsd_AddFullSourceText(jsdc, text, length, url);
michael@0 513 }
michael@0 514
michael@0 515 /***************************************************************************/
michael@0 516 /* Execution/Interrupt Hook functions */
michael@0 517
michael@0 518 JSD_PUBLIC_API(bool)
michael@0 519 JSD_SetExecutionHook(JSDContext* jsdc,
michael@0 520 JSDScript* jsdscript,
michael@0 521 uintptr_t pc,
michael@0 522 JSD_ExecutionHookProc hook,
michael@0 523 void* callerdata)
michael@0 524 {
michael@0 525 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 526 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 527 return jsd_SetExecutionHook(jsdc, jsdscript, pc, hook, callerdata);
michael@0 528 }
michael@0 529
michael@0 530 JSD_PUBLIC_API(bool)
michael@0 531 JSD_ClearExecutionHook(JSDContext* jsdc,
michael@0 532 JSDScript* jsdscript,
michael@0 533 uintptr_t pc)
michael@0 534 {
michael@0 535 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 536 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 537 return jsd_ClearExecutionHook(jsdc, jsdscript, pc);
michael@0 538 }
michael@0 539
michael@0 540 JSD_PUBLIC_API(bool)
michael@0 541 JSD_ClearAllExecutionHooksForScript(JSDContext* jsdc, JSDScript* jsdscript)
michael@0 542 {
michael@0 543 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 544 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 545 return jsd_ClearAllExecutionHooksForScript(jsdc, jsdscript);
michael@0 546 }
michael@0 547
michael@0 548 JSD_PUBLIC_API(bool)
michael@0 549 JSD_ClearAllExecutionHooks(JSDContext* jsdc)
michael@0 550 {
michael@0 551 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 552 return jsd_ClearAllExecutionHooks(jsdc);
michael@0 553 }
michael@0 554
michael@0 555 JSD_PUBLIC_API(bool)
michael@0 556 JSD_SetInterruptHook(JSDContext* jsdc,
michael@0 557 JSD_ExecutionHookProc hook,
michael@0 558 void* callerdata)
michael@0 559 {
michael@0 560 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 561 return jsd_SetInterruptHook(jsdc, hook, callerdata);
michael@0 562 }
michael@0 563
michael@0 564 JSD_PUBLIC_API(bool)
michael@0 565 JSD_EnableSingleStepInterrupts(JSDContext* jsdc, JSDScript* jsdscript, bool enable)
michael@0 566 {
michael@0 567 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 568 JSD_ASSERT_VALID_SCRIPT(jsdscript);
michael@0 569 return jsd_EnableSingleStepInterrupts(jsdc, jsdscript, enable);
michael@0 570 }
michael@0 571
michael@0 572 JSD_PUBLIC_API(bool)
michael@0 573 JSD_ClearInterruptHook(JSDContext* jsdc)
michael@0 574 {
michael@0 575 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 576 return jsd_ClearInterruptHook(jsdc);
michael@0 577 }
michael@0 578
michael@0 579 JSD_PUBLIC_API(bool)
michael@0 580 JSD_SetDebugBreakHook(JSDContext* jsdc,
michael@0 581 JSD_ExecutionHookProc hook,
michael@0 582 void* callerdata)
michael@0 583 {
michael@0 584 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 585 return jsd_SetDebugBreakHook(jsdc, hook, callerdata);
michael@0 586 }
michael@0 587
michael@0 588 JSD_PUBLIC_API(bool)
michael@0 589 JSD_ClearDebugBreakHook(JSDContext* jsdc)
michael@0 590 {
michael@0 591 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 592 return jsd_ClearDebugBreakHook(jsdc);
michael@0 593 }
michael@0 594
michael@0 595 JSD_PUBLIC_API(bool)
michael@0 596 JSD_SetDebuggerHook(JSDContext* jsdc,
michael@0 597 JSD_ExecutionHookProc hook,
michael@0 598 void* callerdata)
michael@0 599 {
michael@0 600 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 601 return jsd_SetDebuggerHook(jsdc, hook, callerdata);
michael@0 602 }
michael@0 603
michael@0 604 JSD_PUBLIC_API(bool)
michael@0 605 JSD_ClearDebuggerHook(JSDContext* jsdc)
michael@0 606 {
michael@0 607 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 608 return jsd_ClearDebuggerHook(jsdc);
michael@0 609 }
michael@0 610
michael@0 611 JSD_PUBLIC_API(bool)
michael@0 612 JSD_SetThrowHook(JSDContext* jsdc,
michael@0 613 JSD_ExecutionHookProc hook,
michael@0 614 void* callerdata)
michael@0 615 {
michael@0 616 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 617 return jsd_SetThrowHook(jsdc, hook, callerdata);
michael@0 618 }
michael@0 619
michael@0 620 JSD_PUBLIC_API(bool)
michael@0 621 JSD_ClearThrowHook(JSDContext* jsdc)
michael@0 622 {
michael@0 623 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 624 return jsd_ClearThrowHook(jsdc);
michael@0 625 }
michael@0 626
michael@0 627 JSD_PUBLIC_API(bool)
michael@0 628 JSD_SetTopLevelHook(JSDContext* jsdc,
michael@0 629 JSD_CallHookProc hook,
michael@0 630 void* callerdata)
michael@0 631 {
michael@0 632 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 633 return jsd_SetTopLevelHook(jsdc, hook, callerdata);
michael@0 634 }
michael@0 635
michael@0 636 JSD_PUBLIC_API(bool)
michael@0 637 JSD_ClearTopLevelHook(JSDContext* jsdc)
michael@0 638 {
michael@0 639 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 640 return jsd_ClearTopLevelHook(jsdc);
michael@0 641 }
michael@0 642
michael@0 643 JSD_PUBLIC_API(bool)
michael@0 644 JSD_SetFunctionHook(JSDContext* jsdc,
michael@0 645 JSD_CallHookProc hook,
michael@0 646 void* callerdata)
michael@0 647 {
michael@0 648 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 649 return jsd_SetFunctionHook(jsdc, hook, callerdata);
michael@0 650 }
michael@0 651
michael@0 652 JSD_PUBLIC_API(bool)
michael@0 653 JSD_ClearFunctionHook(JSDContext* jsdc)
michael@0 654 {
michael@0 655 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 656 return jsd_ClearFunctionHook(jsdc);
michael@0 657 }
michael@0 658
michael@0 659 /***************************************************************************/
michael@0 660 /* Stack Frame functions */
michael@0 661
michael@0 662 JSD_PUBLIC_API(unsigned)
michael@0 663 JSD_GetCountOfStackFrames(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
michael@0 664 {
michael@0 665 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 666 return jsd_GetCountOfStackFrames(jsdc, jsdthreadstate);
michael@0 667 }
michael@0 668
michael@0 669 JSD_PUBLIC_API(JSDStackFrameInfo*)
michael@0 670 JSD_GetStackFrame(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
michael@0 671 {
michael@0 672 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 673 return jsd_GetStackFrame(jsdc, jsdthreadstate);
michael@0 674 }
michael@0 675
michael@0 676 JSD_PUBLIC_API(JSContext*)
michael@0 677 JSD_GetJSContext(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
michael@0 678 {
michael@0 679 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 680 return jsd_GetJSContext(jsdc, jsdthreadstate);
michael@0 681 }
michael@0 682
michael@0 683 JSD_PUBLIC_API(JSDStackFrameInfo*)
michael@0 684 JSD_GetCallingStackFrame(JSDContext* jsdc,
michael@0 685 JSDThreadState* jsdthreadstate,
michael@0 686 JSDStackFrameInfo* jsdframe)
michael@0 687 {
michael@0 688 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 689 return jsd_GetCallingStackFrame(jsdc, jsdthreadstate, jsdframe);
michael@0 690 }
michael@0 691
michael@0 692 JSD_PUBLIC_API(JSDScript*)
michael@0 693 JSD_GetScriptForStackFrame(JSDContext* jsdc,
michael@0 694 JSDThreadState* jsdthreadstate,
michael@0 695 JSDStackFrameInfo* jsdframe)
michael@0 696 {
michael@0 697 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 698 return jsd_GetScriptForStackFrame(jsdc, jsdthreadstate, jsdframe);
michael@0 699 }
michael@0 700
michael@0 701 JSD_PUBLIC_API(uintptr_t)
michael@0 702 JSD_GetPCForStackFrame(JSDContext* jsdc,
michael@0 703 JSDThreadState* jsdthreadstate,
michael@0 704 JSDStackFrameInfo* jsdframe)
michael@0 705 {
michael@0 706 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 707 return jsd_GetPCForStackFrame(jsdc, jsdthreadstate, jsdframe);
michael@0 708 }
michael@0 709
michael@0 710 JSD_PUBLIC_API(JSDValue*)
michael@0 711 JSD_GetCallObjectForStackFrame(JSDContext* jsdc,
michael@0 712 JSDThreadState* jsdthreadstate,
michael@0 713 JSDStackFrameInfo* jsdframe)
michael@0 714 {
michael@0 715 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 716 return jsd_GetCallObjectForStackFrame(jsdc, jsdthreadstate, jsdframe);
michael@0 717 }
michael@0 718
michael@0 719 JSD_PUBLIC_API(JSDValue*)
michael@0 720 JSD_GetScopeChainForStackFrame(JSDContext* jsdc,
michael@0 721 JSDThreadState* jsdthreadstate,
michael@0 722 JSDStackFrameInfo* jsdframe)
michael@0 723 {
michael@0 724 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 725 return jsd_GetScopeChainForStackFrame(jsdc, jsdthreadstate, jsdframe);
michael@0 726 }
michael@0 727
michael@0 728 JSD_PUBLIC_API(JSDValue*)
michael@0 729 JSD_GetThisForStackFrame(JSDContext* jsdc,
michael@0 730 JSDThreadState* jsdthreadstate,
michael@0 731 JSDStackFrameInfo* jsdframe)
michael@0 732 {
michael@0 733 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 734 return jsd_GetThisForStackFrame(jsdc, jsdthreadstate, jsdframe);
michael@0 735 }
michael@0 736
michael@0 737 JSD_PUBLIC_API(JSString *)
michael@0 738 JSD_GetIdForStackFrame(JSDContext* jsdc,
michael@0 739 JSDThreadState* jsdthreadstate,
michael@0 740 JSDStackFrameInfo* jsdframe)
michael@0 741 {
michael@0 742 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 743 return jsd_GetIdForStackFrame(jsdc, jsdthreadstate, jsdframe);
michael@0 744 }
michael@0 745
michael@0 746 JSD_PUBLIC_API(bool)
michael@0 747 JSD_IsStackFrameDebugger(JSDContext* jsdc,
michael@0 748 JSDThreadState* jsdthreadstate,
michael@0 749 JSDStackFrameInfo* jsdframe)
michael@0 750 {
michael@0 751 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 752 return jsd_IsStackFrameDebugger(jsdc, jsdthreadstate, jsdframe);
michael@0 753 }
michael@0 754
michael@0 755 JSD_PUBLIC_API(bool)
michael@0 756 JSD_IsStackFrameConstructing(JSDContext* jsdc,
michael@0 757 JSDThreadState* jsdthreadstate,
michael@0 758 JSDStackFrameInfo* jsdframe)
michael@0 759 {
michael@0 760 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 761 return jsd_IsStackFrameConstructing(jsdc, jsdthreadstate, jsdframe);
michael@0 762 }
michael@0 763
michael@0 764 JSD_PUBLIC_API(bool)
michael@0 765 JSD_EvaluateUCScriptInStackFrame(JSDContext* jsdc,
michael@0 766 JSDThreadState* jsdthreadstate,
michael@0 767 JSDStackFrameInfo* jsdframe,
michael@0 768 const jschar *bytes, unsigned length,
michael@0 769 const char *filename, unsigned lineno, JS::MutableHandleValue rval)
michael@0 770 {
michael@0 771 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 772 MOZ_ASSERT(bytes);
michael@0 773 MOZ_ASSERT(length);
michael@0 774 MOZ_ASSERT(filename);
michael@0 775
michael@0 776 return jsd_EvaluateUCScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
michael@0 777 bytes, length, filename, lineno,
michael@0 778 true, rval);
michael@0 779 }
michael@0 780
michael@0 781 JSD_PUBLIC_API(bool)
michael@0 782 JSD_AttemptUCScriptInStackFrame(JSDContext* jsdc,
michael@0 783 JSDThreadState* jsdthreadstate,
michael@0 784 JSDStackFrameInfo* jsdframe,
michael@0 785 const jschar *bytes, unsigned length,
michael@0 786 const char *filename, unsigned lineno,
michael@0 787 JS::MutableHandleValue rval)
michael@0 788 {
michael@0 789 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 790 MOZ_ASSERT(bytes);
michael@0 791 MOZ_ASSERT(length);
michael@0 792 MOZ_ASSERT(filename);
michael@0 793
michael@0 794 return jsd_EvaluateUCScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
michael@0 795 bytes, length, filename, lineno,
michael@0 796 false, rval);
michael@0 797 }
michael@0 798
michael@0 799 JSD_PUBLIC_API(bool)
michael@0 800 JSD_EvaluateScriptInStackFrame(JSDContext* jsdc,
michael@0 801 JSDThreadState* jsdthreadstate,
michael@0 802 JSDStackFrameInfo* jsdframe,
michael@0 803 const char *bytes, unsigned length,
michael@0 804 const char *filename, unsigned lineno, JS::MutableHandleValue rval)
michael@0 805 {
michael@0 806 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 807 MOZ_ASSERT(bytes);
michael@0 808 MOZ_ASSERT(length);
michael@0 809 MOZ_ASSERT(filename);
michael@0 810
michael@0 811 return jsd_EvaluateScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
michael@0 812 bytes, length,
michael@0 813 filename, lineno, true, rval);
michael@0 814 }
michael@0 815
michael@0 816 JSD_PUBLIC_API(bool)
michael@0 817 JSD_AttemptScriptInStackFrame(JSDContext* jsdc,
michael@0 818 JSDThreadState* jsdthreadstate,
michael@0 819 JSDStackFrameInfo* jsdframe,
michael@0 820 const char *bytes, unsigned length,
michael@0 821 const char *filename, unsigned lineno, JS::MutableHandleValue rval)
michael@0 822 {
michael@0 823 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 824 MOZ_ASSERT(bytes);
michael@0 825 MOZ_ASSERT(length);
michael@0 826 MOZ_ASSERT(filename);
michael@0 827
michael@0 828 return jsd_EvaluateScriptInStackFrame(jsdc, jsdthreadstate,jsdframe,
michael@0 829 bytes, length,
michael@0 830 filename, lineno, false, rval);
michael@0 831 }
michael@0 832
michael@0 833 JSD_PUBLIC_API(JSString*)
michael@0 834 JSD_ValToStringInStackFrame(JSDContext* jsdc,
michael@0 835 JSDThreadState* jsdthreadstate,
michael@0 836 JSDStackFrameInfo* jsdframe,
michael@0 837 jsval val)
michael@0 838 {
michael@0 839 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 840 return jsd_ValToStringInStackFrame(jsdc, jsdthreadstate, jsdframe, val);
michael@0 841 }
michael@0 842
michael@0 843 JSD_PUBLIC_API(JSDValue*)
michael@0 844 JSD_GetException(JSDContext* jsdc, JSDThreadState* jsdthreadstate)
michael@0 845 {
michael@0 846 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 847 return jsd_GetException(jsdc, jsdthreadstate);
michael@0 848 }
michael@0 849
michael@0 850 extern JSD_PUBLIC_API(bool)
michael@0 851 JSD_SetException(JSDContext* jsdc, JSDThreadState* jsdthreadstate,
michael@0 852 JSDValue* jsdval)
michael@0 853 {
michael@0 854 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 855 return jsd_SetException(jsdc, jsdthreadstate, jsdval);
michael@0 856 }
michael@0 857
michael@0 858 /***************************************************************************/
michael@0 859
michael@0 860 JSD_PUBLIC_API(bool)
michael@0 861 JSD_SetErrorReporter(JSDContext* jsdc,
michael@0 862 JSD_ErrorReporter reporter,
michael@0 863 void* callerdata)
michael@0 864 {
michael@0 865 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 866 return jsd_SetErrorReporter(jsdc, reporter, callerdata);
michael@0 867 }
michael@0 868
michael@0 869 JSD_PUBLIC_API(bool)
michael@0 870 JSD_GetErrorReporter(JSDContext* jsdc,
michael@0 871 JSD_ErrorReporter* reporter,
michael@0 872 void** callerdata)
michael@0 873 {
michael@0 874 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 875 return jsd_GetErrorReporter(jsdc, reporter, callerdata);
michael@0 876 }
michael@0 877
michael@0 878 /***************************************************************************/
michael@0 879
michael@0 880 JSD_PUBLIC_API(bool)
michael@0 881 JSD_IsLockingAndThreadIdSupported()
michael@0 882 {
michael@0 883 #ifdef JSD_THREADSAFE
michael@0 884 return true;
michael@0 885 #else
michael@0 886 return false;
michael@0 887 #endif
michael@0 888 }
michael@0 889
michael@0 890 JSD_PUBLIC_API(JSDStaticLock*)
michael@0 891 JSD_CreateLock()
michael@0 892 {
michael@0 893 #ifdef JSD_THREADSAFE
michael@0 894 return jsd_CreateLock();
michael@0 895 #else
michael@0 896 return (void*)1;
michael@0 897 #endif
michael@0 898 }
michael@0 899
michael@0 900 JSD_PUBLIC_API(void)
michael@0 901 JSD_Lock(JSDStaticLock* lock)
michael@0 902 {
michael@0 903 #ifdef JSD_THREADSAFE
michael@0 904 jsd_Lock(lock);
michael@0 905 #endif
michael@0 906 }
michael@0 907
michael@0 908 JSD_PUBLIC_API(void)
michael@0 909 JSD_Unlock(JSDStaticLock* lock)
michael@0 910 {
michael@0 911 #ifdef JSD_THREADSAFE
michael@0 912 jsd_Unlock(lock);
michael@0 913 #endif
michael@0 914 }
michael@0 915
michael@0 916 JSD_PUBLIC_API(bool)
michael@0 917 JSD_IsLocked(JSDStaticLock* lock)
michael@0 918 {
michael@0 919 #if defined(JSD_THREADSAFE) && defined(DEBUG)
michael@0 920 return jsd_IsLocked(lock);
michael@0 921 #else
michael@0 922 return true;
michael@0 923 #endif
michael@0 924 }
michael@0 925
michael@0 926 JSD_PUBLIC_API(bool)
michael@0 927 JSD_IsUnlocked(JSDStaticLock* lock)
michael@0 928 {
michael@0 929 #if defined(JSD_THREADSAFE) && defined(DEBUG)
michael@0 930 return ! jsd_IsLocked(lock);
michael@0 931 #else
michael@0 932 return true;
michael@0 933 #endif
michael@0 934 }
michael@0 935
michael@0 936 JSD_PUBLIC_API(void*)
michael@0 937 JSD_CurrentThread()
michael@0 938 {
michael@0 939 return JSD_CURRENT_THREAD();
michael@0 940 }
michael@0 941
michael@0 942 /***************************************************************************/
michael@0 943 /* Value and Property Functions */
michael@0 944
michael@0 945 JSD_PUBLIC_API(JSDValue*)
michael@0 946 JSD_NewValue(JSDContext* jsdc, jsval val)
michael@0 947 {
michael@0 948 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 949 return jsd_NewValue(jsdc, val);
michael@0 950 }
michael@0 951
michael@0 952 JSD_PUBLIC_API(void)
michael@0 953 JSD_DropValue(JSDContext* jsdc, JSDValue* jsdval)
michael@0 954 {
michael@0 955 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 956 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 957 jsd_DropValue(jsdc, jsdval);
michael@0 958 }
michael@0 959
michael@0 960 JSD_PUBLIC_API(jsval)
michael@0 961 JSD_GetValueWrappedJSVal(JSDContext* jsdc, JSDValue* jsdval)
michael@0 962 {
michael@0 963 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 964 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 965 return jsd_GetValueWrappedJSVal(jsdc, jsdval);
michael@0 966 }
michael@0 967
michael@0 968 JSD_PUBLIC_API(void)
michael@0 969 JSD_RefreshValue(JSDContext* jsdc, JSDValue* jsdval)
michael@0 970 {
michael@0 971 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 972 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 973 jsd_RefreshValue(jsdc, jsdval);
michael@0 974 }
michael@0 975
michael@0 976 /**************************************************/
michael@0 977
michael@0 978 JSD_PUBLIC_API(bool)
michael@0 979 JSD_IsValueObject(JSDContext* jsdc, JSDValue* jsdval)
michael@0 980 {
michael@0 981 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 982 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 983 return jsd_IsValueObject(jsdc, jsdval);
michael@0 984 }
michael@0 985
michael@0 986 JSD_PUBLIC_API(bool)
michael@0 987 JSD_IsValueNumber(JSDContext* jsdc, JSDValue* jsdval)
michael@0 988 {
michael@0 989 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 990 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 991 return jsd_IsValueNumber(jsdc, jsdval);
michael@0 992 }
michael@0 993
michael@0 994 JSD_PUBLIC_API(bool)
michael@0 995 JSD_IsValueInt(JSDContext* jsdc, JSDValue* jsdval)
michael@0 996 {
michael@0 997 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 998 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 999 return jsd_IsValueInt(jsdc, jsdval);
michael@0 1000 }
michael@0 1001
michael@0 1002 JSD_PUBLIC_API(bool)
michael@0 1003 JSD_IsValueDouble(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1004 {
michael@0 1005 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1006 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1007 return jsd_IsValueDouble(jsdc, jsdval);
michael@0 1008 }
michael@0 1009
michael@0 1010 JSD_PUBLIC_API(bool)
michael@0 1011 JSD_IsValueString(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1012 {
michael@0 1013 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1014 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1015 return jsd_IsValueString(jsdc, jsdval);
michael@0 1016 }
michael@0 1017
michael@0 1018 JSD_PUBLIC_API(bool)
michael@0 1019 JSD_IsValueBoolean(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1020 {
michael@0 1021 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1022 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1023 return jsd_IsValueBoolean(jsdc, jsdval);
michael@0 1024 }
michael@0 1025
michael@0 1026 JSD_PUBLIC_API(bool)
michael@0 1027 JSD_IsValueNull(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1028 {
michael@0 1029 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1030 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1031 return jsd_IsValueNull(jsdc, jsdval);
michael@0 1032 }
michael@0 1033
michael@0 1034 JSD_PUBLIC_API(bool)
michael@0 1035 JSD_IsValueVoid(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1036 {
michael@0 1037 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1038 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1039 return jsd_IsValueVoid(jsdc, jsdval);
michael@0 1040 }
michael@0 1041
michael@0 1042 JSD_PUBLIC_API(bool)
michael@0 1043 JSD_IsValuePrimitive(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1044 {
michael@0 1045 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1046 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1047 return jsd_IsValuePrimitive(jsdc, jsdval);
michael@0 1048 }
michael@0 1049
michael@0 1050 JSD_PUBLIC_API(bool)
michael@0 1051 JSD_IsValueFunction(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1052 {
michael@0 1053 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1054 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1055 return jsd_IsValueFunction(jsdc, jsdval);
michael@0 1056 }
michael@0 1057
michael@0 1058 JSD_PUBLIC_API(bool)
michael@0 1059 JSD_IsValueNative(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1060 {
michael@0 1061 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1062 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1063 return jsd_IsValueNative(jsdc, jsdval);
michael@0 1064 }
michael@0 1065
michael@0 1066 /**************************************************/
michael@0 1067
michael@0 1068 JSD_PUBLIC_API(bool)
michael@0 1069 JSD_GetValueBoolean(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1070 {
michael@0 1071 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1072 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1073 return jsd_GetValueBoolean(jsdc, jsdval);
michael@0 1074 }
michael@0 1075
michael@0 1076 JSD_PUBLIC_API(int32_t)
michael@0 1077 JSD_GetValueInt(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1078 {
michael@0 1079 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1080 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1081 return jsd_GetValueInt(jsdc, jsdval);
michael@0 1082 }
michael@0 1083
michael@0 1084 JSD_PUBLIC_API(double)
michael@0 1085 JSD_GetValueDouble(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1086 {
michael@0 1087 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1088 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1089 return jsd_GetValueDouble(jsdc, jsdval);
michael@0 1090 }
michael@0 1091
michael@0 1092 JSD_PUBLIC_API(JSString*)
michael@0 1093 JSD_GetValueString(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1094 {
michael@0 1095 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1096 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1097 return jsd_GetValueString(jsdc, jsdval);
michael@0 1098 }
michael@0 1099
michael@0 1100 JSD_PUBLIC_API(JSString *)
michael@0 1101 JSD_GetValueFunctionId(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1102 {
michael@0 1103 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1104 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1105 return jsd_GetValueFunctionId(jsdc, jsdval);
michael@0 1106 }
michael@0 1107
michael@0 1108 JSD_PUBLIC_API(JSFunction*)
michael@0 1109 JSD_GetValueFunction(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1110 {
michael@0 1111 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1112 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1113 return jsd_GetValueFunction(jsdc, jsdval);
michael@0 1114 }
michael@0 1115
michael@0 1116 /**************************************************/
michael@0 1117
michael@0 1118 JSD_PUBLIC_API(unsigned)
michael@0 1119 JSD_GetCountOfProperties(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1120 {
michael@0 1121 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1122 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1123 return jsd_GetCountOfProperties(jsdc, jsdval);
michael@0 1124 }
michael@0 1125
michael@0 1126 JSD_PUBLIC_API(JSDProperty*)
michael@0 1127 JSD_IterateProperties(JSDContext* jsdc, JSDValue* jsdval, JSDProperty **iterp)
michael@0 1128 {
michael@0 1129 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1130 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1131 MOZ_ASSERT(iterp);
michael@0 1132 return jsd_IterateProperties(jsdc, jsdval, iterp);
michael@0 1133 }
michael@0 1134
michael@0 1135 JSD_PUBLIC_API(JSDProperty*)
michael@0 1136 JSD_GetValueProperty(JSDContext* jsdc, JSDValue* jsdval, JSString* name)
michael@0 1137 {
michael@0 1138 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1139 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1140 MOZ_ASSERT(name);
michael@0 1141 return jsd_GetValueProperty(jsdc, jsdval, name);
michael@0 1142 }
michael@0 1143
michael@0 1144 JSD_PUBLIC_API(JSDValue*)
michael@0 1145 JSD_GetValuePrototype(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1146 {
michael@0 1147 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1148 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1149 return jsd_GetValuePrototype(jsdc, jsdval);
michael@0 1150 }
michael@0 1151
michael@0 1152 JSD_PUBLIC_API(JSDValue*)
michael@0 1153 JSD_GetValueParent(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1154 {
michael@0 1155 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1156 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1157 return jsd_GetValueParent(jsdc, jsdval);
michael@0 1158 }
michael@0 1159
michael@0 1160 JSD_PUBLIC_API(JSDValue*)
michael@0 1161 JSD_GetValueConstructor(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1162 {
michael@0 1163 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1164 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1165 return jsd_GetValueConstructor(jsdc, jsdval);
michael@0 1166 }
michael@0 1167
michael@0 1168 JSD_PUBLIC_API(const char*)
michael@0 1169 JSD_GetValueClassName(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1170 {
michael@0 1171 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1172 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1173 return jsd_GetValueClassName(jsdc, jsdval);
michael@0 1174 }
michael@0 1175
michael@0 1176 JSD_PUBLIC_API(JSDScript*)
michael@0 1177 JSD_GetScriptForValue(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1178 {
michael@0 1179 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1180 return jsd_GetScriptForValue(jsdc, jsdval);
michael@0 1181 }
michael@0 1182 /**************************************************/
michael@0 1183
michael@0 1184 JSD_PUBLIC_API(void)
michael@0 1185 JSD_DropProperty(JSDContext* jsdc, JSDProperty* jsdprop)
michael@0 1186 {
michael@0 1187 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1188 JSD_ASSERT_VALID_PROPERTY(jsdprop);
michael@0 1189 jsd_DropProperty(jsdc, jsdprop);
michael@0 1190 }
michael@0 1191
michael@0 1192
michael@0 1193 JSD_PUBLIC_API(JSDValue*)
michael@0 1194 JSD_GetPropertyName(JSDContext* jsdc, JSDProperty* jsdprop)
michael@0 1195 {
michael@0 1196 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1197 JSD_ASSERT_VALID_PROPERTY(jsdprop);
michael@0 1198 return jsd_GetPropertyName(jsdc, jsdprop);
michael@0 1199 }
michael@0 1200
michael@0 1201 JSD_PUBLIC_API(JSDValue*)
michael@0 1202 JSD_GetPropertyValue(JSDContext* jsdc, JSDProperty* jsdprop)
michael@0 1203 {
michael@0 1204 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1205 JSD_ASSERT_VALID_PROPERTY(jsdprop);
michael@0 1206 return jsd_GetPropertyValue(jsdc, jsdprop);
michael@0 1207 }
michael@0 1208
michael@0 1209 JSD_PUBLIC_API(JSDValue*)
michael@0 1210 JSD_GetPropertyAlias(JSDContext* jsdc, JSDProperty* jsdprop)
michael@0 1211 {
michael@0 1212 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1213 JSD_ASSERT_VALID_PROPERTY(jsdprop);
michael@0 1214 return jsd_GetPropertyAlias(jsdc, jsdprop);
michael@0 1215 }
michael@0 1216
michael@0 1217 JSD_PUBLIC_API(unsigned)
michael@0 1218 JSD_GetPropertyFlags(JSDContext* jsdc, JSDProperty* jsdprop)
michael@0 1219 {
michael@0 1220 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1221 JSD_ASSERT_VALID_PROPERTY(jsdprop);
michael@0 1222 return jsd_GetPropertyFlags(jsdc, jsdprop);
michael@0 1223 }
michael@0 1224
michael@0 1225 /**************************************************/
michael@0 1226 /* Object Functions */
michael@0 1227
michael@0 1228 JSD_PUBLIC_API(void)
michael@0 1229 JSD_LockObjectSubsystem(JSDContext* jsdc)
michael@0 1230 {
michael@0 1231 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1232 JSD_LOCK_OBJECTS(jsdc);
michael@0 1233 }
michael@0 1234
michael@0 1235 JSD_PUBLIC_API(void)
michael@0 1236 JSD_UnlockObjectSubsystem(JSDContext* jsdc)
michael@0 1237 {
michael@0 1238 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1239 JSD_UNLOCK_OBJECTS(jsdc);
michael@0 1240 }
michael@0 1241
michael@0 1242 JSD_PUBLIC_API(JSDObject*)
michael@0 1243 JSD_IterateObjects(JSDContext* jsdc, JSDObject** iterp)
michael@0 1244 {
michael@0 1245 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1246 return jsd_IterateObjects(jsdc, iterp);
michael@0 1247 }
michael@0 1248
michael@0 1249 JSD_PUBLIC_API(JSObject*)
michael@0 1250 JSD_GetWrappedObject(JSDContext* jsdc, JSDObject* jsdobj)
michael@0 1251 {
michael@0 1252 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1253 JSD_ASSERT_VALID_OBJECT(jsdobj);
michael@0 1254 return jsd_GetWrappedObject(jsdc, jsdobj);
michael@0 1255
michael@0 1256 }
michael@0 1257
michael@0 1258 JSD_PUBLIC_API(const char*)
michael@0 1259 JSD_GetObjectNewURL(JSDContext* jsdc, JSDObject* jsdobj)
michael@0 1260 {
michael@0 1261 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1262 JSD_ASSERT_VALID_OBJECT(jsdobj);
michael@0 1263 return jsd_GetObjectNewURL(jsdc, jsdobj);
michael@0 1264 }
michael@0 1265
michael@0 1266 JSD_PUBLIC_API(unsigned)
michael@0 1267 JSD_GetObjectNewLineNumber(JSDContext* jsdc, JSDObject* jsdobj)
michael@0 1268 {
michael@0 1269 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1270 JSD_ASSERT_VALID_OBJECT(jsdobj);
michael@0 1271 return jsd_GetObjectNewLineNumber(jsdc, jsdobj);
michael@0 1272 }
michael@0 1273
michael@0 1274 JSD_PUBLIC_API(const char*)
michael@0 1275 JSD_GetObjectConstructorURL(JSDContext* jsdc, JSDObject* jsdobj)
michael@0 1276 {
michael@0 1277 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1278 JSD_ASSERT_VALID_OBJECT(jsdobj);
michael@0 1279 return jsd_GetObjectConstructorURL(jsdc, jsdobj);
michael@0 1280 }
michael@0 1281
michael@0 1282 JSD_PUBLIC_API(unsigned)
michael@0 1283 JSD_GetObjectConstructorLineNumber(JSDContext* jsdc, JSDObject* jsdobj)
michael@0 1284 {
michael@0 1285 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1286 JSD_ASSERT_VALID_OBJECT(jsdobj);
michael@0 1287 return jsd_GetObjectConstructorLineNumber(jsdc, jsdobj);
michael@0 1288 }
michael@0 1289
michael@0 1290 JSD_PUBLIC_API(const char*)
michael@0 1291 JSD_GetObjectConstructorName(JSDContext* jsdc, JSDObject* jsdobj)
michael@0 1292 {
michael@0 1293 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1294 JSD_ASSERT_VALID_OBJECT(jsdobj);
michael@0 1295 return jsd_GetObjectConstructorName(jsdc, jsdobj);
michael@0 1296 }
michael@0 1297
michael@0 1298 JSD_PUBLIC_API(JSDObject*)
michael@0 1299 JSD_GetJSDObjectForJSObject(JSDContext* jsdc, JSObject* jsobj)
michael@0 1300 {
michael@0 1301 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1302 MOZ_ASSERT(jsobj);
michael@0 1303 return jsd_GetJSDObjectForJSObject(jsdc, jsobj);
michael@0 1304 }
michael@0 1305
michael@0 1306 JSD_PUBLIC_API(JSDObject*)
michael@0 1307 JSD_GetObjectForValue(JSDContext* jsdc, JSDValue* jsdval)
michael@0 1308 {
michael@0 1309 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1310 JSD_ASSERT_VALID_VALUE(jsdval);
michael@0 1311 return jsd_GetObjectForValue(jsdc, jsdval);
michael@0 1312 }
michael@0 1313
michael@0 1314 JSD_PUBLIC_API(JSDValue*)
michael@0 1315 JSD_GetValueForObject(JSDContext* jsdc, JSDObject* jsdobj)
michael@0 1316 {
michael@0 1317 JSD_ASSERT_VALID_CONTEXT(jsdc);
michael@0 1318 JSD_ASSERT_VALID_OBJECT(jsdobj);
michael@0 1319 return jsd_GetValueForObject(jsdc, jsdobj);
michael@0 1320 }

mercurial