lib/ClangImporter コードリーディング(全体)
概要
swift/lib/ClangImporter at master · apple/swift · GitHub
- 概要
- CFDatabase.def
- CFTypeInfo.h
- CFTypeInfo.cpp
- CMakeLists.txt
- ClangAdapter.h
- ClangAdapter.cpp
- ClangDiagnosticConsumer.h
- ClangDiagnosticConsumer.cpp
- ClangImporter.cpp
- IAMInference.h
- IAMInference.cpp
- ImportDecl.cpp
- ImportEnumInfo.h
- ImportEnumInfo.cpp
- ImportMacro.cpp
- ImportName.h
- ImportName.cpp
- ImportType.cpp
- ImporterImpl.h
- InferredAttributes.def
- MacroTable.def
- MappedTypes.def
- SortedCFDatabase.def.gyb
- SwiftLookupTable.h
- SwiftLookupTable.cpp
CFDatabase.def
CFTypeInfo.h
CFTypeInfo.cpp
CMakeLists.txt
ClangAdapter.h
ClangAdapter.cpp
ClangDiagnosticConsumer.h
ClangDiagnosticConsumer.cpp
ClangImporter.cpp
create
header
ClangImporter.h - ClangImporter::create
std::unique_ptr<ClangImporter>
ClangImporter::create(ASTContext &ctx,
const ClangImporterOptions &importerOpts,
std::string swiftPCHHash,
DependencyTracker *tracker)
clangコマンドを
std::vector<std::string> invocationArgStrs
に格納して組み立てていくClangImporterOptions::BridgingHeaderの拡張子が.pchならば
- ClangImporter::Impl::setSinglePCHImport(ClangImporterOptions::BridgingHeader)
- ClangImporter::Impl::IsReadingBridgingPCHをtrueにする
- DependencyTrackerがあるならば
- DependencyTracker::getClangCollectorでClangImporterDependencyCollectorを取得
- ClangImporterDependencyCollector::excludePathにClangImporterOptions::BridgingHeaderをセット
ClangImporterDependencyCollector
ClangImporter::createDependencyCollector
super class
clang::DependencyCollector
ExcludedPaths
llvm::StringSet<> ExcludedPaths;
excludePath
void excludePath(StringRef filename)
isClangImporterSpecialName
bool isClangImporterSpecialName(StringRef Filename)
needSystemDependencies
bool needSystemDependencies() override
sawDependency
bool sawDependency(StringRef Filename, bool FromClangModule, bool IsSystem, bool IsClangModuleFile, bool IsMissing) override
IAMInference.h
IAM = Import As Memberの略称
Cグローバル関数と変数を、型またはインスタンスのメンバとしてimportしようとする
IAMInference.cpp
ImportDecl.cpp
ImportEnumInfo.h
EnumKind
特定のC列挙型をSwiftにimportする方法について
definition | desc |
---|---|
Enum | enumにmapする必要がある、そして全てのcaseが独立してることを意味する |
Options | option setにmapする必要がある、定数は独立フラグの組み合わせを表している |
Unknown | 別の型にmapする必要がある、列挙型定数の意図された意味論が判別できないため独立した定数にmapする |
Constants | 単純な整数値にmapする必要がある |
ImportEnumInfo.cpp
ImportMacro.cpp
ImportName.h
ImportName.cpp
ImportedAccessorKind
エンティティをimportするアクセサの種類
definition | desc |
---|---|
None | x |
PropertyGetter | x |
PropertySetter | x |
SubscriptGetter | x |
SubscriptSetter | x |
ImportType.cpp
ImportHint::ImportHintKind
Various types that we want to do something interesting to after importing them.
definition | desc | optional import |
---|---|---|
None | 特別なものは何もない | × |
Void | void | × |
BOOL | BOOL | × |
Boolean | Boolean | × |
ObjCBridged | Swiftの型にbridgeされたObjective-Cのクラス型 | ○ |
NSUInteger | NSUInteger | × |
ObjCPointer | Objective-Cオブジェクトのポインタ型 | ○ |
CFPointer | CFオブジェクトポインタ型 | ○ |
Block | Blockのポインタ型 | ○ |
CFunctionPointer | 関数ポインタ型 | ○ |
OtherPointer | いくつかの(上記に該当しない?)ポインタ型 | ○ |
SwiftNewtypeFromCFPointer | The source type created a new Swift type, using swift_newtype , of an original underlying CFPointer. This distinction is necessary to trigger audit-checking. |
○ |
ImporterImpl.h
ConstantConvertKind
定数値に適用する変換の種類
definition | desc |
---|---|
None | 変換の必要がない |
Coerce | 指定された型に強制する |
Construction | 定数値から指定された型を構築 |
ConstructionWithUnwrap | Optionalのイニシャライザを使い、定数値から指定された型を構築 |
Downcast | 指定された型へのチェックされてないダウンキャストを実行する |
ImportTypeKind
型importの種類
definition | desc |
---|---|
Abstract | 調整することなく最も抽象的な形式 |
Typedef | typedefによる型定義 |
Value | リテラル値 |
BridgedValue | bridging可能なリテラル値 |
Variable | 宣言してる変数の型 |
AuditedVariable | 宣言してる変数の型、xxx |
RecordField | 構造体 or union型 |
Result | x |
AuditedResult | x |
Parameter | x |
CFRetainedOutParameter | x |
CFUnretainedOutParameter | x |
Pointee | ポインタ or 参照型 |
Property | ObjC property |
PropertyWithReferenceSemantics | weak, assignもしくはunsafe_unretained属性 のObjC property |
Enum | enumの定義、NSUIntegerとして特別に扱う |
Bridgeability
definition | desc |
---|---|
None | bridgingを一切許可しない(Cポインタのターゲットなど) |
Full | あらゆる種類のbridgingを可能にする(メソッド宣言のimport結果など) |