Skip to content

Commit f387e35

Browse files
authored
Merge pull request #82048 from slavapestov/fix-rdar127120469
ASTPrinter: Fix printing of let properties inside @objc @implementation extensions
2 parents e473977 + 0b3fd9e commit f387e35

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

lib/AST/ASTPrinter.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3508,12 +3508,14 @@ void PrintAST::visitPatternBindingDecl(PatternBindingDecl *decl) {
35083508
if (decl->isStatic())
35093509
printStaticKeyword(decl->getCorrectStaticSpelling());
35103510

3511+
bool printAsVar = false;
35113512
if (anyVar) {
3512-
Printer << (anyVar->isSettable(anyVar->getDeclContext()) ? "var " : "let ");
3513-
} else {
3514-
Printer << "let ";
3513+
printAsVar = (anyVar->isSettable(anyVar->getDeclContext()) ||
3514+
isInObjCImpl(anyVar));
35153515
}
35163516

3517+
Printer << (printAsVar ? "var " : "let ");
3518+
35173519
bool isFirst = true;
35183520
for (auto idx : range(decl->getNumPatternEntries())) {
35193521
auto *pattern = decl->getPattern(idx);
@@ -3958,9 +3960,9 @@ void PrintAST::visitVarDecl(VarDecl *decl) {
39583960
// Map all non-let specifiers to 'var'. This is not correct, but
39593961
// SourceKit relies on this for info about parameter decls.
39603962

3961-
Printer.printIntroducerKeyword(
3962-
introducer == VarDecl::Introducer::Let ? "let" : "var",
3963-
Options, " ");
3963+
bool printAsVar = (introducer != VarDecl::Introducer::Let ||
3964+
isInObjCImpl(decl));
3965+
Printer.printIntroducerKeyword(printAsVar ? "var" : "let", Options, " ");
39643966
}
39653967
printContextIfNeeded(decl);
39663968
recordDeclLoc(decl,

test/ModuleInterface/Inputs/objc_implementation/objc_implementation.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- (nonnull instancetype)init;
66

7+
@property (readonly) int letProperty1;
78
@property (assign) int implProperty;
89

910
- (void)mainMethod:(int)param;

test/ModuleInterface/objc_implementation.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ import Foundation
4242
didSet { print(implProperty) }
4343
}
4444

45+
// CHECK-NOT: var letProperty1:
46+
@objc public let letProperty1: Int32
47+
48+
// CHECK-DAG: @nonobjc public var letProperty2: Swift.Int32 { get }
49+
@nonobjc public let letProperty2: Int32
50+
4551
// CHECK-DAG: final public var implProperty2: ObjectiveC.NSObject? { get set }
4652
public final var implProperty2: NSObject?
4753

0 commit comments

Comments
 (0)