|  | // Copyright 2014 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 --block-concurrent-recompilation | 
|  |  | 
|  | function Ctor() { | 
|  | this.a = 1; | 
|  | } | 
|  |  | 
|  | function get_closure() { | 
|  | return function add_field(obj, osr) { | 
|  | obj.c = 3; | 
|  | var x = 0; | 
|  | if (osr) %OptimizeOsr(); | 
|  | for (var i = 0; i < 10; i++) { | 
|  | x = i + 1; | 
|  | } | 
|  | return x; | 
|  | } | 
|  | } | 
|  | var f1 = get_closure(); | 
|  | %PrepareFunctionForOptimization(f1); | 
|  | f1(new Ctor(), false); | 
|  | f1(new Ctor(), false); | 
|  |  | 
|  | %OptimizeFunctionOnNextCall(f1, "concurrent"); | 
|  |  | 
|  | // Kick off concurrent recompilation and OSR. | 
|  | var o = new Ctor(); | 
|  | %PrepareFunctionForOptimization(f1); | 
|  | f1(o, true); | 
|  |  | 
|  | // Flush the optimizing compiler's queue. | 
|  | %NotifyContextDisposed(); | 
|  |  | 
|  | // Trigger deopt. | 
|  | o.c = 2.2; | 
|  |  | 
|  | var f2 = get_closure(); | 
|  | %PrepareFunctionForOptimization(f2); | 
|  | f2(new Ctor(), true); |