@@ -139,12 +139,22 @@ class CodePathInfo {
139139 /** @type {Map<CodePathSegment, CodePathSegmentInfo> } */
140140 this . segmentInfos = new Map ( )
141141 this . resolvedCount = 0
142- /** @type {CodePathSegment[] } */
143- this . allSegments = [ ]
142+ /** @type {Set<CodePathSegment> } */
143+ this . currentSegments = new Set ( )
144+ }
145+
146+ /** @param {CodePathSegment } segment */
147+ onSegmentEnter ( segment ) {
148+ this . currentSegments . add ( segment )
149+ }
150+
151+ /** @param {CodePathSegment } segment */
152+ onSegmentExit ( segment ) {
153+ this . currentSegments . delete ( segment )
144154 }
145155
146156 getCurrentSegmentInfos ( ) {
147- return this . path . currentSegments . map ( ( segment ) => {
157+ return [ ... this . currentSegments ] . map ( ( segment ) => {
148158 const info = this . segmentInfos . get ( segment )
149159 if ( info ) {
150160 return info
@@ -434,6 +444,15 @@ module.exports = {
434444 ) {
435445 lastThrowableExpression = node
436446 } ,
447+ /** @param {CodePathSegment } segment */
448+ onCodePathSegmentStart ( segment ) {
449+ codePathInfoStack [ 0 ] . onSegmentEnter ( segment )
450+ } ,
451+ /** @param {CodePathSegment } segment */
452+ /* istanbul ignore next */ // It is not called in ESLint v7.
453+ onUnreachableCodePathSegmentStart ( segment ) {
454+ codePathInfoStack [ 0 ] . onSegmentEnter ( segment )
455+ } ,
437456 /**
438457 * @param {CodePathSegment } segment
439458 * @param {Node } node
@@ -453,6 +472,12 @@ module.exports = {
453472 promiseCodePathContext . addResolvedTryBlockCodePathSegment ( segment )
454473 }
455474 }
475+ codePathInfoStack [ 0 ] . onSegmentExit ( segment )
476+ } ,
477+ /** @param {CodePathSegment } segment */
478+ /* istanbul ignore next */ // It is not called in ESLint v7.
479+ onUnreachableCodePathSegmentEnd ( segment ) {
480+ codePathInfoStack [ 0 ] . onSegmentExit ( segment )
456481 } ,
457482 /** @type {Identifier } */
458483 'CallExpression > Identifier.callee' ( node ) {
0 commit comments