mirror of
https://github.com/nodejs/node.git
synced 2025-05-15 12:45:25 +00:00

PR-URL: https://github.com/nodejs/node/pull/49639 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
// 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.
|
|
|
|
// This test fails without defeating TDZ check elision because 'return x;'
|
|
// below, without a ThrowReferenceErrorIfHole bytecode, becomes a return
|
|
// position breakpoint. Return position breakpoints can only inspect the
|
|
// function scope because their source position is always at the end of the
|
|
// function.
|
|
|
|
function* serialize() {
|
|
debugger;
|
|
switch (0) {
|
|
case 0:
|
|
let x = 1; // Defeat TDZ check elision
|
|
case 1:
|
|
return x; // Check scopes
|
|
}
|
|
}
|
|
|
|
let exception = null;
|
|
let step_count = 0;
|
|
let scopes_checked = false;
|
|
|
|
function listener(event, exec_state, event_data, data) {
|
|
if (event != Debug.DebugEvent.Break) return;
|
|
try {
|
|
if (exec_state.frame().sourceLineText().includes("Check scopes")) {
|
|
let expected = [ debug.ScopeType.Block,
|
|
debug.ScopeType.Local,
|
|
debug.ScopeType.Script,
|
|
debug.ScopeType.Global ];
|
|
for (let i = 0; i < exec_state.frame().scopeCount(); i++) {
|
|
assertEquals(expected[i], exec_state.frame().scope(i).scopeType());
|
|
}
|
|
scopes_checked = true;
|
|
}
|
|
if (step_count++ < 3) exec_state.prepareStep(Debug.StepAction.StepOver);
|
|
} catch (e) {
|
|
exception = e;
|
|
print(e, e.stack);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let Debug = debug.Debug;
|
|
Debug.setListener(listener);
|
|
|
|
let gen = serialize();
|
|
gen.next();
|
|
|
|
Debug.setListener(null);
|
|
assertNull(exception);
|
|
assertEquals(4, step_count);
|
|
assertTrue(scopes_checked);
|