Skip to content
← Back

src/syntax/process/defaultvisitor.ghul

1
namespace Syntax.Process is
2
use Logging;
3
use Trees;
4
5
// A ScopedVisitor that funnels every node kind the concrete
6
// visitor does not explicitly override into a single default
7
// hook. Deriving from this class inverts the visitor default:
8
// where Visitor silently ignores unhandled node kinds, a
9
// DefaultVisitor subclass opts each node kind *out* of
10
// visit_default by overriding its visit method. Use it for
11
// analyses that must make an explicit decision for every node
12
// kind — e.g. conservative classifications where an unhandled
13
// node has to be assumed to have worst-case behaviour.
14
//
15
// Scope-carrying nodes call visit_default first, while their
16
// scope is still current, and then perform the ScopedVisitor
17
// scope-leave.
18
//
19
// When a new AST node kind gains visit methods on Visitor, add a
20
// matching forwarder here — otherwise the new kind inherits
21
// Visitor's silent no-op and bypasses subclasses' defaults.
22
class DefaultVisitor: ScopedVisitor abstract is
23
init(
24
logger: Logger,
25
symbol_table: Semantic.SYMBOL_TABLE,
26
namespaces: Semantic.NAMESPACES
27
)
28
is
29
super.init(logger, symbol_table, namespaces);
30
si
31
32
// Called for every node kind the concrete visitor does not
33
// explicitly handle.
34
visit_default(node: Trees.Node);
35
36
visit(node: Node) is visit_default(node); si
37
38
visit(identifier: Identifiers.Identifier) is visit_default(identifier); si
39
visit(identifier: Identifiers.QUALIFIED) is visit_default(identifier); si
40
41
visit(modifier: Modifiers.Modifier) is visit_default(modifier); si
42
visit(modifiers: Modifiers.LIST) is visit_default(modifiers); si
43
44
visit(pragma: Pragmas.PRAGMA) is visit_default(pragma); si
45
46
visit(definition: Definitions.Definition) is visit_default(definition); si
47
visit(definitions: Definitions.LIST) is visit_default(definitions); si
48
visit(pragma: Definitions.PRAGMA) is visit_default(pragma); si
49
50
visit(`namespace: Definitions.NAMESPACE) is
51
visit_default(`namespace);
52
super.visit(`namespace);
53
si
54
55
visit(`use: Definitions.USE) is visit_default(`use); si
56
visit(super_call: Definitions.SUPER_CALL) is visit_default(super_call); si
57
58
visit(`class: Definitions.CLASS) is
59
visit_default(`class);
60
super.visit(`class);
61
si
62
63
visit(`trait: Definitions.TRAIT) is
64
visit_default(`trait);
65
super.visit(`trait);
66
si
67
68
visit(`struct: Definitions.STRUCT) is
69
visit_default(`struct);
70
super.visit(`struct);
71
si
72
73
visit(`partial: Definitions.PARTIAL) is
74
visit_default(`partial);
75
super.visit(`partial);
76
si
77
78
visit(`impl: Definitions.IMPL) is
79
visit_default(`impl);
80
super.visit(`impl);
81
si
82
83
visit(`union: Definitions.UNION) is
84
visit_default(`union);
85
super.visit(`union);
86
si
87
88
visit(variant: Definitions.VARIANT) is
89
visit_default(variant);
90
super.visit(variant);
91
si
92
93
visit(`enum: Definitions.ENUM) is
94
visit_default(`enum);
95
super.visit(`enum);
96
si
97
98
visit(enum_member: Definitions.ENUM_MEMBER) is visit_default(enum_member); si
99
100
visit(function: Definitions.FUNCTION) is
101
visit_default(function);
102
super.visit(function);
103
si
104
105
visit(functions: Definitions.FUNCTION_GROUP) is visit_default(functions); si
106
visit(property: Definitions.PROPERTY) is visit_default(property); si
107
visit(indexer: Definitions.INDEXER) is visit_default(indexer); si
108
109
visit(variable: Variables.VARIABLE) is visit_default(variable); si
110
visit(variables: Variables.LIST) is visit_default(variables); si
111
visit(left: Trees.Variables.SIMPLE_VARIABLE_LEFT) is visit_default(left); si
112
visit(destructure_left: Trees.Variables.DESTRUCTURING_VARIABLE_LEFT) is visit_default(destructure_left); si
113
visit(left: Trees.Variables.LITERAL_VARIABLE_LEFT) is visit_default(left); si
114
115
visit(type_expression: TypeExpressions.TypeExpression) is visit_default(type_expression); si
116
visit(type_expression: TypeExpressions.INFER) is visit_default(type_expression); si
117
visit(structured: TypeExpressions.Structured) is visit_default(structured); si
118
visit(array: TypeExpressions.ARRAY_) is visit_default(array); si
119
visit(pointer: TypeExpressions.POINTER) is visit_default(pointer); si
120
visit(optional: TypeExpressions.OPTIONAL) is visit_default(optional); si
121
visit(reference: TypeExpressions.REFERENCE) is visit_default(reference); si
122
visit(member: TypeExpressions.MEMBER) is visit_default(member); si
123
visit(named: TypeExpressions.NAMED) is visit_default(named); si
124
visit(types: TypeExpressions.LIST) is visit_default(types); si
125
visit(generic: TypeExpressions.GENERIC) is visit_default(generic); si
126
visit(function: TypeExpressions.FUNCTION) is visit_default(function); si
127
visit(functions: TypeExpressions.FUNCTION_GROUP) is visit_default(functions); si
128
visit(tuple: TypeExpressions.TUPLE) is visit_default(tuple); si
129
visit(element: TypeExpressions.NAMED_TUPLE_ELEMENT) is visit_default(element); si
130
visit(element: TypeExpressions.UNDEFINED) is visit_default(element); si
131
visit(constraint: TypeExpressions.TYPE_PARAMETER_CONSTRAINT) is visit_default(constraint); si
132
133
visit(expression: Expressions.Expression) is visit_default(expression); si
134
visit(identifier: Expressions.IDENTIFIER) is visit_default(identifier); si
135
visit(literal: Expressions.Literals.Literal) is visit_default(literal); si
136
visit(`string: Expressions.Literals.STRING) is visit_default(`string); si
137
visit(interpolation: Expressions.STRING_INTERPOLATION) is visit_default(interpolation); si
138
visit(integer: Expressions.Literals.INTEGER) is visit_default(integer); si
139
visit(float: Expressions.Literals.FLOAT) is visit_default(float); si
140
visit(character: Expressions.Literals.CHARACTER) is visit_default(character); si
141
visit(boolean: Expressions.Literals.BOOLEAN) is visit_default(boolean); si
142
visit(none: Expressions.Literals.NONE) is visit_default(none); si
143
visit(variable: Expressions.VARIABLE) is visit_default(variable); si
144
visit(variable: Expressions.TUPLE_ELEMENT) is visit_default(variable); si
145
visit(`null: Expressions.NULL) is visit_default(`null); si
146
visit(`self: Expressions.SELF) is visit_default(`self); si
147
visit(`super: Expressions.SUPER) is visit_default(`super); si
148
visit(`new: Expressions.NEW) is visit_default(`new); si
149
visit(`cast: Expressions.CAST) is visit_default(`cast); si
150
visit(`await: Expressions.AWAIT) is visit_default(`await); si
151
visit(spill: Expressions.SPILL) is visit_default(spill); si
152
visit(`isa: Expressions.ISA) is visit_default(`isa); si
153
visit(`isa: Expressions.TYPEOF) is visit_default(`isa); si
154
visit(`default: Expressions.DEFAULT) is visit_default(`default); si
155
156
visit(function: Expressions.FUNCTION) is
157
visit_default(function);
158
super.visit(function);
159
si
160
161
visit(recurse: Expressions.RECURSE) is visit_default(recurse); si
162
visit(tuple: Expressions.TUPLE) is visit_default(tuple); si
163
visit(sequence: Expressions.SEQUENCE) is visit_default(sequence); si
164
visit(list: Expressions.LIST) is visit_default(list); si
165
visit(call: Expressions.CALL) is visit_default(call); si
166
visit(member: Expressions.MEMBER) is visit_default(member); si
167
visit(member: Expressions.EXPLICIT_SPECIALIZATION) is visit_default(member); si
168
visit(ambiguous_expression: Expressions.AMBIGUOUS_EXPRESSION) is visit_default(ambiguous_expression); si
169
visit(ambiguous_expression: Expressions.GENERIC_APPLICATION) is visit_default(ambiguous_expression); si
170
visit(index: Expressions.INDEX) is visit_default(index); si
171
visit(has_value: Expressions.HAS_VALUE) is visit_default(has_value); si
172
visit(unwrap: Expressions.UNWRAP) is visit_default(unwrap); si
173
visit(reference: Expressions.REFERENCE) is visit_default(reference); si
174
visit(unary: Expressions.UNARY) is visit_default(unary); si
175
visit(binary: Expressions.BINARY) is visit_default(binary); si
176
visit(statement: Expressions.STATEMENT) is visit_default(statement); si
177
178
visit(statement: Expressions.LET_IN) is
179
visit_default(statement);
180
super.visit(statement);
181
si
182
183
visit(block: Expressions.VAL_BLOCK) is visit_default(block); si
184
visit(assert_in: Expressions.ASSERT_IN) is visit_default(assert_in); si
185
186
visit(left: Trees.Expressions.SIMPLE_LEFT_EXPRESSION) is visit_default(left); si
187
visit(destructure_left: Trees.Expressions.DESTRUCTURING_LEFT_EXPRESSION) is visit_default(destructure_left); si
188
189
visit(statement: Statements.Statement) is visit_default(statement); si
190
visit(statements: Statements.LIST) is visit_default(statements); si
191
visit(l: Statements.LET) is visit_default(l); si
192
visit(assign: Statements.ASSIGNMENT) is visit_default(assign); si
193
visit(expression: Statements.EXPRESSION) is visit_default(expression); si
194
visit(`return: Statements.RETURN) is visit_default(`return); si
195
visit(`throw: Statements.THROW) is visit_default(`throw); si
196
visit(`yield: Statements.YIELD) is visit_default(`yield); si
197
visit(`assert: Statements.ASSERT) is visit_default(`assert); si
198
visit(`if: Statements.IF) is visit_default(`if); si
199
200
visit(if_branch: Statements.IF_BRANCH) is
201
visit_default(if_branch);
202
super.visit(if_branch);
203
si
204
205
visit(rb: Statements.REFUTABLE_BINDING) is visit_default(rb); si
206
207
visit(`case: Statements.CASE) is
208
visit_default(`case);
209
super.visit(`case);
210
si
211
212
visit(case_match: Statements.CASE_MATCH) is
213
visit_default(case_match);
214
super.visit(case_match);
215
si
216
217
visit(`try: Statements.TRY) is
218
visit_default(`try);
219
super.visit(`try);
220
si
221
222
visit(`catch: Statements.CATCH) is
223
visit_default(`catch);
224
super.visit(`catch);
225
si
226
227
visit(`do: Statements.DO) is
228
visit_default(`do);
229
super.visit(`do);
230
si
231
232
visit(`for: Statements.FOR) is
233
visit_default(`for);
234
super.visit(`for);
235
si
236
237
visit(labelled: Statements.LABELLED) is
238
visit_default(labelled);
239
super.visit(labelled);
240
si
241
242
visit(`break: Statements.BREAK) is visit_default(`break); si
243
visit(`continue: Statements.CONTINUE) is visit_default(`continue); si
244
visit(pragma: Statements.PRAGMA) is visit_default(pragma); si
245
246
visit(expression: Bodies.EXPRESSION) is
247
visit_default(expression);
248
super.visit(expression);
249
si
250
251
visit(block: Bodies.BLOCK) is
252
visit_default(block);
253
super.visit(block);
254
si
255
256
visit(block: Bodies.NULL) is visit_default(block); si
257
visit(block: Bodies.INNATE) is visit_default(block); si
258
si
259
si