js/src/jit-test/tests/debug/Environment-find-06.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Environment.prototype.find finds bindings that are function arguments, 'let'
     2 // bindings, or FunctionExpression names.
     4 var g = newGlobal();
     5 g.eval("function h() { debugger; }");
     7 var dbg = new Debugger(g);
     9 function test1(code) {
    10     var hits = 0;
    11     dbg.onDebuggerStatement = function (frame) {
    12         var env = frame.older.environment.find('X');
    13         assertEq(env.names().indexOf('X') !== -1, true);
    14         assertEq(env.type, 'declarative');
    15         assertEq(env.parent !== null, true);
    16         hits++;
    17     };
    18     g.eval(code);
    19     assertEq(hits, 1);
    20 }
    22 var manyNames = '';
    23 for (var i = 0; i < 2048; i++)
    24     manyNames += 'x' + i + ', ';
    25 manyNames += 'X';
    27 function test2(code) {
    28     print(code + " : one");
    29     test1(code.replace('@@', 'X'));
    30     print(code + " : many");
    31     test1(code.replace('@@', manyNames));
    32 }
    34 test2('function f(@@) { h(); }  f(1);');
    35 test2('function f(@@) { h(); }  f();');
    36 test2('function f(@@) { return function g() { h(X); }; }  f(1)();');
    37 test2('function f(@@) { return function g() { h(X); }; }  f()();');
    39 test2('                    { let @@ = 0; h(); }');
    40 test2('function f(a, b, c) { let @@ = 0; h(); }  f(1, 2, 3);');
    41 test2('             { let @@ = 0; { let y = 0; h(); } }');
    42 test2('function f() { let @@ = 0; { let y = 0; h(); } }  f();');
    43 test2('             { for (let @@ = 0; X < 1; X++) h(); }');
    44 test2('function f() { for (let @@ = 0; X < 1; X++) h(); }  f();');
    45 test2('             {        (let (@@ = 0) let (y = 2, z = 3) h()); }');
    46 test2('function f() { return (let (@@ = 0) let (y = 2, z = 3) h()); }  f();');
    48 test1('(function X() { h(); })();');
    49 test1('(function X(a, b, c) { h(); })(1, 2, 3);');

mercurial