diff --git a/js/src/jit-test/jit_test.py b/js/src/jit-test/jit_test.py index cf8ec1ece05..72ea5fd6eb6 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 28782b665bb..94aef6a148a 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 59b0dfb19ac..eafcaa07610 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 3870b57dea9..238dbeedc34 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 b28c66a8d7e..73dd3674a6f 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 21fbbf7f52c..d55e706a983 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 0e9480d369a..914b19c23e1 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 5127beacd7f..a1631ccd36c 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 aa2906db36e..fb048587faf 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 3caa1d3160d..4028293f08b 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 1d54ec7341c..43d013da935 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 b42c84fa845..ef77a86e530 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 675fdcd79a0..c12fdff984c 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 2f89f58bc3d..68780212716 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 19c76feb153..5ba1bf68168 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 ff3b9e3185e..291d1819da1 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 9e85e26cef5..5288ab39ee3 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 053f37aeffd..cf2b08d87f2 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 1d19aeebeb1..09ae0db4042 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 b2b516826a9..b318e79f11b 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 f923504d344..d66c0c977c9 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 48eb377f52c..5f0f41b6be2 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 18378b7808f..319ca3680d8 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 d6ded288128..2b4653e7cad 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 2209f946af9..2baeb08b627 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 65d3e73135e..16c9bd0a940 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 8a9caaaafda..ef5b3f53a97 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 9b94fd1c8cc..5f8e11e97a4 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 e4dd9d7dc97..db5c2f50b79 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 4c18db52e8e..b4b80d1a8df 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 31e007148f1..dc8dc803eda 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 9605ba77082..eeb0f892fff 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; }