14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Copyright 2012 the V8 project authors. All rights reserved.
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Redistribution and use in source and binary forms, with or without
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// modification, are permitted provided that the following conditions are
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// met:
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//     * Redistributions of source code must retain the above copyright
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//       notice, this list of conditions and the following disclaimer.
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//     * Redistributions in binary form must reproduce the above
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//       copyright notice, this list of conditions and the following
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//       disclaimer in the documentation and/or other materials provided
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//       with the distribution.
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//     * Neither the name of Google Inc. nor the names of its
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//       contributors may be used to endorse or promote products derived
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//       from this software without specific prior written permission.
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
211(// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25B// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// Flags: --allow-natives-syntax
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project(function ApplyArgumentsDeoptInReceiverMapCheck() {
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  function invoker(h, r) {
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return function XXXXX() {
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      var res = h.apply({ fffffff : r(this) }, arguments);
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      return res;
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    };
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  var y = invoker(m, selfOf);
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  function selfOf(c) {
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    var sssss = c.self_;
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return sssss;
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  function m() {
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return this.fffffff;
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  y.apply({ self_ : 3 });
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  y.apply({ self_ : 3 });
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  y.apply({ self_ : 3 });
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  %OptimizeFunctionOnNextCall(y);
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  assertEquals(y.apply({ self_ : 3, uuu : 4 }), 3);
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project})();
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project(function ApplyArgumentsDeoptInReceiverExplicit() {
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  function f() { return this + 21; }
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  function deopt() {
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    %DeoptimizeFunction(XXXXX);
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return 21;
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  function XXXXX() {
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return f.apply(deopt(), arguments);
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  };
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  XXXXX();
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  XXXXX();
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  XXXXX();
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  %OptimizeFunctionOnNextCall(XXXXX);
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  assertEquals(42, XXXXX());
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project})();
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project