// Copyright 2021 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: --sparkplug --allow-natives-syntax function f() { debugger; return 1; } function g() { return f(); // Break } function h() { return g(); } // Ensure FeedbackVector to consider f for inlining. %EnsureFeedbackVectorForFunction(f); %CompileBaseline(g); %PrepareFunctionForOptimization(h); h(); h(); var Debug = debug.Debug; var step_count = 0; var exception = null; function listener(event, exec_state, event_data, data) { if (event != Debug.DebugEvent.Break) return; try { if (step_count == 0) { exec_state.prepareStep(Debug.StepAction.StepOut); } else { assertTrue(exec_state.frame().sourceLineText().includes('Break')); } step_count++; } catch (e) { exception = e; print(e); } } Debug.setListener(listener); %OptimizeFunctionOnNextCall(h); h(); Debug.setListener(null); assertNull(exception); assertEquals(2, step_count);