// Copyright 2018 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 Debug = debug.Debug; function test(i) { if (i == 3) { return (function* gen() { yield test(i - 1); })().next().value; } else if (i > 1) { return test(i - 1); } else { debugger; return 5; } } let patch = null, exception = null; Debug.setListener(listener); patch = ['return 5', 'return 3']; assertEquals(5, test(2)); // generator on stack assertEquals(exception, 'LiveEdit failed: BLOCKED_BY_ACTIVE_FUNCTION'); patch = ['return 3', 'return -1']; assertEquals(5, test(5)); // there is running generator assertEquals(exception, 'LiveEdit failed: BLOCKED_BY_ACTIVE_FUNCTION'); Debug.setListener(null); function listener(event) { if (event != Debug.DebugEvent.Break || !patch) return; try { %LiveEditPatchScript(test, Debug.scriptSource(test).replace(patch[0], patch[1])); } catch (e) { exception = e; } patch = null; }