tor-browser

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

bug786114.js (952B)


      1 let expected = 'o!o!o!';
      2 let actual = '';
      3 
      4 // g is a function that needs an implicit |this| if called within a |with|
      5 // statement.  If we fail to provide that implicit |this|, it will append
      6 // "[object global]" instead of "o!".
      7 let o = {
      8  g: function() { actual += this.toString(); },
      9  toString: function() { return "o!"; }
     10 }
     11 
     12 // g's presence within the |with| is detected by simple tracking of |with|s
     13 // during parsing.
     14 with (o) {
     15  (function() { g(); })();
     16 }
     17 
     18 // The eval() defeats the tracking of |with| during parsing.  Instead, g's
     19 // presence within the |with| is detected by looking at the scopeChain of the
     20 // ParseContext.
     21 with (o) {
     22  eval("(function() { g(); })()");
     23 }
     24 
     25 // This is like the above case, but the knowledge of the |with| presence must
     26 // be inherited by the inner function.  This is the case that was missed in bug
     27 // 786114.
     28 with (o) {
     29  eval("(function() { (function() { g(); })(); })()");
     30 }
     31 
     32 assertEq(actual, expected);