tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

onExceptionUnwind-03.js (1314B)


      1 // The onExceptionUnwind hook is called multiple times as the stack unwinds.
      2 
      3 var g = newGlobal({newCompartment: true});
      4 g.debuggeeGlobal = this;
      5 g.dbg = null;
      6 g.eval("(" + function () {
      7        dbg = new Debugger(debuggeeGlobal);
      8        dbg.onExceptionUnwind = function (frame, exc) {
      9            assertEq(frame instanceof Debugger.Frame, true);
     10            assertEq(exc instanceof Debugger.Object, true);
     11            var s = '!';
     12            for (var f = frame; f; f = f.older)
     13                if (f.type === "call")
     14                    s += f.callee.name;
     15            s += ', ';
     16            debuggeeGlobal.log += s;
     17        };
     18    } + ")();");
     19 
     20 var log;
     21 
     22 function k() {
     23    try {
     24        throw new Error("oops");  // hook call 1
     25    } finally {
     26        log += 'k-finally, ';
     27    } // hook call 2
     28 }
     29 
     30 function j() {
     31    k();  // hook call 3
     32    log += 'j-unreached, ';
     33 }
     34 
     35 function h() {
     36    try {
     37        j();  // hook call 4
     38        log += 'h-unreached, ';
     39    } catch (exc) {
     40        log += 'h-catch, ';
     41        throw exc; // hook call 5
     42    }
     43 }
     44 
     45 function f() {
     46    try {
     47        h(); // hook call 6
     48    } catch (exc) {
     49        log += 'f-catch, ';
     50    }
     51    log += 'f-after, ';
     52 }
     53 
     54 log = '';
     55 f();
     56 g.dbg.enabled = false;
     57 assertEq(log, '!kjhf, k-finally, !kjhf, !jhf, !hf, h-catch, !hf, !f, f-catch, f-after, ');