Skip to content

[SwiftLexicalLookup] Add support for caching in result validation #81209

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions lib/ASTGen/Sources/ASTGen/LexicalLookup.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,15 @@ public func unqualifiedLookup(
}
let sourceLocationConverter = sourceFile.pointee.sourceLocationConverter
let configuredRegions = sourceFile.pointee.configuredRegions(astContext: astContext)

let lookupCache: LookupCache

if let sourceFileCache = sourceFile.pointee.lookupCache {
lookupCache = sourceFileCache
} else {
lookupCache = LookupCache(drop: 4)
sourceFile.pointee.lookupCache = lookupCache
}

guard let lookupPosition = sourceFile.pointee.position(of: lookupAt),
let lookupToken = sourceFileSyntax.token(at: lookupPosition)
Expand All @@ -70,7 +79,8 @@ public func unqualifiedLookup(
let sllResults = sllConsumedResults(
lookupToken: lookupToken,
finishInSequentialScope: finishInSequentialScope,
configuredRegions: configuredRegions
configuredRegions: configuredRegions,
cache: lookupCache
)

// Add header to the output
Expand Down Expand Up @@ -196,11 +206,13 @@ private func astConsumedResults(
private func sllConsumedResults(
lookupToken: TokenSyntax,
finishInSequentialScope: Bool,
configuredRegions: ConfiguredRegions
configuredRegions: ConfiguredRegions,
cache: LookupCache
) -> [ConsumedLookupResult] {
let resultsWithoutMacroReordering = lookupToken.lookup(
nil,
with: LookupConfig(finishInSequentialScope: finishInSequentialScope, configuredRegions: configuredRegions)
with: LookupConfig(finishInSequentialScope: finishInSequentialScope, configuredRegions: configuredRegions),
cache: cache
)

// Early reordering of macro declaration parameters with its generic parameters.
Expand Down Expand Up @@ -413,7 +425,7 @@ private func flaggingPass(
}

// Check if next results at this position should be ignored. If so, set ignoreAt and omit this name.
if sllResult.ignoreNextFromHere && sllResult.position != ignoreAt {
if sllResult.ignoreNextFromHere {
ignoreAt = sllResult.position
sllResult.flags.insert(.shouldBeOmitted)
}
Expand Down
7 changes: 7 additions & 0 deletions lib/ASTGen/Sources/ASTGen/SourceFile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import SwiftIfConfig
@_spi(ExperimentalLanguageFeatures) import SwiftParser
import SwiftParserDiagnostics
@_spi(Compiler) import SwiftSyntax
@_spi(Experimental) import SwiftLexicalLookup

/// Describes a source file that has been "exported" to the C++ part of the
/// compiler, with enough information to interface with the C++ layer.
Expand All @@ -42,6 +43,12 @@ public struct ExportedSourceFile {
///
/// This is a cached value; access via configuredRegions(astContext:).
var _configuredRegions: ConfiguredRegions? = nil

/// Cache used by unqualified lookup
///
/// Cached so we don't need to re-evaluate common parts
/// of the scope tree during successive lookups.
var lookupCache: LookupCache? = nil

public func position(of location: BridgedSourceLoc) -> AbsolutePosition? {
let sourceFileBaseAddress = UnsafeRawPointer(buffer.baseAddress!)
Expand Down