|  | // 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 --verify-heap --expose-gc | 
|  |  | 
|  | (function test_keyed_load() { | 
|  | var smi_arr = [0]; | 
|  | smi_arr.load = 42; | 
|  |  | 
|  | var double_arr = [0.5]; | 
|  | double_arr.load = 42; | 
|  |  | 
|  | var obj_arr = [{}]; | 
|  | obj_arr.load = 42; | 
|  |  | 
|  | var arrs = [smi_arr, double_arr, obj_arr]; | 
|  |  | 
|  | var tmp; | 
|  | function do_keyed_load(arrs) { | 
|  | for (var i = 0; i < arrs.length; i++) { | 
|  | var arr = arrs[i]; | 
|  | tmp = arr[0]; | 
|  | } | 
|  | } | 
|  |  | 
|  | var obj = {}; | 
|  | obj.load_boom = smi_arr; | 
|  |  | 
|  | %PrepareFunctionForOptimization(do_keyed_load); | 
|  | do_keyed_load(arrs); | 
|  | do_keyed_load(arrs); | 
|  | %OptimizeFunctionOnNextCall(do_keyed_load); | 
|  | do_keyed_load(arrs); | 
|  |  | 
|  | gc(); | 
|  | })(); | 
|  |  | 
|  | (function test_keyed_store() { | 
|  | var smi_arr = [0]; | 
|  | smi_arr.store = 42; | 
|  |  | 
|  | var double_arr = [0.5]; | 
|  | double_arr.store = 42; | 
|  |  | 
|  | var obj_arr = [{}]; | 
|  | obj_arr.store = 42; | 
|  |  | 
|  | var arrs = [smi_arr, double_arr, obj_arr]; | 
|  |  | 
|  | function do_keyed_store(arrs) { | 
|  | for (var i = 0; i < arrs.length; i++) { | 
|  | var arr = arrs[i]; | 
|  | arr[0] = 0; | 
|  | } | 
|  | } | 
|  |  | 
|  | var obj = {}; | 
|  | obj.store_boom = smi_arr; | 
|  |  | 
|  | %PrepareFunctionForOptimization(do_keyed_store); | 
|  | do_keyed_store(arrs); | 
|  | do_keyed_store(arrs); | 
|  | %OptimizeFunctionOnNextCall(do_keyed_store); | 
|  | do_keyed_store(arrs); | 
|  |  | 
|  | gc(); | 
|  | })(); |