14954674151afa960af66efb4831df06bde727333yangguo@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 24954674151afa960af66efb4831df06bde727333yangguo@chromium.org// Redistribution and use in source and binary forms, with or without 34954674151afa960af66efb4831df06bde727333yangguo@chromium.org// modification, are permitted provided that the following conditions are 44954674151afa960af66efb4831df06bde727333yangguo@chromium.org// met: 54954674151afa960af66efb4831df06bde727333yangguo@chromium.org// 64954674151afa960af66efb4831df06bde727333yangguo@chromium.org// * Redistributions of source code must retain the above copyright 74954674151afa960af66efb4831df06bde727333yangguo@chromium.org// notice, this list of conditions and the following disclaimer. 84954674151afa960af66efb4831df06bde727333yangguo@chromium.org// * Redistributions in binary form must reproduce the above 94954674151afa960af66efb4831df06bde727333yangguo@chromium.org// copyright notice, this list of conditions and the following 104954674151afa960af66efb4831df06bde727333yangguo@chromium.org// disclaimer in the documentation and/or other materials provided 114954674151afa960af66efb4831df06bde727333yangguo@chromium.org// with the distribution. 124954674151afa960af66efb4831df06bde727333yangguo@chromium.org// * Neither the name of Google Inc. nor the names of its 134954674151afa960af66efb4831df06bde727333yangguo@chromium.org// contributors may be used to endorse or promote products derived 144954674151afa960af66efb4831df06bde727333yangguo@chromium.org// from this software without specific prior written permission. 154954674151afa960af66efb4831df06bde727333yangguo@chromium.org// 164954674151afa960af66efb4831df06bde727333yangguo@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 174954674151afa960af66efb4831df06bde727333yangguo@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 184954674151afa960af66efb4831df06bde727333yangguo@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 194954674151afa960af66efb4831df06bde727333yangguo@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 204954674151afa960af66efb4831df06bde727333yangguo@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 214954674151afa960af66efb4831df06bde727333yangguo@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 224954674151afa960af66efb4831df06bde727333yangguo@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 234954674151afa960af66efb4831df06bde727333yangguo@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 244954674151afa960af66efb4831df06bde727333yangguo@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 254954674151afa960af66efb4831df06bde727333yangguo@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 264954674151afa960af66efb4831df06bde727333yangguo@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274954674151afa960af66efb4831df06bde727333yangguo@chromium.org 284954674151afa960af66efb4831df06bde727333yangguo@chromium.org// Flags: --expose-debug-as debug 29ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org// Flags: --turbo-deoptimization 304954674151afa960af66efb4831df06bde727333yangguo@chromium.org 314954674151afa960af66efb4831df06bde727333yangguo@chromium.org// If a function parameter is forced to be context allocated, 324954674151afa960af66efb4831df06bde727333yangguo@chromium.org// debug evaluate need to resolve it to a context slot instead of 334954674151afa960af66efb4831df06bde727333yangguo@chromium.org// parameter slot on the stack. 344954674151afa960af66efb4831df06bde727333yangguo@chromium.org 354954674151afa960af66efb4831df06bde727333yangguo@chromium.orgvar Debug = debug.Debug; 364954674151afa960af66efb4831df06bde727333yangguo@chromium.org 374954674151afa960af66efb4831df06bde727333yangguo@chromium.orgvar expected; 384954674151afa960af66efb4831df06bde727333yangguo@chromium.orgvar exception = null; 394954674151afa960af66efb4831df06bde727333yangguo@chromium.org 404954674151afa960af66efb4831df06bde727333yangguo@chromium.orgfunction listener(event, exec_state, event_data, data) { 414954674151afa960af66efb4831df06bde727333yangguo@chromium.org if (event != Debug.DebugEvent.Break) return; 424954674151afa960af66efb4831df06bde727333yangguo@chromium.org try { 434954674151afa960af66efb4831df06bde727333yangguo@chromium.org assertEquals(expected, exec_state.frame(0).evaluate('arg').value()); 444954674151afa960af66efb4831df06bde727333yangguo@chromium.org exec_state.frame(0).evaluate('arg = "evaluated";'); 454954674151afa960af66efb4831df06bde727333yangguo@chromium.org } catch (e) { 464954674151afa960af66efb4831df06bde727333yangguo@chromium.org exception = e; 474954674151afa960af66efb4831df06bde727333yangguo@chromium.org } 484954674151afa960af66efb4831df06bde727333yangguo@chromium.org} 494954674151afa960af66efb4831df06bde727333yangguo@chromium.org 504954674151afa960af66efb4831df06bde727333yangguo@chromium.orgDebug.setListener(listener); 514954674151afa960af66efb4831df06bde727333yangguo@chromium.org 524954674151afa960af66efb4831df06bde727333yangguo@chromium.orgfunction f(arg) { 534954674151afa960af66efb4831df06bde727333yangguo@chromium.org expected = arg; 544954674151afa960af66efb4831df06bde727333yangguo@chromium.org debugger; 554954674151afa960af66efb4831df06bde727333yangguo@chromium.org assertEquals("evaluated", arg); 564954674151afa960af66efb4831df06bde727333yangguo@chromium.org 574954674151afa960af66efb4831df06bde727333yangguo@chromium.org arg = "value"; 584954674151afa960af66efb4831df06bde727333yangguo@chromium.org expected = arg; 594954674151afa960af66efb4831df06bde727333yangguo@chromium.org debugger; 604954674151afa960af66efb4831df06bde727333yangguo@chromium.org assertEquals("evaluated", arg); 614954674151afa960af66efb4831df06bde727333yangguo@chromium.org 624954674151afa960af66efb4831df06bde727333yangguo@chromium.org // Forces arg to be context allocated even though a parameter. 634954674151afa960af66efb4831df06bde727333yangguo@chromium.org function g() { arg; } 644954674151afa960af66efb4831df06bde727333yangguo@chromium.org} 654954674151afa960af66efb4831df06bde727333yangguo@chromium.org 664954674151afa960af66efb4831df06bde727333yangguo@chromium.orgf(); 674954674151afa960af66efb4831df06bde727333yangguo@chromium.orgf(1); 684954674151afa960af66efb4831df06bde727333yangguo@chromium.orgf(1, 2); 694954674151afa960af66efb4831df06bde727333yangguo@chromium.org 704954674151afa960af66efb4831df06bde727333yangguo@chromium.orgassertNull(exception); 71