13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 28c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// Redistribution and use in source and binary forms, with or without 38c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// modification, are permitted provided that the following conditions are 48c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// met: 58c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// 68c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// * Redistributions of source code must retain the above copyright 78c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// notice, this list of conditions and the following disclaimer. 88c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// * Redistributions in binary form must reproduce the above 98c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// copyright notice, this list of conditions and the following 108c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// disclaimer in the documentation and/or other materials provided 118c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// with the distribution. 128c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// * Neither the name of Google Inc. nor the names of its 138c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// contributors may be used to endorse or promote products derived 148c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// from this software without specific prior written permission. 158c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// 168c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 178c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 188c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 198c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 208c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 218c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 228c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 238c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 248c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 268c569c4a1286b419597940890e04517bc59eefcdBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278c569c4a1286b419597940890e04517bc59eefcdBen Murdoch 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --allow-natives-syntax 293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 30b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Test function.arguments. 31b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 32b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction A() {} 33b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction B() {} 34b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 35b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction fee(x, y) { 36b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (x == 1) return fee["arg" + "uments"]; 37b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (x == 2) return gee["arg" + "uments"]; 38b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return 42; 39b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 40b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 41b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction gee(x) { return this.f(2 - x, "f"); } 42b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 43b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction foo(x, y) { 44b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (x == 0) return foo["arg" + "uments"]; 45b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (x == 1) return goo["arg" + "uments"]; 46b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return 42; 47b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 48b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 49b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction goo(x) { return this.f(x, "f"); } 50b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 51b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochA.prototype.f = fee; 52b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochA.prototype.g = gee; 53b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 54b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochB.prototype.f = foo; 55b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochB.prototype.g = goo; 56b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 57b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochvar o = new A(); 58b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 59b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction hej(x) { 60b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (x == 0) return o.g(x, "h"); 61b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch if (x == 1) return o.g(x, "h"); 62b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return o.g(x, "z"); 63b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 64b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction opt() { 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch for (var k=0; k<2; k++) { 673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch for (var i=0; i<5; i++) o.g(i, "g"); 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch for (var j=0; j<5; j++) hej(j); 693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %OptimizeFunctionOnNextCall(o.g); 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch %OptimizeFunctionOnNextCall(hej); 72b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 73b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochopt(); 75b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([0, "g"], o.g(0, "g")); 76b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([1, "f"], o.g(1, "g")); 77b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([0, "h"], hej(0)); 78b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([1, "f"], hej(1)); 79b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 80b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdocho = new B(); 81b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochopt(); 83b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([0, "f"], o.g(0, "g")); 84b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([1, "g"], o.g(1, "g")); 85b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([0, "f"], hej(0)); 86b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertArrayEquals([1, "h"], hej(1)); 87