@@ -32,33 +32,29 @@ using namespace swift;
3232 " Patterns are BumpPtrAllocated; the d'tor is never called" );
3333#include " swift/AST/PatternNodes.def"
3434
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+
5252 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;
6055 }
61- llvm_unreachable (" bad PatternKind" );
56+ #undef TRIVIAL_PATTERN_KIND
57+ llvm_unreachable (" bad DescriptivePatternKind" );
6258}
6359
6460StringRef Pattern::getKindName (PatternKind K) {
@@ -69,6 +65,28 @@ StringRef Pattern::getKindName(PatternKind K) {
6965 llvm_unreachable (" bad PatternKind" );
7066}
7167
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+
7290// Metaprogram to verify that every concrete class implements
7391// a 'static bool classof(const Pattern*)'.
7492template <bool fn (const Pattern*)> struct CheckClassOfPattern {
0 commit comments