Skip to content

Commit c2f7452

Browse files
authored
Merge pull request #62321 from quinntaylor/static-extract-json-valueKind
[Compile Time Constant Extraction] Add `valueKind` property to JSON output.
2 parents 4a13a2f + 43a126c commit c2f7452

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

include/swift/ConstExtract/ConstExtract.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
//===-------- ConstExtract.h -- Gather Compile-Time-Known Values ----------===//
1+
//===---- ConstExtract.h -- Gather Compile-Time-Known Values ----*- C++ -*-===//
22
//
33
// This source file is part of the Swift.org open source project
44
//
5-
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
5+
// Copyright (c) 2022 Apple Inc. and the Swift project authors
66
// Licensed under Apache License v2.0 with Runtime Library Exception
77
//
88
// See https://swift.org/LICENSE.txt for license information

lib/ConstExtract/ConstExtract.cpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
//===-------- ConstExtract.pp -- Gather Compile-Time-Known Values --------===//
1+
//===-------- ConstExtract.cpp -- Gather Compile-Time-Known Values --------===//
22
//
33
// This source file is part of the Swift.org open source project
44
//
5-
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
5+
// Copyright (c) 2022 Apple Inc. and the Swift project authors
66
// Licensed under Apache License v2.0 with Runtime Library Exception
77
//
88
// See https://swift.org/LICENSE.txt for license information
@@ -222,6 +222,21 @@ std::string toString(const CompileTimeValue *Value) {
222222
}
223223
}
224224

225+
std::string toString(CompileTimeValue::ValueKind Kind) {
226+
switch (Kind) {
227+
case CompileTimeValue::ValueKind::RawLiteral:
228+
return "RawLiteral";
229+
case CompileTimeValue::ValueKind::InitCall:
230+
return "InitCall";
231+
case CompileTimeValue::ValueKind::Builder:
232+
return "Builder";
233+
case CompileTimeValue::ValueKind::Dictionary:
234+
return "Dictionary";
235+
case CompileTimeValue::ValueKind::Runtime:
236+
return "Runtime";
237+
}
238+
}
239+
225240
bool writeAsJSONToFile(const std::vector<ConstValueTypeInfo> &ConstValueInfos,
226241
llvm::raw_fd_ostream &OS) {
227242
llvm::json::OStream JSON(OS, 2);
@@ -244,7 +259,12 @@ bool writeAsJSONToFile(const std::vector<ConstValueTypeInfo> &ConstValueInfos,
244259
PropertyDecl->isStatic() ? "true" : "false");
245260
JSON.attribute("isComputed",
246261
!PropertyDecl->hasStorage() ? "true" : "false");
247-
JSON.attribute("value", toString(PropertyInfo.Value.get()));
262+
auto value = PropertyInfo.Value.get();
263+
auto valueKind = value->getKind();
264+
JSON.attribute("valueKind", toString(valueKind));
265+
if (valueKind != CompileTimeValue::ValueKind::Runtime) {
266+
JSON.attribute("value", toString(value));
267+
}
248268
});
249269
}
250270
});

