Skip to content

Commit b6164e4

Browse files
authored
Merge pull request #73262 from artemcm/60ConstExtractNonInitPropertyWrapper
[6.0 🍒][Const Extract] Extract property wrapper details even when no default init is present
2 parents 9de913d + 3802a86 commit b6164e4

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

lib/ConstExtract/ConstExtract.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,14 +421,19 @@ extractPropertyWrapperAttrValues(VarDecl *propertyDecl) {
421421

422422
static ConstValueTypePropertyInfo
423423
extractTypePropertyInfo(VarDecl *propertyDecl) {
424+
std::optional<AttrValueVector> propertyWrapperValues;
425+
if (propertyDecl->hasAttachedPropertyWrapper())
426+
propertyWrapperValues = extractPropertyWrapperAttrValues(propertyDecl);
427+
424428
if (const auto binding = propertyDecl->getParentPatternBinding()) {
425429
if (const auto originalInit = binding->getInit(0)) {
426430
if (propertyDecl->hasAttachedPropertyWrapper()) {
427431
return {propertyDecl, extractCompileTimeValue(originalInit),
428-
extractPropertyWrapperAttrValues(propertyDecl)};
432+
propertyWrapperValues};
429433
}
430434

431-
return {propertyDecl, extractCompileTimeValue(originalInit)};
435+
return {propertyDecl, extractCompileTimeValue(originalInit),
436+
propertyWrapperValues};
432437
}
433438
}
434439

@@ -438,7 +443,8 @@ extractTypePropertyInfo(VarDecl *propertyDecl) {
438443
if (auto *stmt = node.dyn_cast<Stmt *>()) {
439444
if (stmt->getKind() == StmtKind::Return) {
440445
return {propertyDecl,
441-
extractCompileTimeValue(cast<ReturnStmt>(stmt)->getResult())};
446+
extractCompileTimeValue(cast<ReturnStmt>(stmt)->getResult()),
447+
propertyWrapperValues};
442448
}
443449
}
444450
}

test/ConstExtraction/ExtractLiterals.swift

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public struct PropertyWrappers : MyProto {
4343

4444
@Buffered @Clamping(min: 0, max: 255)
4545
var propertyWrapper3: Int = 128
46+
47+
@Buffered
48+
var propertyWrapper4: String
4649
}
4750

4851
@propertyWrapper
@@ -373,6 +376,16 @@ public struct PropertyWrappers : MyProto {
373376
// CHECK-NEXT: }
374377
// CHECK-NEXT: },
375378
// CHECK-NEXT: {
379+
// CHECK-NEXT: "label": "_propertyWrapper4",
380+
// CHECK-NEXT: "type": "ExtractLiterals.Buffered<Swift.String>",
381+
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
382+
// CHECK-NEXT: "isStatic": "false",
383+
// CHECK-NEXT: "isComputed": "false",
384+
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
385+
// CHECK-NEXT: "line": 48,
386+
// CHECK-NEXT: "valueKind": "Runtime"
387+
// CHECK-NEXT: },
388+
// CHECK-NEXT: {
376389
// CHECK-NEXT: "label": "propertyWrapper1",
377390
// CHECK-NEXT: "type": "Swift.String",
378391
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
@@ -544,7 +557,35 @@ public struct PropertyWrappers : MyProto {
544557
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
545558
// CHECK-NEXT: "line": 45,
546559
// CHECK-NEXT: "valueKind": "Runtime"
547-
// CHECK-NEXT: }
560+
// CHECK-NEXT: },
561+
// CHECK-NEXT: {
562+
// CHECK-NEXT: "label": "propertyWrapper4",
563+
// CHECK-NEXT: "type": "Swift.String",
564+
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
565+
// CHECK-NEXT: "isStatic": "false",
566+
// CHECK-NEXT: "isComputed": "true",
567+
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
568+
// CHECK-NEXT: "line": 48,
569+
// CHECK-NEXT: "valueKind": "Runtime",
570+
// CHECK-NEXT: "propertyWrappers": [
571+
// CHECK-NEXT: {
572+
// CHECK-NEXT: "type": "ExtractLiterals.Buffered",
573+
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
574+
// CHECK-NEXT: "line": 47,
575+
// CHECK-NEXT: "arguments": []
576+
// CHECK-NEXT: }
577+
// CHECK-NEXT: ]
578+
// CHECK-NEXT: },
579+
// CHECK-NEXT: {
580+
// CHECK-NEXT: "label": "$propertyWrapper4",
581+
// CHECK-NEXT: "type": "(Swift.String, Swift.Optional<Swift.String>)",
582+
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
583+
// CHECK-NEXT: "isStatic": "false",
584+
// CHECK-NEXT: "isComputed": "true",
585+
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
586+
// CHECK-NEXT: "line": 48,
587+
// CHECK-NEXT: "valueKind": "Runtime"
588+
// CHECK-NEXT: }
548589
// CHECK-NEXT: ]
549590
// CHECK-NEXT: }
550591
// CHECK-NEXT:]

0 commit comments

Comments
 (0)