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