16db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 26db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// Redistribution and use in source and binary forms, with or without 36db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// modification, are permitted provided that the following conditions are 46db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// met: 56db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// 66db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// * Redistributions of source code must retain the above copyright 76db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// notice, this list of conditions and the following disclaimer. 86db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// * Redistributions in binary form must reproduce the above 96db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// copyright notice, this list of conditions and the following 106db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// disclaimer in the documentation and/or other materials provided 116db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// with the distribution. 126db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// * Neither the name of Google Inc. nor the names of its 136db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// contributors may be used to endorse or promote products derived 146db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// from this software without specific prior written permission. 156db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// 166db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 176db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 186db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 196db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 206db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 216db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 226db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 236db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 246db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 256db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 266db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 286db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// Flags: --expose-gc 296db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 306db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org// Verify that JSObject::PreventExtensions works for arguments objects. 316db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 326db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.orgtry { 336db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org function make_watcher(name) { } 346db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org var o, p; 356db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org function f(flag) { 366db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org if (flag) { 376db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org o = arguments; 386db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org } else { 396db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org p = arguments; 406db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org o.watch(0, (arguments-1901)('o')); 416db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org p.watch(0, make_watcher('p')); 426db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org p.unwatch(0); 436db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org o.unwatch(0); 446db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org p[0] = 4; 456db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org assertEq(flag, 4); 466db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org } 476db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org } 486db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org f(true); 496db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org f(false); 506db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org reportCompare(true, true); 516db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org} catch(exc1) { } 526db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 536db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.orgtry { 546db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org function __noSuchMethod__() { 556db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org if (anonymous == "1") 566db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org return NaN; 576db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org return __construct__; 586db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org } 596db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org f.p = function() { }; 606db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org Object.freeze(p); 616db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org new new freeze().p; 626db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org reportCompare(0, 0, "ok"); 636db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org} catch(exc2) { } 646db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.org 656db8871df97e7137d11f956af3c772f4f8370761sgjesse@chromium.orggc(); 66