apply_to_call4.js revision 877:cf4d2252d444
1251881Speter/* 2251881Speter * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. 3251881Speter * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4251881Speter * 5251881Speter * This code is free software; you can redistribute it and/or modify it 6251881Speter * under the terms of the GNU General Public License version 2 only, as 7251881Speter * published by the Free Software Foundation. 8251881Speter * 9251881Speter * This code is distributed in the hope that it will be useful, but WITHOUT 10251881Speter * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11251881Speter * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12251881Speter * version 2 for more details (a copy is included in the LICENSE file that 13251881Speter * accompanied this code). 14251881Speter * 15251881Speter * You should have received a copy of the GNU General Public License version 16251881Speter * 2 along with this work; if not, write to the Free Software Foundation, 17251881Speter * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18251881Speter * 19251881Speter * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20251881Speter * or visit www.oracle.com if you need additional information or have any 21251881Speter * questions. 22251881Speter */ 23251881Speter 24251881Speter/** 25251881Speter * apply_to_call4.js - various escaping args patterns that prevent the optimization from being applied 26251881Speter * calling call) 27251881Speter * 28251881Speter * @test 29251881Speter * @run 30251881Speter */ 31251881Speter 32251881Speterprint("start"); 33251881Speter 34251881Spetervar x = { 35251881Speter a : 0, 36289166Speter b : 0, 37251881Speter c : 0, 38251881Speter initialize : function(x,y,z) { 39299742Sdim this.a = x; 40269847Speter this.b = y; 41251881Speter this.c = z; 42251881Speter } 43251881Speter}; 44251881Speter 45251881Speterfunction f(x) { 46251881Speter print("this is a black hole - arguments escape"); 47251881Speter} 48251881Speter 49299742Sdimfunction test() { 50299742Sdim f(arguments); 51251881Speter x.initialize.apply(x, arguments); 52251881Speter} 53251881Speter 54251881Spetertest(4711,23,17); 55251881Speterprint(x.a); 56251881Speterprint(x.b); 57251881Speterprint(x.c); 58251881Speter 59251881Speterfunction test2() { 60269847Speter arguments[0] = 17; 61251881Speter x.initialize.apply(x, arguments); 62251881Speter} 63251881Speter 64251881Spetertest2(1,2,3); 65251881Speterprint(x.a); 66251881Speterprint(x.b); 67251881Speterprint(x.c); 68251881Speter 69251881Speterfunction test3() { 70299742Sdim var escape = arguments[0]; 71251881Speter f(escape); 72251881Speter x.initialize.apply(x, arguments); 73251881Speter} 74251881Speter 75251881Spetertest3("alpha", "beta", "gamma"); 76251881Speterprint(x.a); 77251881Speterprint(x.b); 78251881Speterprint(x.c); 79251881Speter 80251881Speterfunction test4() { 81251881Speter var escape = arguments.length; 82251881Speter f(escape); 83251881Speter x.initialize.apply(x, arguments); 84251881Speter} 85251881Speter 86251881Spetertest4(1.2, 2.3, 3.4); 87251881Speterprint(x.a); 88251881Speterprint(x.b); 89251881Speterprint(x.c); 90251881Speter 91251881Speterfunction test5() { 92309512Speter x.initialize.apply(x, arguments, 17); 93251881Speter} 94251881Speter 95251881Speterprint("test 5 done"); 96251881Spetertest5(11, 22); 97251881Speterprint("a="+typeof(x.a)); 98251881Speterprint(x.b); 99251881Speterprint(x.c); 100251881Speter 101251881Speterprint("Now it's time for transforms"); 102251881Speter 103251881Speterfunction test6() { 104269847Speter x.initialize.apply(x, arguments); 105251881Speter} 106251881Speter 107251881Spetertest6(19, 20, 21); 108251881Speterprint(x.a); 109251881Speterprint(x.b); 110251881Speterprint(x.c); 111251881Speter 112251881Speterfunction test7() { 113251881Speter x.initialize.apply(x, arguments); 114251881Speter} 115251881Speter 116251881Spetertest7(1, 2.2, 17, 18); 117251881Speterprint(x.a); 118251881Speterprint(x.b); 119251881Speterprint(x.c); 120251881Speter 121251881Speterprint("Should have transformed"); 122251881Speter 123251881Speterfunction test8() { 124251881Speter var apply = f; 125299742Sdim x.initialize.apply(x, arguments); 126299742Sdim} 127251881Speter 128251881Spetertest8(7,8,9); 129299742Sdimprint(x.a); 130251881Speterprint(x.b); 131251881Speterprint(x.c); 132299742Sdim