include/swift/ClangImporter コードリーディング(全体)
概要
swift/include/swift/ClangImporter at 4b727e5813246d4029e7c4269bba317db9b012d3 · apple/swift · GitHub
- 概要
- BuiltinMappedTypes.def
- ClangImporter.h
- SWIFT_MAX_IMPORTED_SIMD_ELEMENTS
- ClangTypeKind
- ClangImporter
- super class
- friend class
- create
- createDependencyCollector
- canImportModule
- loadModule
- lookupValue
- lookupTypeDecl
- lookupRelatedEntity
- lookupBridgingHeaderDecls
- lookupDeclsFromHeader
- loadExtensions
- loadObjCMethods
- addSearchPath
- importHeader
- importBridgingHeader
- getImportedHeaderModule
- getBridgingHeaderContents
- emitBridgingPCH
- canReadPCH
- ClangImporterOptions.h
- ClangModule.h
- SIMDMappedTypes.def
BuiltinMappedTypes.def
ClangImporter.h
SWIFT_MAX_IMPORTED_SIMD_ELEMENTS
= 4
importしようとしているSIMDベクトル要素の最大数
ClangTypeKind
clang :: Sema :: LookupKindの簡略版定義
definition | desc |
---|---|
Typedef | |
ObjCClass | |
Tag | /// Structs, enums, and unions. |
ObjCProtocol |
ClangImporter
super class
friend class
ClangModuleUnit
create
ClangImporter.cpp - ClangImporter::create
static std::unique_ptr<ClangImporter> create(ASTContext &ctx, const ClangImporterOptions &importerOpts, std::string swiftPCHHash = "", DependencyTracker *tracker = nullptr);
指定されたASTContextに適切なClangモジュールをimportできる新しいClangImporterを作成する
params
- ctx
- モジュールをimportする対象のASTContext
- ASTContextのSearchPathOptionsはClangImporterに使用される
- importerOpts
- ClangImporterに使用するオプション
- swiftPCHHash
- hashはコンパイラの呼び出しによって要求された場合に一意のBridging PCHを作成するために使用される
- tracker
returns
- 新しいClangモジュールのimporterを返す
- エラーが発生した場合はnull(診断あり)を返す
createDependencyCollector
ClangImporterDependencyCollector
ClangImporterの特定の用途に合わせてカスタマイズされた新しいclang::DependencyCollectorを作成する
static std::shared_ptr<clang::DependencyCollector>
createDependencyCollector();
canImportModule
指定した名前のモジュールをimportingしなくてもimportできるかどうか確認する
このチェックが成功したとしてもモジュールが一杯に読み込まれてた場合はエラーが発生する可能性があることに注意
virtual bool canImportModule(std::pair<Identifier, SourceLoc> named) override;
loadModule
指定したモジュールパスを持つモジュールをimportする
ClangモジュールはObjective-C ARCの方言を使用してimportされ、全ての警告は無効になる
virtual ModuleDecl *loadModule( SourceLoc importLoc, ArrayRef<std::pair<Identifier, SourceLoc>> path) override;
lookupValue
与えられた名前に関する宣言を検索する
void lookupValue(DeclName name, VisibleDeclConsumer &consumer);
lookupTypeDecl
型宣言をClangの名前で検索する
void lookupTypeDecl(StringRef clangName, ClangTypeKind kind, llvm::function_ref<void(TypeDecl*)> receiver);
lookupRelatedEntity
related entity kind
を使用してClangImporter自体によって合成された宣言を検索し、どの型にするかを決定する
例えば、NS_ERROR_ENUM
の合成エラー構造体を見つけるのに使用できる
void lookupRelatedEntity(StringRef clangName, ClangTypeKind kind, StringRef relatedEntityKind, llvm::function_ref<void(TypeDecl*)> receiver);
lookupBridgingHeaderDecls
BridgingHeaderからのテキスト付きの宣言を検索する
void lookupBridgingHeaderDecls(llvm::function_ref<bool(ClangNode)> filter, llvm::function_ref<void(Decl*)> receiver) const;
lookupDeclsFromHeader
特定のヘッダーからの宣言を検索する
ヘッダーはClangモジュールの一部であってもよいし、BridgingHeaderから含まれても良い
bool lookupDeclsFromHeader(StringRef filename, llvm::function_ref<bool(ClangNode)> filter, llvm::function_ref<void(Decl*)> receiver) const;
loadExtensions
与えられたnominal type
にextensionをロードする
void loadExtensions(NominalTypeDecl *nominal, unsigned previousGeneration);
loadObjCMethods
- classDecl
- selector
- isInstanceMethod
- previousGeneration
- methods
virtual void loadObjCMethods( ClassDecl *classDecl, ObjCSelector selector, bool isInstanceMethod, unsigned previousGeneration, llvm::TinyPtrVector<AbstractFunctionDecl *> &methods) override;
addSearchPath
存在してない場合に限り、SearchPathOptsに検索パスを追加する
全てのModuleLoaderを最新の状態に保つための適切な記録を行う
void addSearchPath(StringRef searchPath, bool isFramework, bool isSystem);
importHeader
Objective-Cヘッダーファイルを共有importされたヘッダーのモジュールにimportする
bool importHeader(StringRef header, ModuleDecl *adapter, off_t expectedSize, time_t expectedModTime, StringRef cachedContents, SourceLoc diagLoc);
importBridgingHeader
Objective-Cヘッダーファイルを共有importされたヘッダーのモジュールにimportする
bool importBridgingHeader(StringRef header, ModuleDecl *adapter, SourceLoc diagLoc = {}, bool trackParsedSymbols = false, bool implicitImport = false);
getImportedHeaderModule
読み込まれた全てのObjective-Cヘッダーファイルからのimportと宣言を含むモジュールを返す
ModuleDecl *getImportedHeaderModule() const override;
getBridgingHeaderContents
emitBridgingPCH
ClangImporterのCompileInstanceの一時的なレプリカを作成し、Objective-Cヘッダーファイルをレプリカに読み込み、その内容のPCHファイルを出力する。
bool emitBridgingPCH(StringRef headerPath,
StringRef outputPCHPath);
canReadPCH
現在のオプションが存在すると仮定して、CompilerInstanceがPCHで正常に読み込める場合はtrueを返す
これはあとで再利用するためにPCHを保持する必要があるかどうかを調べるために使用できる
bool canReadPCH(StringRef PCHFilename);
ClangImporterOptions.h
ClangImporterOptions
ModuleCachePath
ClangImporterが使用するモジュールのキャッシュパス
std::string ModuleCachePath;
ExtraArgs
ClangImporterに渡すべき余分な引数群
std::vector<std::string> ExtraArgs;
OverrideResourceDir
Clangのリソースディレクトリを上書きするためのディレクトリ
std::string OverrideResourceDir;
TargetCPU
コンパイル対象のCPU
Clangの -mcpu
と同等
例えば、-mcpu=cortex-a53、-mcpu=cortex-a57、-mcpu=cortex-a15
std::string IndexStorePath;
IndexStorePath
indexを格納する必要がある場合のパス
std::string IndexStorePath;
BridgingHeader
importされるbridging header、またはPCH
std::string BridgingHeader;
PrecompiledHeaderOutputDir
bridging headerからプリコンパイル済みのヘッダーを自動生成する場合の指定ディレクトリ
std::string PrecompiledHeaderOutputDir;
Optimization
最適化の設定、通常のimportに関して問題はないがClang IRの生成に影響を与える
std::string Optimization;
PCHDisableValidation
永続的なPCHの検証を無効にする
std::string Optimization;
Modes
definition | desc |
---|---|
Normal | モジュールをSwiftにimportし、SwiftのコードからIRを生成するためのClangを設定 |
EmbedBitcode | バックエンドのコンパイル用にのみClangを設定 |
Mode
Clangの初期設定モード、Normalを指定
Modes Mode = Modes::Normal;
DetailedPreprocessingRecord
設定すると、インポート時に多くの情報が保持される
また、オブジェクトファイルの生成にのみ必要な情報は無効にする
bool DetailedPreprocessingRecord = false;
DumpClangDiagnostics
trueの場合、Clangの診断用プリンタを用いてstderrにダンプされSwiftの診断エンジンに渡される
bool DumpClangDiagnostics = false;
ImportForwardDeclarations
trueの場合、前方宣言は可能であれば完全に削除される代わりに使用できない型をimportする
bool ImportForwardDeclarations = false;
InferImportAsMember
メンバの推論システムとしてimportするかどうか
When importing a global, try to infer whether we can import it as a member of some type instead. This includes inits, computed properties, and methods.
bool InferImportAsMember = false;
DisableSwiftBridgeAttr
/// If true ignore the swift bridged attribute.
bool DisableSwiftBridgeAttr = false;
/// When set, don't validate module system headers. If a header is modified /// and this is not set, clang will rebuild the module. bool DisableModulesValidateSystemHeaders = false;
/// When set, don't look for or load adapter modules. bool DisableAdapterModules = false;
/// When set, don't enforce warnings with -Werror. bool DebuggerSupport = false;