Skip to content

Commit cf78230

Browse files
dendizDeniz Dizman
andauthored
[Compile Time Constant Extraction] add variadic args extraction support (#85320)
This PR adds support for extracting variadic arguments to allow expressions like ``` @parameter(supportedContentTypes: Array(arrayLiteral: .pdf, .text, .jpeg)) var file: IntentFile ``` resolves rdar://163291725 --------- Co-authored-by: Deniz Dizman <ddizman@apple.com>
1 parent 01360d1 commit cf78230

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

lib/ConstExtract/ConstExtract.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,11 @@ extractCompileTimeValue(Expr *expr, const DeclContext *declContext) {
519519
return extractCompileTimeValue(openExistentialExpr->getExistentialValue(), declContext);
520520
}
521521

522+
case ExprKind::VarargExpansion: {
523+
auto varargExpansionExpr = cast<VarargExpansionExpr>(expr);
524+
return extractCompileTimeValue(varargExpansionExpr->getSubExpr(), declContext);
525+
}
526+
522527
case ExprKind::ForceValue: {
523528
auto forceValueExpr = cast<ForceValueExpr>(expr);
524529
return extractCompileTimeValue(forceValueExpr->getSubExpr(), declContext);
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: echo "[MyProto]" > %t/protocols.json
3+
4+
// RUN: %target-swift-frontend -typecheck -emit-const-values-path %t/ExtractVariadicArgs.swiftconstvalues -const-gather-protocols-file %t/protocols.json -primary-file %s
5+
// RUN: cat %t/ExtractVariadicArgs.swiftconstvalues 2>&1 | %FileCheck %s
6+
7+
protocol MyProto {}
8+
9+
public enum SimpleEnum: MyProto {
10+
static func varargs(args: Int...) -> [Int] {
11+
args
12+
}
13+
}
14+
15+
public struct Driver: MyProto {
16+
static let someInts = SimpleEnum.varargs(args: 1, 2, 3, 4, 5)
17+
}
18+
19+
// CHECK: "typeName": "ExtractVariadicArgs.Driver",
20+
// CHECK: "associatedTypeAliases": [],
21+
// CHECK-NEXT: "properties": [
22+
// CHECK-NEXT: {
23+
// CHECK-NEXT: "label": "someInts",
24+
// CHECK-NEXT: "type": "Swift.Array<Swift.Int>",
25+
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
26+
// CHECK-NEXT: "isStatic": "true",
27+
// CHECK-NEXT: "isComputed": "false",
28+
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractVariadicArgs.swift",
29+
// CHECK-NEXT: "line": 16,
30+
// CHECK-NEXT: "valueKind": "StaticFunctionCall",
31+
// CHECK-NEXT: "value": {
32+
// CHECK-NEXT: "type": "Swift.Array<Swift.Int>",
33+
// CHECK-NEXT: "memberLabel": "varargs",
34+
// CHECK-NEXT: "arguments": [
35+
// CHECK-NEXT: {
36+
// CHECK-NEXT: "label": "args",
37+
// CHECK-NEXT: "type": "Swift.Int...",
38+
// CHECK-NEXT: "valueKind": "Array",
39+
// CHECK-NEXT: "value": [
40+
// CHECK-NEXT: {
41+
// CHECK-NEXT: "valueKind": "RawLiteral",
42+
// CHECK-NEXT: "value": "1"
43+
// CHECK-NEXT: },
44+
// CHECK-NEXT: {
45+
// CHECK-NEXT: "valueKind": "RawLiteral",
46+
// CHECK-NEXT: "value": "2"
47+
// CHECK-NEXT: },
48+
// CHECK-NEXT: {
49+
// CHECK-NEXT: "valueKind": "RawLiteral",
50+
// CHECK-NEXT: "value": "3"
51+
// CHECK-NEXT: },
52+
// CHECK-NEXT: {
53+
// CHECK-NEXT: "valueKind": "RawLiteral",
54+
// CHECK-NEXT: "value": "4"
55+
// CHECK-NEXT: },
56+
// CHECK-NEXT: {
57+
// CHECK-NEXT: "valueKind": "RawLiteral",
58+
// CHECK-NEXT: "value": "5"
59+
// CHECK-NEXT: }
60+
// CHECK-NEXT: ]
61+
// CHECK-NEXT: }
62+
// CHECK-NEXT: ]
63+
// CHECK-NEXT: }
64+
// CHECK-NEXT: }
65+
// CHECK-NEXT: ]

0 commit comments

Comments
 (0)