tor-browser

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

regress-181834.js (2848B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 /*
      7 *
      8 * Date:    25 November 2002
      9 * SUMMARY: Testing scope
     10 * See http://bugzilla.mozilla.org/show_bug.cgi?id=181834
     11 *
     12 * This bug only bit in Rhino interpreted mode, when the
     13 * 'compile functions with dynamic scope' feature was set.
     14 *
     15 */
     16 //-----------------------------------------------------------------------------
     17 var UBound = 0;
     18 var BUGNUMBER = 181834;
     19 var summary = 'Testing scope';
     20 var status = '';
     21 var statusitems = [];
     22 var actual = '';
     23 var actualvalues = [];
     24 var expect= '';
     25 var expectedvalues = [];
     26 
     27 
     28 /*
     29 * If N<=0, |outer_d| just gets incremented once,
     30 * so the return value should be 1 in this case.
     31 *
     32 * If N>0, we end up calling inner() N+1 times:
     33 * inner(N), inner(N-1), ... , inner(0).
     34 *
     35 * Each call to inner() increments |outer_d| by 1.
     36 * The last call, inner(0), returns the final value
     37 * of |outer_d|, which should be N+1.
     38 */
     39 function outer(N)
     40 {
     41  var outer_d = 0;
     42  return inner(N);
     43 
     44  function inner(level)
     45  {
     46    outer_d++;
     47 
     48    if (level > 0)
     49      return inner(level - 1);
     50    else
     51      return outer_d;
     52  }
     53 }
     54 
     55 
     56 /*
     57 * This only has meaning in Rhino -
     58 */
     59 setDynamicScope(true);
     60 
     61 /*
     62 * Recompile the function |outer| via eval() in order to
     63 * feel the effect of the dynamic scope mode we have set.
     64 */
     65 var s = outer.toString();
     66 eval(s);
     67 
     68 status = inSection(1);
     69 actual = outer(-5);
     70 expect = 1;
     71 addThis();
     72 
     73 status = inSection(2);
     74 actual = outer(0);
     75 expect = 1;
     76 addThis();
     77 
     78 status = inSection(3);
     79 actual = outer(5);
     80 expect = 6;
     81 addThis();
     82 
     83 
     84 /*
     85 * Sanity check: do same steps with the dynamic flag off
     86 */
     87 setDynamicScope(false);
     88 
     89 /*
     90 * Recompile the function |outer| via eval() in order to
     91 * feel the effect of the dynamic scope mode we have set.
     92 */
     93 eval(s);
     94 
     95 status = inSection(4);
     96 actual = outer(-5);
     97 expect = 1;
     98 addThis();
     99 
    100 status = inSection(5);
    101 actual = outer(0);
    102 expect = 1;
    103 addThis();
    104 
    105 status = inSection(6);
    106 actual = outer(5);
    107 expect = 6;
    108 addThis();
    109 
    110 
    111 
    112 //-----------------------------------------------------------------------------
    113 test();
    114 //-----------------------------------------------------------------------------
    115 
    116 
    117 
    118 function setDynamicScope(flag)
    119 {
    120  if (this.Packages)
    121  {
    122    var cx = this.Packages.org.mozilla.javascript.Context.getCurrentContext();
    123    cx.setCompileFunctionsWithDynamicScope(flag);
    124  }
    125 }
    126 
    127 
    128 function addThis()
    129 {
    130  statusitems[UBound] = status;
    131  actualvalues[UBound] = actual;
    132  expectedvalues[UBound] = expect;
    133  UBound++;
    134 }
    135 
    136 
    137 function test()
    138 {
    139  printBugNumber(BUGNUMBER);
    140  printStatus(summary);
    141 
    142  for (var i=0; i<UBound; i++)
    143  {
    144    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
    145  }
    146 }