mirror of
https://github.com/apple/swift.git
synced 2026-10-04 11:58:22 +02:00
0699fd2cfepreviously disabled caching for FRTInfo requests, to prevent stale cache entries keyed on AST nodes allocated out of transient Clang sub-instances used to build the PCMs used by Swift/C++ interop. Specifically, NameImporter is used during PCM building, so requests from NameImporter should not be cached.6e9a491172brought back FRTInfo caching after name lookup was redesigned to eliminate the need for that FRTInfo during name lookup (it was involved in determining whether C++ methods need the "__Unsafe" name mangling). It turns out FRTInfo is needed in one other place during NameImporter, to determine the template instance name. I did not realize it existed while working on6e9a491172. This patch avoids the stale cache issues by introduces an uncached FRTInfo API, for use during PCM building. rdar://184577717
41 lines
1.5 KiB
C++
41 lines
1.5 KiB
C++
//===--- ClangClassTemplateNamePrinter.h ------------------------*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2023 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_CLANG_TEMPLATE_NAME_PRINTER_H
|
|
#define SWIFT_CLANG_TEMPLATE_NAME_PRINTER_H
|
|
|
|
#include "ImportName.h"
|
|
#include "swift/AST/ASTContext.h"
|
|
#include "clang/AST/DeclTemplate.h"
|
|
|
|
namespace swift {
|
|
namespace importer {
|
|
|
|
/// Returns a Swift representation of a C++ class template specialization name,
|
|
/// e.g. "vector<CWideChar, allocator<CWideChar>>".
|
|
///
|
|
/// This expands the entire tree of template instantiation names recursively.
|
|
/// While printing deep instantiation levels might not increase readability, it
|
|
/// is important to do because the C++ templated class names get mangled,
|
|
/// therefore they must be unique for different instantiations.
|
|
///
|
|
/// This function does not instantiate any templates and does not modify the AST
|
|
/// in any way.
|
|
std::string printClassTemplateSpecializationName(
|
|
const clang::ClassTemplateSpecializationDecl *decl,
|
|
NameImporter *nameImporter, ImportNameVersion version);
|
|
|
|
} // namespace importer
|
|
} // namespace swift
|
|
|
|
#endif // SWIFT_CLANG_TEMPLATE_NAME_PRINTER_H
|