|  | // Copyright 2015 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 | 
|  |  | 
|  | var ab = new ArrayBuffer(8); | 
|  | var i_view = new Int32Array(ab); | 
|  | i_view[0] = %GetHoleNaNUpper(); | 
|  | i_view[1] = %GetHoleNaNLower(); | 
|  | var f_view = new Float64Array(ab); | 
|  |  | 
|  | var fixed_double_elements = new Float64Array(1); | 
|  | fixed_double_elements[0] = f_view[0]; | 
|  |  | 
|  | function A(src) { | 
|  | this.x = src[0]; | 
|  | }; | 
|  | %PrepareFunctionForOptimization(A); | 
|  | new A(fixed_double_elements); | 
|  | new A(fixed_double_elements); | 
|  |  | 
|  | %OptimizeFunctionOnNextCall(A); | 
|  |  | 
|  | var obj = new A(fixed_double_elements); | 
|  |  | 
|  | function move_x(dst, obj) { | 
|  | dst[0] = obj.x; | 
|  | }; | 
|  | %PrepareFunctionForOptimization(move_x); | 
|  | var doubles = [0.5]; | 
|  | move_x(doubles, obj); | 
|  | move_x(doubles, obj); | 
|  | %OptimizeFunctionOnNextCall(move_x); | 
|  | move_x(doubles, obj); | 
|  | assertTrue(doubles[0] !== undefined); |