Skip to content

Commit 0d52c41

Browse files
authored
[Compile Time Constant Extraction] Add extraction of paren expressions (#62816)
1 parent bc2bb5b commit 0d52c41

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

Diff for: lib/ConstExtract/ConstExtract.cpp

+9-3
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@ static std::shared_ptr<CompileTimeValue> extractCompileTimeValue(Expr *expr) {
203203
return extractCompileTimeValue(erasureExpr->getSubExpr());
204204
}
205205

206+
case ExprKind::Paren: {
207+
auto parenExpr = cast<ParenExpr>(expr);
208+
return extractCompileTimeValue(parenExpr->getSubExpr());
209+
}
210+
206211
default: {
207212
break;
208213
}
@@ -254,9 +259,10 @@ extractTypePropertyInfo(VarDecl *propertyDecl) {
254259

255260
if (auto accessorDecl = propertyDecl->getAccessor(AccessorKind::Get)) {
256261
auto node = accessorDecl->getTypecheckedBody()->getFirstElement();
257-
if (node.is<Stmt *>()) {
258-
if (auto returnStmt = dyn_cast<ReturnStmt>(node.get<Stmt *>())) {
259-
return {propertyDecl, extractCompileTimeValue(returnStmt->getResult())};
262+
if (auto *stmt = node.dyn_cast<Stmt *>()) {
263+
if (stmt->getKind() == StmtKind::Return) {
264+
return {propertyDecl,
265+
extractCompileTimeValue(cast<ReturnStmt>(stmt)->getResult())};
260266
}
261267
}
262268
}

Diff for: test/ConstExtraction/ExtractLiterals.swift

+35
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,21 @@
6868
// CHECK-NEXT: "isComputed": "false",
6969
// CHECK-NEXT: "valueKind": "RawLiteral",
7070
// CHECK-NEXT: "value": "42.2"
71+
// CHECK-NEXT: },
72+
// CHECK-NEXT: {
73+
// CHECK-NEXT: "label": "float2",
74+
// CHECK-NEXT: "type": "Swift.Float",
75+
// CHECK-NEXT: "isStatic": "true",
76+
// CHECK-NEXT: "isComputed": "true",
77+
// CHECK-NEXT: "valueKind": "RawLiteral",
78+
// CHECK-NEXT: "value": "6"
79+
// CHECK-NEXT: },
80+
// CHECK-NEXT: {
81+
// CHECK-NEXT: "label": "float3",
82+
// CHECK-NEXT: "type": "Swift.Float",
83+
// CHECK-NEXT: "isStatic": "true",
84+
// CHECK-NEXT: "isComputed": "true",
85+
// CHECK-NEXT: "valueKind": "Runtime"
7186
// CHECK-NEXT: }
7287
// CHECK-NEXT: ]
7388
// CHECK-NEXT: },
@@ -82,6 +97,22 @@
8297
// CHECK-NEXT: "isComputed": "false",
8398
// CHECK-NEXT: "valueKind": "RawLiteral",
8499
// CHECK-NEXT: "value": "\"Hello, World\""
100+
// CHECK-NEXT: },
101+
// CHECK-NEXT: {
102+
// CHECK-NEXT: "label": "string2",
103+
// CHECK-NEXT: "type": "Swift.String",
104+
// CHECK-NEXT: "isStatic": "false",
105+
// CHECK-NEXT: "isComputed": "false",
106+
// CHECK-NEXT: "valueKind": "RawLiteral",
107+
// CHECK-NEXT: "value": "\"Hi\""
108+
// CHECK-NEXT: },
109+
// CHECK-NEXT: {
110+
// CHECK-NEXT: "label": "string3",
111+
// CHECK-NEXT: "type": "Swift.String",
112+
// CHECK-NEXT: "isStatic": "false",
113+
// CHECK-NEXT: "isComputed": "true",
114+
// CHECK-NEXT: "valueKind": "RawLiteral",
115+
// CHECK-NEXT: "value": "\"Hey\""
85116
// CHECK-NEXT: }
86117
// CHECK-NEXT: ]
87118
// CHECK-NEXT: },
@@ -215,10 +246,14 @@ public struct Ints : MyProto {
215246

216247
public struct Floats : MyProto {
217248
static let float1: Float = 42.2
249+
static var float2: Float { return (6) }
250+
static var float3: Float { return (1 + 2) }
218251
}
219252

220253
public struct Strings : MyProto {
221254
let string1: String = "Hello, World"
255+
let string2: String = (("Hi"))
256+
var string3: String { ("Hey") }
222257
}
223258

224259
public struct PropertyWrappers : MyProto {

0 commit comments

Comments
 (0)