Skip to content

Commit 514996e

Browse files
committed
[Compile Time Constant Extraction] Use 'Expr::printConstExprValue' instead of rolling it ourselves.
1 parent 72caba2 commit 514996e

File tree

3 files changed

+45
-21
lines changed

3 files changed

+45
-21
lines changed

lib/ConstExtract/ConstExtract.cpp

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -103,27 +103,11 @@ extractPropertyInitializationValue(VarDecl *propertyDecl) {
103103
if (binding) {
104104
auto originalInit = binding->getOriginalInit(0);
105105
if (originalInit) {
106-
// Integer Literals
107-
if (auto integerExpr =
108-
dyn_cast_or_null<IntegerLiteralExpr>(originalInit)) {
109-
std::string LiteralOutput;
110-
llvm::raw_string_ostream OutputStream(LiteralOutput);
111-
integerExpr->printConstExprValue(&OutputStream, nullptr);
112-
OutputStream.flush();
106+
std::string LiteralOutput;
107+
llvm::raw_string_ostream OutputStream(LiteralOutput);
108+
originalInit->printConstExprValue(&OutputStream, nullptr);
109+
if (!LiteralOutput.empty())
113110
return std::make_shared<RawLiteralValue>(LiteralOutput);
114-
// Float Literals
115-
} else if (auto floatExpr =
116-
dyn_cast_or_null<FloatLiteralExpr>(originalInit)) {
117-
std::string LiteralOutput;
118-
llvm::raw_string_ostream OutputStream(LiteralOutput);
119-
floatExpr->printConstExprValue(&OutputStream, nullptr);
120-
OutputStream.flush();
121-
return std::make_shared<RawLiteralValue>(LiteralOutput);
122-
// String Literals
123-
} else if (auto stringExpr =
124-
dyn_cast_or_null<StringLiteralExpr>(originalInit)) {
125-
return std::make_shared<RawLiteralValue>(stringExpr->getValue().str());
126-
}
127111
}
128112
}
129113

lib/Option/features.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@
2323
},
2424
{
2525
"name": "enable-bare-slash-regex-updated"
26-
}
26+
}
2727
]
2828
}

test/ConstExtraction/fields.swift

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,41 @@
1818
// CHECK-NEXT: "value": "Hello, World"
1919
// CHECK-NEXT: },
2020
// CHECK-NEXT: {
21+
// CHECK-NEXT: "label": "p5",
22+
// CHECK-NEXT: "type": "[Int]",
23+
// CHECK-NEXT: "isStatic": "false",
24+
// CHECK-NEXT: "isComputed": "false",
25+
// CHECK-NEXT: "value": "[1, 2, 3, 4, 5, 6, 7, 8, 9]"
26+
// CHECK-NEXT: },
27+
// CHECK-NEXT: {
28+
// CHECK-NEXT: "label": "p6",
29+
// CHECK-NEXT: "type": "Bool",
30+
// CHECK-NEXT: "isStatic": "false",
31+
// CHECK-NEXT: "isComputed": "false",
32+
// CHECK-NEXT: "value": "false"
33+
// CHECK-NEXT: },
34+
// CHECK-NEXT: {
35+
// CHECK-NEXT: "label": "p7",
36+
// CHECK-NEXT: "type": "Bool?",
37+
// CHECK-NEXT: "isStatic": "false",
38+
// CHECK-NEXT: "isComputed": "false",
39+
// CHECK-NEXT: "value": "nil"
40+
// CHECK-NEXT: },
41+
// CHECK-NEXT: {
42+
// CHECK-NEXT: "label": "p8",
43+
// CHECK-NEXT: "type": "(Int, Float)",
44+
// CHECK-NEXT: "isStatic": "false",
45+
// CHECK-NEXT: "isComputed": "false",
46+
// CHECK-NEXT: "value": "(42, 6.6)"
47+
// CHECK-NEXT: },
48+
// CHECK-NEXT: {
49+
// CHECK-NEXT: "label": "p9",
50+
// CHECK-NEXT: "type": "[String : Int]",
51+
// CHECK-NEXT: "isStatic": "false",
52+
// CHECK-NEXT: "isComputed": "false",
53+
// CHECK-NEXT: "value": "[(\"One\", 1), (\"Two\", 2), (\"Three\", 3)]"
54+
// CHECK-NEXT: },
55+
// CHECK-NEXT: {
2156
// CHECK-NEXT: "label": "p0",
2257
// CHECK-NEXT: "type": "Int",
2358
// CHECK-NEXT: "isStatic": "true",
@@ -57,6 +92,11 @@ public struct Foo {
5792
static let p2: Float = 42.2
5893
var p3: Int {3}
5994
static var p4: Int {3}
95+
let p5: [Int] = [1,2,3,4,5,6,7,8,9]
96+
let p6: Bool = false
97+
let p7: Bool? = nil
98+
let p8: (Int, Float) = (42, 6.6)
99+
let p9: [String: Int] = ["One": 1, "Two": 2, "Three": 3]
60100
}
61101

62102
extension Foo : MyProto {}

0 commit comments

Comments
 (0)