|  | // 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: --opt --no-always-opt --turbo-inlining | 
|  |  | 
|  | var Debug = debug.Debug; | 
|  |  | 
|  | function f1() { | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | function f2() { | 
|  | return 2; | 
|  | } | 
|  |  | 
|  | function f3() { | 
|  | return f1(); | 
|  | } | 
|  |  | 
|  | function f4() { | 
|  | return 4; | 
|  | } | 
|  |  | 
|  |  | 
|  | function optimize(f) { | 
|  | %PrepareFunctionForOptimization(f); | 
|  | f(); | 
|  | f(); | 
|  | %OptimizeFunctionOnNextCall(f); | 
|  | f(); | 
|  | } | 
|  |  | 
|  | optimize(f1); | 
|  | optimize(f2); | 
|  | optimize(f3); | 
|  |  | 
|  | Debug.setListener(function() {}); | 
|  |  | 
|  | assertOptimized(f1); | 
|  | assertOptimized(f2); | 
|  | assertOptimized(f3); | 
|  |  | 
|  | Debug.setBreakPoint(f1, 1); | 
|  |  | 
|  | // Setting break point deoptimizes f1 and f3 (which inlines f1). | 
|  | assertUnoptimized(f1); | 
|  | assertOptimized(f2); | 
|  | assertUnoptimized(f3); | 
|  |  | 
|  | // We can optimize with break points set. | 
|  | optimize(f4); | 
|  | assertOptimized(f4); | 
|  |  | 
|  | Debug.setListener(null); |