@@ -36,80 +36,48 @@ public protocol SyntaxTransformVisitor {
36
36
}
37
37
38
38
extension SyntaxTransformVisitor {
39
- public func visit( _ token: TokenSyntax ) -> ResultType { visitAny ( Syntax ( token) ) }
40
- public func visit( _ node: UnknownSyntax ) -> ResultType { visitAny ( Syntax ( node) ) }
39
+ public func visit( _ token: TokenSyntax ) -> ResultType {
40
+ visitAny ( Syntax ( token) )
41
+ }
42
+
43
+ public func visit( _ node: UnknownSyntax ) -> ResultType {
44
+ visitAny ( Syntax ( node) )
45
+ }
41
46
42
47
% for node in SYNTAX_NODES:
43
48
% if is_visitable( node) :
44
49
/// Visiting `${node.name}` specifically.
45
50
/// - Parameter node: the node we are visiting.
46
51
/// - Returns: nil by default.
47
52
public func visit( _ node: ${ node. name} ) -> ResultType {
48
- visitAny ( Syntax ( node) )
53
+ visitAny ( Syntax ( node) )
49
54
}
50
55
% end
51
56
% end
52
57
53
- public func visit( _ data: Syntax ) -> ResultType {
54
- switch data. raw. kind {
55
- case . token:
56
- let node = TokenSyntax ( data) !
58
+ public func visit( _ node: Syntax ) -> ResultType {
59
+ switch node. as ( SyntaxEnum . self) {
60
+ case . token( let node) :
57
61
return visit ( node)
58
- case . unknown:
59
- let node = UnknownSyntax ( data) !
62
+ case . unknown( let node) :
60
63
return visit ( node)
61
- // The implementation of every generated case goes into its own function. This
62
- // circumvents an issue where the compiler allocates stack space for every
63
- // case statement next to each other in debug builds, causing it to allocate
64
- // ~50KB per call to this function. rdar://55929175
65
- % for node in NON_BASE_SYNTAX_NODES:
66
- case . ${ node. swift_syntax_kind} :
67
- let node = ${ node. name} ( data) !
68
- return visit ( node)
69
- % end
64
+ % for node in NON_BASE_SYNTAX_NODES:
65
+ case . ${ node. swift_syntax_kind} ( let derived) :
66
+ return visit ( derived)
67
+ % end
70
68
}
71
69
}
72
70
73
- public func visit( _ data: ExprSyntax ) -> ResultType {
74
- switch data. raw. kind {
75
- % for node in NON_BASE_SYNTAX_NODES:
76
- % if node. base_kind == " Expr " :
77
- case . ${ node. swift_syntax_kind} :
78
- let node = data. as ( ${ node. name} . self) !
79
- return visit ( node)
80
- % end
81
- % end
82
- default :
83
- fatalError ( " Not expression? " )
84
- }
71
+ public func visit( _ node: ExprSyntax ) -> ResultType {
72
+ visit ( Syntax ( node) )
85
73
}
86
74
87
- public func visit( _ data: PatternSyntax ) -> ResultType {
88
- switch data. raw. kind {
89
- % for node in NON_BASE_SYNTAX_NODES:
90
- % if node. base_kind == " Pattern " :
91
- case . ${ node. swift_syntax_kind} :
92
- let node = data. as ( ${ node. name} . self) !
93
- return visit ( node)
94
- % end
95
- % end
96
- default :
97
- fatalError ( " Not expression? " )
98
- }
75
+ public func visit( _ node: PatternSyntax ) -> ResultType {
76
+ visit ( Syntax ( node) )
99
77
}
100
78
101
- public func visit( _ data: TypeSyntax ) -> ResultType {
102
- switch data. raw. kind {
103
- % for node in NON_BASE_SYNTAX_NODES:
104
- % if node. base_kind == " Type " :
105
- case . ${ node. swift_syntax_kind} :
106
- let node = data. as ( ${ node. name} . self) !
107
- return visit ( node)
108
- % end
109
- % end
110
- default :
111
- fatalError ( " Not expression? " )
112
- }
79
+ public func visit( _ node: TypeSyntax ) -> ResultType {
80
+ visit ( Syntax ( node) )
113
81
}
114
82
115
83
public func visitChildren< SyntaxType: SyntaxProtocol > ( _ node: SyntaxType ) -> [ ResultType ] {
0 commit comments