diff --git a/front_end/core/sdk/SourceMapScopes.test.ts b/front_end/core/sdk/SourceMapScopes.test.ts index 8b549ea586..86fc485f52 100644 --- a/front_end/core/sdk/SourceMapScopes.test.ts +++ b/front_end/core/sdk/SourceMapScopes.test.ts @@ -386,4 +386,20 @@ describe('decodeGeneratedRanges', () => { {from: {line: 0, column: 60}, to: {line: 0, column: 100}, value: 'y'}, ]); }); + + it('decodes the "isScope" flag', () => { + const range = new GeneratedRangeBuilder() + .start(0, 0) + .start(5, 0, {isScope: true}) + .end(10, 0) + .start(20, 4, {isScope: false}) + .end(30, 0) + .end(40, 0) + .build(); + + const generatedRange = decodeGeneratedRanges(range, [], []); + assert.lengthOf(generatedRange.children, 2); + assert.isTrue(generatedRange.children[0].isScope); + assert.isFalse(generatedRange.children[1].isScope); + }); }); diff --git a/front_end/core/sdk/SourceMapScopes.ts b/front_end/core/sdk/SourceMapScopes.ts index 40493dbe14..2025626b2e 100644 --- a/front_end/core/sdk/SourceMapScopes.ts +++ b/front_end/core/sdk/SourceMapScopes.ts @@ -34,6 +34,11 @@ export interface GeneratedRange { end: Position; originalScope?: OriginalScope; + /** + * Whether this generated range is an actual JavaScript scope in the generated code. + */ + isScope: boolean; + /** * If this `GeneratedRange` is the result of inlining `originalScope`, then `callsite` * refers to where `originalScope` was called in the original ("authored") code. @@ -188,6 +193,7 @@ export function decodeGeneratedRanges( const range: GeneratedRange = { start: {line: item.line, column: item.column}, end: {line: item.line, column: item.column}, + isScope: Boolean(item.flags & EncodedGeneratedRangeFlag.IsScope), values: [], children: [], }; @@ -289,6 +295,7 @@ interface EncodedGeneratedRangeEnd { export const enum EncodedGeneratedRangeFlag { HasDefinition = 0x1, HasCallsite = 0x2, + IsScope = 0x4, } function isRangeStart(item: EncodedGeneratedRangeStart|EncodedGeneratedRangeEnd): item is EncodedGeneratedRangeStart { diff --git a/front_end/testing/SourceMapEncoder.ts b/front_end/testing/SourceMapEncoder.ts index 5d4427e491..f38000c47d 100644 --- a/front_end/testing/SourceMapEncoder.ts +++ b/front_end/testing/SourceMapEncoder.ts @@ -200,6 +200,7 @@ export class GeneratedRangeBuilder { }; start(line: number, column: number, options?: { + isScope?: boolean, definition?: {sourceIdx: number, scopeIdx: number}, callsite?: {sourceIdx: number, line: number, column: number}, bindings?: (number|{line: number, column: number, nameIdx: number}[])[], @@ -220,6 +221,9 @@ export class GeneratedRangeBuilder { if (options?.callsite) { flags |= SDK.SourceMapScopes.EncodedGeneratedRangeFlag.HasCallsite; } + if (options?.isScope) { + flags |= SDK.SourceMapScopes.EncodedGeneratedRangeFlag.IsScope; + } this.#encodedRange += encodeVlq(flags); if (options?.definition) {