Environment-find-06.js (1527B)
1 // Environment.prototype.find finds bindings that are function arguments, 'let' 2 // bindings, or FunctionExpression names. 3 4 var g = newGlobal({newCompartment: true}); 5 g.eval("function h() { debugger; }"); 6 7 var dbg = new Debugger(g); 8 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 } 21 22 var manyNames = ''; 23 for (var i = 0; i < 2048; i++) 24 manyNames += 'x' + i + ', '; 25 manyNames += 'X'; 26 27 function test2(code) { 28 print(code + " : one"); 29 test1(code.replace('@@', 'X')); 30 print(code + " : many"); 31 test1(code.replace('@@', manyNames)); 32 } 33 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()();'); 38 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 46 test1('(function X() { h(); })();'); 47 test1('(function X(a, b, c) { h(); })(1, 2, 3);');