Skip to content

Commit 351d42b

Browse files
committed
SIL: add some Type APIs and make Type a DiagnosticArgument
1 parent 7ecb407 commit 351d42b

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

SwiftCompilerSources/Sources/Optimizer/Utilities/DiagnosticEngine.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ extension Int: DiagnosticArgument {
3030
fn(BridgedDiagnosticArgument(self))
3131
}
3232
}
33+
extension Type: DiagnosticArgument {
34+
public func _withBridgedDiagnosticArgument(_ fn: (BridgedDiagnosticArgument) -> Void) {
35+
fn(bridged.asDiagnosticArgument())
36+
}
37+
}
3338
extension DeclRef: DiagnosticArgument {
3439
public func _withBridgedDiagnosticArgument(_ fn: (BridgedDiagnosticArgument) -> Void) {
3540
fn(bridged.asDiagnosticArgument())

SwiftCompilerSources/Sources/SIL/Type.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,17 @@ public struct Type : CustomStringConvertible, NoReflectionChildren {
8080
NominalTypeDecl(_bridged: bridged.getNominalOrBoundGenericNominal())
8181
}
8282

83+
public var superClassType: Type? {
84+
precondition(isClass)
85+
return bridged.getSuperClassType().typeOrNil
86+
}
87+
88+
public var contextSubstitutionMap: SubstitutionMap {
89+
SubstitutionMap(bridged: bridged.getContextSubstitutionMap())
90+
}
91+
92+
public var isGenericAtAnyLevel: Bool { bridged.isGenericAtAnyLevel() }
93+
8394
public var isOrContainsObjectiveCClass: Bool { bridged.isOrContainsObjectiveCClass() }
8495

8596
public var isBuiltinInteger: Bool { bridged.isBuiltinInteger() }

include/swift/SIL/SILBridging.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ struct BridgedFunction;
4242
struct BridgedBasicBlock;
4343
struct BridgedSuccessorArray;
4444
struct OptionalBridgedBasicBlock;
45+
struct BridgedSubstitutionMap;
46+
struct BridgedProtocolConformance;
4547

4648
namespace swift {
4749
class ValueBase;
@@ -286,6 +288,7 @@ struct BridgedType {
286288
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedType getAddressType() const;
287289
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedType getObjectType() const;
288290
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedASTType getASTType() const;
291+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedDiagnosticArgument asDiagnosticArgument() const;
289292
BRIDGED_INLINE bool isTrivial(BridgedFunction f) const;
290293
BRIDGED_INLINE bool isNonTrivialOrContainsRawPointer(BridgedFunction f) const;
291294
BRIDGED_INLINE bool isValueTypeWithDeinit() const;
@@ -295,6 +298,8 @@ struct BridgedType {
295298
BRIDGED_INLINE bool hasArchetype() const;
296299
BRIDGED_INLINE bool isNominalOrBoundGenericNominal() const;
297300
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedNominalTypeDecl getNominalOrBoundGenericNominal() const;
301+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedSubstitutionMap getContextSubstitutionMap() const;
302+
BRIDGED_INLINE bool isGenericAtAnyLevel() const;
298303
BRIDGED_INLINE bool isClassOrBoundGenericClass() const;
299304
BRIDGED_INLINE bool isStructOrBoundGenericStruct() const;
300305
BRIDGED_INLINE bool isTuple() const;
@@ -336,6 +341,7 @@ struct BridgedType {
336341
getTupleElementType(SwiftInt idx) const;
337342
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedType getFunctionTypeWithNoEscape(bool withNoEscape) const;
338343
BRIDGED_INLINE BridgedArgumentConvention getCalleeConvention() const;
344+
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE BridgedType getSuperClassType() const;
339345
SWIFT_IMPORT_UNSAFE BRIDGED_INLINE
340346
static BridgedType getSuperClassTypeOfClassDecl(BridgedNominalTypeDecl decl);
341347
};

include/swift/SIL/SILBridgingImpl.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,10 @@ BridgedASTType BridgedType::getASTType() const {
323323
return {unbridged().getASTType().getPointer()};
324324
}
325325

326+
BridgedDiagnosticArgument BridgedType::asDiagnosticArgument() const {
327+
return swift::DiagnosticArgument(unbridged().getASTType());
328+
}
329+
326330
bool BridgedType::isTrivial(BridgedFunction f) const {
327331
return unbridged().isTrivial(f.getFunction());
328332
}
@@ -355,6 +359,16 @@ bool BridgedType::isNominalOrBoundGenericNominal() const {
355359
return unbridged().getNominalOrBoundGenericNominal() != nullptr;
356360
}
357361

362+
BridgedSubstitutionMap BridgedType::getContextSubstitutionMap() const {
363+
swift::CanType astType = unbridged().getASTType();
364+
return astType->getContextSubstitutionMap();
365+
}
366+
367+
bool BridgedType::isGenericAtAnyLevel() const {
368+
swift::CanType astType = unbridged().getASTType();
369+
return astType->isSpecialized();
370+
}
371+
358372
BridgedNominalTypeDecl BridgedType::getNominalOrBoundGenericNominal() const {
359373
return {unbridged().getNominalOrBoundGenericNominal()};
360374
}
@@ -531,6 +545,10 @@ BridgedArgumentConvention BridgedType::getCalleeConvention() const {
531545
return getArgumentConvention(fnType->getCalleeConvention());
532546
}
533547

548+
BridgedType BridgedType::getSuperClassType() const {
549+
return unbridged().getSuperclass();
550+
}
551+
534552
BridgedType BridgedType::getSuperClassTypeOfClassDecl(BridgedNominalTypeDecl decl) {
535553
swift::Type superTy = swift::cast<swift::ClassDecl>(decl.unbridged())->getSuperclass();
536554
if (!superTy) {

0 commit comments

Comments
 (0)