|  | // Copyright 2017 the V8 project authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Flags: --allow-natives-syntax | 
|  |  | 
|  | (function() { | 
|  | function doShift(a) { | 
|  | return a.shift(); | 
|  | }; | 
|  | %PrepareFunctionForOptimization(doShift); | 
|  | function test() { | 
|  | var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; | 
|  | assertEquals(0, doShift(a)); | 
|  | assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], a); | 
|  | } | 
|  |  | 
|  | test(); | 
|  | test(); | 
|  | %OptimizeFunctionOnNextCall(doShift); | 
|  | test(); | 
|  | })(); | 
|  |  | 
|  | (function() { | 
|  | function doShift(a) { | 
|  | return a.shift(); | 
|  | }; | 
|  | %PrepareFunctionForOptimization(doShift); | 
|  | function test() { | 
|  | var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.1]; | 
|  | assertEquals(0, doShift(a)); | 
|  | assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.1], a); | 
|  | } | 
|  |  | 
|  | test(); | 
|  | test(); | 
|  | %OptimizeFunctionOnNextCall(doShift); | 
|  | test(); | 
|  | })(); | 
|  |  | 
|  | (function() { | 
|  | function doShift(a) { | 
|  | return a.shift(); | 
|  | }; | 
|  | %PrepareFunctionForOptimization(doShift); | 
|  | function test() { | 
|  | var a = [, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.1]; | 
|  | assertEquals(undefined, doShift(a)); | 
|  | assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.1], a); | 
|  | } | 
|  |  | 
|  | test(); | 
|  | test(); | 
|  | %OptimizeFunctionOnNextCall(doShift); | 
|  | test(); | 
|  | })(); | 
|  |  | 
|  | (function() { | 
|  | function doShift(a) { | 
|  | return a.shift(); | 
|  | }; | 
|  | %PrepareFunctionForOptimization(doShift); | 
|  | function test() { | 
|  | var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, '16']; | 
|  | assertEquals(0, doShift(a)); | 
|  | assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, '16'], a); | 
|  | } | 
|  |  | 
|  | test(); | 
|  | test(); | 
|  | %OptimizeFunctionOnNextCall(doShift); | 
|  | test(); | 
|  | })(); |