test/ConstExtraction/fields.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,69 +15,79 @@
1515
// CHECK-NEXT: "type": "Swift.String",
1616
// CHECK-NEXT: "isStatic": "false",
1717
// CHECK-NEXT: "isComputed": "false",
18+
// CHECK-NEXT: "valueKind": "RawLiteral",
1819
// CHECK-NEXT: "value": "\"Hello, World\""
1920
// CHECK-NEXT: },
2021
// CHECK-NEXT: {
2122
// CHECK-NEXT: "label": "p5",
2223
// CHECK-NEXT: "type": "[Swift.Int]",
2324
// CHECK-NEXT: "isStatic": "false",
2425
// CHECK-NEXT: "isComputed": "false",
26+
// CHECK-NEXT: "valueKind": "RawLiteral",
2527
// CHECK-NEXT: "value": "[1, 2, 3, 4, 5, 6, 7, 8, 9]"
2628
// CHECK-NEXT: },
2729
// CHECK-NEXT: {
2830
// CHECK-NEXT: "label": "p6",
2931
// CHECK-NEXT: "type": "Swift.Bool",
3032
// CHECK-NEXT: "isStatic": "false",
3133
// CHECK-NEXT: "isComputed": "false",
34+
// CHECK-NEXT: "valueKind": "RawLiteral",
3235
// CHECK-NEXT: "value": "false"
3336
// CHECK-NEXT: },
3437
// CHECK-NEXT: {
3538
// CHECK-NEXT: "label": "p7",
3639
// CHECK-NEXT: "type": "Swift.Bool?",
3740
// CHECK-NEXT: "isStatic": "false",
3841
// CHECK-NEXT: "isComputed": "false",
42+
// CHECK-NEXT: "valueKind": "RawLiteral",
3943
// CHECK-NEXT: "value": "nil"
4044
// CHECK-NEXT: },
4145
// CHECK-NEXT: {
4246
// CHECK-NEXT: "label": "p8",
4347
// CHECK-NEXT: "type": "(Swift.Int, Swift.Float)",
4448
// CHECK-NEXT: "isStatic": "false",
4549
// CHECK-NEXT: "isComputed": "false",
50+
// CHECK-NEXT: "valueKind": "RawLiteral",
4651
// CHECK-NEXT: "value": "(42, 6.6)"
4752
// CHECK-NEXT: },
4853
// CHECK-NEXT: {
4954
// CHECK-NEXT: "label": "p9",
5055
// CHECK-NEXT: "type": "[Swift.String : Swift.Int]",
5156
// CHECK-NEXT: "isStatic": "false",
5257
// CHECK-NEXT: "isComputed": "false",
58+
// CHECK-NEXT: "valueKind": "RawLiteral",
5359
// CHECK-NEXT: "value": "[(\"One\", 1), (\"Two\", 2), (\"Three\", 3)]"
5460
// CHECK-NEXT: },
5561
// CHECK-NEXT: {
5662
// CHECK-NEXT: "label": "p0",
5763
// CHECK-NEXT: "type": "Swift.Int",
5864
// CHECK-NEXT: "isStatic": "true",
5965
// CHECK-NEXT: "isComputed": "false",
66+
// CHECK-NEXT: "valueKind": "RawLiteral",
6067
// CHECK-NEXT: "value": "11"
6168
// CHECK-NEXT: },
6269
// CHECK-NEXT: {
6370
// CHECK-NEXT: "label": "p2",
6471
// CHECK-NEXT: "type": "Swift.Float",
6572
// CHECK-NEXT: "isStatic": "true",
6673
// CHECK-NEXT: "isComputed": "false",
74+
// CHECK-NEXT: "valueKind": "RawLiteral",
6775
// CHECK-NEXT: "value": "42.2"
6876
// CHECK-NEXT: },
6977
// CHECK-NEXT: {
7078
// CHECK-NEXT: "label": "p3",
7179
// CHECK-NEXT: "type": "Swift.Int",
7280
// CHECK-NEXT: "isStatic": "false",
7381
// CHECK-NEXT: "isComputed": "true",
82+
// CHECK-NEXT: "valueKind": "RawLiteral",
7483
// CHECK-NEXT: "value": "3"
7584
// CHECK-NEXT: },
7685
// CHECK-NEXT: {
7786
// CHECK-NEXT: "label": "p4",
7887
// CHECK-NEXT: "type": "Swift.Int",
7988
// CHECK-NEXT: "isStatic": "true",
8089
// CHECK-NEXT: "isComputed": "true",
90+
// CHECK-NEXT: "valueKind": "RawLiteral",
8191
// CHECK-NEXT: "value": "3"
8292
// CHECK-NEXT: }
8393
// CHECK-NEXT: ]

0 commit comments

Comments
 (0)