1f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 2f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 3f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org// found in the LICENSE file. 4f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 5f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 6f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgfunction TestFunctionPrototypeSetter() { 7f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var f = function() {}; 8f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var o = {__proto__: f}; 9f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org o.prototype = 42; 10f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertEquals(42, o.prototype); 11f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertTrue(o.hasOwnProperty('prototype')); 12f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 13f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgTestFunctionPrototypeSetter(); 14f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 15f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 16f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgfunction TestFunctionPrototypeSetterOnValue() { 17f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var f = function() {}; 18f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var fp = f.prototype; 19f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org Number.prototype.__proto__ = f; 20f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var n = 42; 21f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var o = {}; 22f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org n.prototype = o; 23f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertEquals(fp, n.prototype); 24f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertEquals(fp, f.prototype); 25f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertFalse(Number.prototype.hasOwnProperty('prototype')); 26f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 27f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgTestFunctionPrototypeSetterOnValue(); 28f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 29f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 30f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgfunction TestArrayLengthSetter() { 31f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var a = [1]; 32f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var o = {__proto__: a}; 33f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org o.length = 2; 34f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertEquals(2, o.length); 35f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertEquals(1, a.length); 36f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertTrue(o.hasOwnProperty('length')); 37f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 38f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgTestArrayLengthSetter(); 39f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 40f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org 41f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgfunction TestArrayLengthSetterOnValue() { 42f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org Number.prototype.__proto__ = [1]; 43f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org var n = 42; 44f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org n.length = 2; 45f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertEquals(1, n.length); 46f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org assertFalse(Number.prototype.hasOwnProperty('length')); 47f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org} 48f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.orgTestArrayLengthSetterOnValue(); 49