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