diff --git a/js/src/jit-test/jit_test.py b/js/src/jit-test/jit_test.py index cf8ec1ece055..72ea5fd6eb60 100755 --- a/js/src/jit-test/jit_test.py +++ b/js/src/jit-test/jit_test.py @@ -95,6 +95,8 @@ class Test: test.valgrind = options.valgrind elif name == 'mjitalways': test.jitflags.append('-a') + elif name == 'debug': + test.jitflags.append('-d') else: print('warning: unrecognized |jit-test| attribute %s'%part) diff --git a/js/src/jit-test/tests/basic/testBug552248.js b/js/src/jit-test/tests/basic/testBug552248.js index 28782b665bb3..94aef6a148a5 100644 --- a/js/src/jit-test/tests/basic/testBug552248.js +++ b/js/src/jit-test/tests/basic/testBug552248.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); var a = new Array(); diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-call-newvar.js b/js/src/jit-test/tests/jaeger/bug563000/eif-call-newvar.js index 59b0dfb19ac9..eafcaa07610c 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-call-newvar.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-call-newvar.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); function callee() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-call-typechange.js b/js/src/jit-test/tests/jaeger/bug563000/eif-call-typechange.js index 3870b57dea9f..238dbeedc340 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-call-typechange.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-call-typechange.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); function callee() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-call.js b/js/src/jit-test/tests/jaeger/bug563000/eif-call.js index b28c66a8d7e3..73dd3674a6fd 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-call.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-call.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); function callee() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-getter-newvar.js b/js/src/jit-test/tests/jaeger/bug563000/eif-getter-newvar.js index 21fbbf7f52cb..d55e706a9839 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-getter-newvar.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-getter-newvar.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); this.__defineGetter__("someProperty", function () { evalInFrame(1, "var x = 'success'"); }); diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-getter-typechange.js b/js/src/jit-test/tests/jaeger/bug563000/eif-getter-typechange.js index 0e9480d369ad..914b19c23e15 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-getter-typechange.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-getter-typechange.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); this.__defineGetter__("someProperty", function () { evalInFrame(1, "var x = 'success'"); }); diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-getter.js b/js/src/jit-test/tests/jaeger/bug563000/eif-getter.js index 5127beacd7f7..a1631ccd36cb 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-getter.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-getter.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); this.__defineGetter__("someProperty", function () { evalInFrame(1, "x = 'success'"); }); diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-trap-newvar.js b/js/src/jit-test/tests/jaeger/bug563000/eif-trap-newvar.js index aa2906db36e6..fb048587faf9 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-trap-newvar.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-trap-newvar.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); function nop(){} diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-trap-typechange.js b/js/src/jit-test/tests/jaeger/bug563000/eif-trap-typechange.js index 3caa1d3160d2..4028293f08b8 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-trap-typechange.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-trap-typechange.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); function nop(){} diff --git a/js/src/jit-test/tests/jaeger/bug563000/eif-trap.js b/js/src/jit-test/tests/jaeger/bug563000/eif-trap.js index 1d54ec7341c1..43d013da9358 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/eif-trap.js +++ b/js/src/jit-test/tests/jaeger/bug563000/eif-trap.js @@ -1,4 +1,4 @@ -// |jit-test| mjitalways +// |jit-test| mjitalways;debug setDebug(true); function nop(){} diff --git a/js/src/jit-test/tests/jaeger/bug563000/simple-trap-1.js b/js/src/jit-test/tests/jaeger/bug563000/simple-trap-1.js index b42c84fa8454..ef77a86e5304 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/simple-trap-1.js +++ b/js/src/jit-test/tests/jaeger/bug563000/simple-trap-1.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); var x = "failure"; function main() { x = "success"; } diff --git a/js/src/jit-test/tests/jaeger/bug563000/simple-trap-2.js b/js/src/jit-test/tests/jaeger/bug563000/simple-trap-2.js index 675fdcd79a02..c12fdff984c6 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/simple-trap-2.js +++ b/js/src/jit-test/tests/jaeger/bug563000/simple-trap-2.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); var x = "notset"; function main() { x = "failure"; } diff --git a/js/src/jit-test/tests/jaeger/bug563000/simple-untrap.js b/js/src/jit-test/tests/jaeger/bug563000/simple-untrap.js index 2f89f58bc3dd..687802127162 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/simple-untrap.js +++ b/js/src/jit-test/tests/jaeger/bug563000/simple-untrap.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); var x = "notset"; function main() { x = "success"; } diff --git a/js/src/jit-test/tests/jaeger/bug563000/test-debugger-1.js b/js/src/jit-test/tests/jaeger/bug563000/test-debugger-1.js index 19c76feb1536..5ba1bf681685 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/test-debugger-1.js +++ b/js/src/jit-test/tests/jaeger/bug563000/test-debugger-1.js @@ -1,3 +1,4 @@ +// |jit-test| debug var result = "unset"; function main() { result = "failure"; diff --git a/js/src/jit-test/tests/jaeger/bug563000/test-debugger-2.js b/js/src/jit-test/tests/jaeger/bug563000/test-debugger-2.js index ff3b9e3185e2..291d1819da11 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/test-debugger-2.js +++ b/js/src/jit-test/tests/jaeger/bug563000/test-debugger-2.js @@ -1,3 +1,4 @@ +// |jit-test| debug function main() { debugger; return "failure"; diff --git a/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-1.js b/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-1.js index 9e85e26cef52..5288ab39ee3a 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-1.js +++ b/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-1.js @@ -1,3 +1,4 @@ +// |jit-test| debug var result1 = "unset"; var result2 = "failure"; function main() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-2.js b/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-2.js index 053f37aeffda..cf2b08d87f2a 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-2.js +++ b/js/src/jit-test/tests/jaeger/bug563000/test-throwhook-2.js @@ -1,3 +1,4 @@ +// |jit-test| debug function main() { try { throw "something"; diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-1.js b/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-1.js index 1d19aeebeb11..09ae0db40423 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-1.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-1.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); function main() { return "failure"; diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-2.js b/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-2.js index b2b516826a9e..b318e79f11bc 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-2.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-force-return-2.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); function main() { return 1; diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-inline.js b/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-inline.js index f923504d344a..d66c0c977c92 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-inline.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-inline.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; function main() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-ool.js b/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-ool.js index 48eb377f52cd..5f0f41b6be20 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-ool.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-from-add-ool.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; function main() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-own-callsite.js b/js/src/jit-test/tests/jaeger/bug563000/trap-own-callsite.js index 18378b7808f7..319ca3680d89 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-own-callsite.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-own-callsite.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; function myparent(nested) { diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-parent-from-trap.js b/js/src/jit-test/tests/jaeger/bug563000/trap-parent-from-trap.js index d6ded288128c..2b4653e7cadc 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-parent-from-trap.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-parent-from-trap.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-parent.js b/js/src/jit-test/tests/jaeger/bug563000/trap-parent.js index 2209f946af97..2baeb08b627f 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-parent.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-parent.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; function child() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-self-as-parent.js b/js/src/jit-test/tests/jaeger/bug563000/trap-self-as-parent.js index 65d3e73135e6..16c9bd0a9403 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-self-as-parent.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-self-as-parent.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-self-from-trap.js b/js/src/jit-test/tests/jaeger/bug563000/trap-self-from-trap.js index 8a9caaaafda4..ef5b3f53a97b 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-self-from-trap.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-self-from-trap.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; diff --git a/js/src/jit-test/tests/jaeger/bug563000/trap-self.js b/js/src/jit-test/tests/jaeger/bug563000/trap-self.js index 9b94fd1c8cca..5f8e11e97a45 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/trap-self.js +++ b/js/src/jit-test/tests/jaeger/bug563000/trap-self.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; function main() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/untrap-own-trapsite.js b/js/src/jit-test/tests/jaeger/bug563000/untrap-own-trapsite.js index e4dd9d7dc973..db5c2f50b792 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/untrap-own-trapsite.js +++ b/js/src/jit-test/tests/jaeger/bug563000/untrap-own-trapsite.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; function child() { diff --git a/js/src/jit-test/tests/jaeger/bug563000/untrap-self.js b/js/src/jit-test/tests/jaeger/bug563000/untrap-self.js index 4c18db52e8ed..b4b80d1a8dfe 100644 --- a/js/src/jit-test/tests/jaeger/bug563000/untrap-self.js +++ b/js/src/jit-test/tests/jaeger/bug563000/untrap-self.js @@ -1,3 +1,4 @@ +// |jit-test| debug setDebug(true); x = "notset"; function main() { diff --git a/js/src/jsdbgapi.cpp b/js/src/jsdbgapi.cpp index 31e007148f19..dc8dc803eda9 100644 --- a/js/src/jsdbgapi.cpp +++ b/js/src/jsdbgapi.cpp @@ -145,6 +145,9 @@ CompartmentHasLiveScripts(JSCompartment *comp) JS_FRIEND_API(JSBool) JS_SetDebugModeForCompartment(JSContext *cx, JSCompartment *comp, JSBool debug) { + if (comp->debugMode == debug) + return JS_TRUE; + // This should only be called when no scripts are live. It would even be // incorrect to discard just the non-live scripts' JITScripts because they // might share ICs with live scripts (bug 632343). diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 9605ba770829..eeb0f892fff1 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -1745,9 +1745,16 @@ SetDebug(JSContext *cx, uintN argc, jsval *vp) JSSMSG_NOT_ENOUGH_ARGS, "setDebug"); return JS_FALSE; } + + /* + * Debug mode can only be set when there is no JS code executing on the + * stack. Unfortunately, that currently means that this call will fail + * unless debug mode is already set to what you're trying to set it to. + * In the future, this restriction may be lifted. + */ - JS_SetDebugMode(cx, JSVAL_TO_BOOLEAN(argv[0])); - JS_SET_RVAL(cx, vp, JSVAL_VOID); + JSBool rv = JS_SetDebugMode(cx, JSVAL_TO_BOOLEAN(argv[0])); + JS_SET_RVAL(cx, vp, rv ? JSVAL_TRUE : JSVAL_FALSE); return JS_TRUE; }