133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Redistribution and use in source and binary forms, with or without 333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// modification, are permitted provided that the following conditions are 433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// met: 533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// 633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// * Redistributions of source code must retain the above copyright 733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// notice, this list of conditions and the following disclaimer. 833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// * Redistributions in binary form must reproduce the above 933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// copyright notice, this list of conditions and the following 1033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// disclaimer in the documentation and/or other materials provided 1133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// with the distribution. 1233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// * Neither the name of Google Inc. nor the names of its 1333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// contributors may be used to endorse or promote products derived 1433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// from this software without specific prior written permission. 1533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// 1633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 2833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Flags: --expose-debug-as debug --expose-natives-as=builtins 2933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// Check that the ScopeIterator can properly recreate the scope at 3133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org// every point when stepping through functions. 3233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgvar Debug = debug.Debug; 3433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfunction listener(event, exec_state, event_data, data) { 3633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if (event == Debug.DebugEvent.Break) { 3733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org // Access scope details. 3833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org var scope_count = exec_state.frame().scopeCount(); 3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for (var i = 0; i < scope_count; i++) { 4033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org var scope = exec_state.frame().scope(i); 4133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org // assertTrue(scope.isScope()); 4233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org scope.scopeType(); 4333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org scope.scopeObject(); 4433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 4533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org // Do steps until we reach the global scope again. 4733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if (true) { 4833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org exec_state.prepareStep(Debug.StepAction.StepInMin, 1); 4933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 5033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 5133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org} 5233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 5333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgDebug.setListener(listener); 5433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 5533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgvar q = 42; 5633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgvar prefixes = [ "debugger; ", 5733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "if (false) { try { throw 0; } catch(x) { return x; } }; debugger; " ]; 5833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgvar bodies = [ "1", 5933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "1 ", 6033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "1;", 6133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "1; ", 6233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "q", 6333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "q ", 6433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "q;", 6533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "q; ", 6633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "try { throw 'stuff' } catch (e) { e = 1; }", 6733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "try { throw 'stuff' } catch (e) { e = 1; } ", 6833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "try { throw 'stuff' } catch (e) { e = 1; };", 6933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "try { throw 'stuff' } catch (e) { e = 1; }; " ]; 7033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 7133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 7233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfunction test9() { 7333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org debugger; 7433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for (var i = 0; i < prefixes.length; ++i) { 7533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org var pre = prefixes[i]; 7633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for (var j = 0; j < bodies.length; ++j) { 7733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org var body = bodies[j]; 7833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org eval(pre + body); 7933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org eval("'use strict'; " + pre + body); 8033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 8133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 8233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org} 8333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgtest9(); 84