@@ -32,33 +32,29 @@ using namespace swift;
32
32
" Patterns are BumpPtrAllocated; the d'tor is never called" );
33
33
#include " swift/AST/PatternNodes.def"
34
34
35
- // / Diagnostic printing of PatternKinds.
36
- llvm::raw_ostream &swift:: operator <<(llvm::raw_ostream &OS, PatternKind kind) {
37
- switch (kind) {
38
- case PatternKind::Paren:
39
- return OS << " parenthesized pattern " ;
40
- case PatternKind::Tuple:
41
- return OS << " tuple pattern " ;
42
- case PatternKind::Named:
43
- return OS << " pattern variable binding " ;
44
- case PatternKind:: Any:
45
- return OS << " '_' pattern " ;
46
- case PatternKind::Typed:
47
- return OS << " pattern type annotation " ;
48
- case PatternKind::Is:
49
- return OS << " prefix 'is' pattern " ;
50
- case PatternKind:: Expr:
51
- return OS << " expression pattern " ;
35
+ DescriptivePatternKind Pattern::getDescriptiveKind () const {
36
+ # define TRIVIAL_PATTERN_KIND ( Kind ) \
37
+ case PatternKind::Kind: \
38
+ return DescriptivePatternKind::Kind
39
+
40
+ switch ( getKind ()) {
41
+ TRIVIAL_PATTERN_KIND (Paren) ;
42
+ TRIVIAL_PATTERN_KIND (Tuple);
43
+ TRIVIAL_PATTERN_KIND (Named) ;
44
+ TRIVIAL_PATTERN_KIND ( Any);
45
+ TRIVIAL_PATTERN_KIND (Typed) ;
46
+ TRIVIAL_PATTERN_KIND (Is);
47
+ TRIVIAL_PATTERN_KIND (EnumElement) ;
48
+ TRIVIAL_PATTERN_KIND (OptionalSome);
49
+ TRIVIAL_PATTERN_KIND (Bool) ;
50
+ TRIVIAL_PATTERN_KIND ( Expr);
51
+
52
52
case PatternKind::Binding:
53
- return OS << " 'var' binding pattern" ;
54
- case PatternKind::EnumElement:
55
- return OS << " enum case matching pattern" ;
56
- case PatternKind::OptionalSome:
57
- return OS << " optional .Some matching pattern" ;
58
- case PatternKind::Bool:
59
- return OS << " bool matching pattern" ;
53
+ return cast<BindingPattern>(this )->isLet () ? DescriptivePatternKind::Let
54
+ : DescriptivePatternKind::Var;
60
55
}
61
- llvm_unreachable (" bad PatternKind" );
56
+ #undef TRIVIAL_PATTERN_KIND
57
+ llvm_unreachable (" bad DescriptivePatternKind" );
62
58
}
63
59
64
60
StringRef Pattern::getKindName (PatternKind K) {
@@ -69,6 +65,28 @@ StringRef Pattern::getKindName(PatternKind K) {
69
65
llvm_unreachable (" bad PatternKind" );
70
66
}
71
67
68
+ StringRef Pattern::getDescriptivePatternKindName (DescriptivePatternKind K) {
69
+ #define ENTRY (Kind, String ) \
70
+ case DescriptivePatternKind::Kind: \
71
+ return String
72
+ switch (K) {
73
+ ENTRY (Paren, " parenthesized pattern" );
74
+ ENTRY (Tuple, " tuple pattern" );
75
+ ENTRY (Named, " pattern variable binding" );
76
+ ENTRY (Any, " '_' pattern" );
77
+ ENTRY (Typed, " pattern type annotation" );
78
+ ENTRY (Is, " prefix 'is' pattern" );
79
+ ENTRY (EnumElement, " enum case matching pattern" );
80
+ ENTRY (OptionalSome, " optional pattern" );
81
+ ENTRY (Bool, " bool matching pattern" );
82
+ ENTRY (Expr, " expression pattern" );
83
+ ENTRY (Var, " 'var' binding pattern" );
84
+ ENTRY (Let, " 'let' binding pattern" );
85
+ }
86
+ #undef ENTRY
87
+ llvm_unreachable (" bad DescriptivePatternKind" );
88
+ }
89
+
72
90
// Metaprogram to verify that every concrete class implements
73
91
// a 'static bool classof(const Pattern*)'.
74
92
template <bool fn (const Pattern*)> struct CheckClassOfPattern {
0 commit comments