1 // Copyright (c) Facebook, Inc. and its affiliates.
3 // This source code is licensed under the MIT license found in the
4 // LICENSE file in the "hack" directory of this source tree.
6 // @generated SignedSource<<4a03985cc99e8e308368559378f08e12>>
8 // To regenerate this file, run:
9 // hphp/hack/src/oxidized_regen.sh
11 #![allow(unused_variables)]
12 use super::node_mut::NodeMut;
13 use super::type_params::Params;
14 use super::visitor_mut::VisitorMut;
15 use crate::{aast::*, aast_defs::*, ast_defs::*, doc_comment::*};
16 impl<P: Params> NodeMut<P> for Afield<P::Ex, P::Fb, P::En, P::Hi> {
20 v: &mut dyn VisitorMut<'node, P = P>,
21 ) -> Result<(), P::Error> {
22 v.visit_afield(c, self)
27 v: &mut dyn VisitorMut<'node, P = P>,
28 ) -> Result<(), P::Error> {
30 Afield::AFvalue(a0) => {
34 Afield::AFkvalue(a0, a1) => {
42 impl<P: Params> NodeMut<P> for AsExpr<P::Ex, P::Fb, P::En, P::Hi> {
46 v: &mut dyn VisitorMut<'node, P = P>,
47 ) -> Result<(), P::Error> {
48 v.visit_as_expr(c, self)
53 v: &mut dyn VisitorMut<'node, P = P>,
54 ) -> Result<(), P::Error> {
60 AsExpr::AsKv(a0, a1) => {
65 AsExpr::AwaitAsV(a0, a1) => {
70 AsExpr::AwaitAsKv(a0, a1, a2) => {
79 impl<P: Params> NodeMut<P> for Bop {
83 v: &mut dyn VisitorMut<'node, P = P>,
84 ) -> Result<(), P::Error> {
90 v: &mut dyn VisitorMut<'node, P = P>,
91 ) -> Result<(), P::Error> {
98 Bop::Eqeqeq => Ok(()),
99 Bop::Starstar => Ok(()),
101 Bop::Diff2 => Ok(()),
102 Bop::Ampamp => Ok(()),
103 Bop::Barbar => Ok(()),
113 Bop::Percent => Ok(()),
116 Bop::QuestionQuestion => Ok(()),
124 impl<P: Params> NodeMut<P> for CaField<P::Ex, P::Fb, P::En, P::Hi> {
128 v: &mut dyn VisitorMut<'node, P = P>,
129 ) -> Result<(), P::Error> {
130 v.visit_ca_field(c, self)
135 v: &mut dyn VisitorMut<'node, P = P>,
136 ) -> Result<(), P::Error> {
137 self.type_.accept(c, v)?;
138 self.id.accept(c, v)?;
139 self.value.accept(c, v)?;
140 self.required.accept(c, v)?;
144 impl<P: Params> NodeMut<P> for CaType {
148 v: &mut dyn VisitorMut<'node, P = P>,
149 ) -> Result<(), P::Error> {
150 v.visit_ca_type(c, self)
155 v: &mut dyn VisitorMut<'node, P = P>,
156 ) -> Result<(), P::Error> {
158 CaType::CAHint(a0) => {
162 CaType::CAEnum(a0) => {
169 impl<P: Params> NodeMut<P> for Case<P::Ex, P::Fb, P::En, P::Hi> {
173 v: &mut dyn VisitorMut<'node, P = P>,
174 ) -> Result<(), P::Error> {
175 v.visit_case(c, self)
180 v: &mut dyn VisitorMut<'node, P = P>,
181 ) -> Result<(), P::Error> {
183 Case::Default(a0, a1) => {
188 Case::Case(a0, a1) => {
196 impl<P: Params> NodeMut<P> for Catch<P::Ex, P::Fb, P::En, P::Hi> {
200 v: &mut dyn VisitorMut<'node, P = P>,
201 ) -> Result<(), P::Error> {
202 v.visit_catch(c, self)
207 v: &mut dyn VisitorMut<'node, P = P>,
208 ) -> Result<(), P::Error> {
209 self.0.accept(c, v)?;
210 self.1.accept(c, v)?;
211 self.2.accept(c, v)?;
215 impl<P: Params> NodeMut<P> for ClassAttr<P::Ex, P::Fb, P::En, P::Hi> {
219 v: &mut dyn VisitorMut<'node, P = P>,
220 ) -> Result<(), P::Error> {
221 v.visit_class_attr(c, self)
226 v: &mut dyn VisitorMut<'node, P = P>,
227 ) -> Result<(), P::Error> {
229 ClassAttr::CAName(a0) => {
233 ClassAttr::CAField(a0) => {
240 impl<P: Params> NodeMut<P> for ClassConst<P::Ex, P::Fb, P::En, P::Hi> {
244 v: &mut dyn VisitorMut<'node, P = P>,
245 ) -> Result<(), P::Error> {
246 v.visit_class_const(c, self)
251 v: &mut dyn VisitorMut<'node, P = P>,
252 ) -> Result<(), P::Error> {
253 self.type_.accept(c, v)?;
254 self.id.accept(c, v)?;
255 self.expr.accept(c, v)?;
256 self.doc_comment.accept(c, v)?;
260 impl<P: Params> NodeMut<P> for ClassGetExpr<P::Ex, P::Fb, P::En, P::Hi> {
264 v: &mut dyn VisitorMut<'node, P = P>,
265 ) -> Result<(), P::Error> {
266 v.visit_class_get_expr(c, self)
271 v: &mut dyn VisitorMut<'node, P = P>,
272 ) -> Result<(), P::Error> {
274 ClassGetExpr::CGstring(a0) => {
278 ClassGetExpr::CGexpr(a0) => {
285 impl<P: Params> NodeMut<P> for ClassId<P::Ex, P::Fb, P::En, P::Hi> {
289 v: &mut dyn VisitorMut<'node, P = P>,
290 ) -> Result<(), P::Error> {
291 v.visit_class_id(c, self)
296 v: &mut dyn VisitorMut<'node, P = P>,
297 ) -> Result<(), P::Error> {
298 v.visit_ex(c, &mut self.0)?;
299 self.1.accept(c, v)?;
303 impl<P: Params> NodeMut<P> for ClassId_<P::Ex, P::Fb, P::En, P::Hi> {
307 v: &mut dyn VisitorMut<'node, P = P>,
308 ) -> Result<(), P::Error> {
309 v.visit_class_id_(c, self)
314 v: &mut dyn VisitorMut<'node, P = P>,
315 ) -> Result<(), P::Error> {
317 ClassId_::CIparent => Ok(()),
318 ClassId_::CIself => Ok(()),
319 ClassId_::CIstatic => Ok(()),
320 ClassId_::CIexpr(a0) => {
324 ClassId_::CI(a0) => {
331 impl<P: Params> NodeMut<P> for ClassKind {
335 v: &mut dyn VisitorMut<'node, P = P>,
336 ) -> Result<(), P::Error> {
337 v.visit_class_kind(c, self)
342 v: &mut dyn VisitorMut<'node, P = P>,
343 ) -> Result<(), P::Error> {
345 ClassKind::Cabstract => Ok(()),
346 ClassKind::Cnormal => Ok(()),
347 ClassKind::Cinterface => Ok(()),
348 ClassKind::Ctrait => Ok(()),
349 ClassKind::Cenum => Ok(()),
353 impl<P: Params> NodeMut<P> for ClassTypeconst<P::Ex, P::Fb, P::En, P::Hi> {
357 v: &mut dyn VisitorMut<'node, P = P>,
358 ) -> Result<(), P::Error> {
359 v.visit_class_typeconst(c, self)
364 v: &mut dyn VisitorMut<'node, P = P>,
365 ) -> Result<(), P::Error> {
366 self.abstract_.accept(c, v)?;
367 self.name.accept(c, v)?;
368 self.as_constraint.accept(c, v)?;
369 self.super_constraint.accept(c, v)?;
370 self.type_.accept(c, v)?;
371 self.user_attributes.accept(c, v)?;
372 self.span.accept(c, v)?;
373 self.doc_comment.accept(c, v)?;
374 self.is_ctx.accept(c, v)?;
378 impl<P: Params> NodeMut<P> for ClassVar<P::Ex, P::Fb, P::En, P::Hi> {
382 v: &mut dyn VisitorMut<'node, P = P>,
383 ) -> Result<(), P::Error> {
384 v.visit_class_var(c, self)
389 v: &mut dyn VisitorMut<'node, P = P>,
390 ) -> Result<(), P::Error> {
391 self.final_.accept(c, v)?;
392 self.xhp_attr.accept(c, v)?;
393 self.abstract_.accept(c, v)?;
394 self.readonly.accept(c, v)?;
395 self.visibility.accept(c, v)?;
396 self.type_.accept(c, v)?;
397 self.id.accept(c, v)?;
398 self.expr.accept(c, v)?;
399 self.user_attributes.accept(c, v)?;
400 self.doc_comment.accept(c, v)?;
401 self.is_promoted_variadic.accept(c, v)?;
402 self.is_static.accept(c, v)?;
403 self.span.accept(c, v)?;
407 impl<P: Params> NodeMut<P> for Class_<P::Ex, P::Fb, P::En, P::Hi> {
411 v: &mut dyn VisitorMut<'node, P = P>,
412 ) -> Result<(), P::Error> {
413 v.visit_class_(c, self)
418 v: &mut dyn VisitorMut<'node, P = P>,
419 ) -> Result<(), P::Error> {
420 self.span.accept(c, v)?;
421 v.visit_en(c, &mut self.annotation)?;
422 self.mode.accept(c, v)?;
423 self.final_.accept(c, v)?;
424 self.is_xhp.accept(c, v)?;
425 self.has_xhp_keyword.accept(c, v)?;
426 self.kind.accept(c, v)?;
427 self.name.accept(c, v)?;
428 self.tparams.accept(c, v)?;
429 self.extends.accept(c, v)?;
430 self.uses.accept(c, v)?;
431 self.use_as_alias.accept(c, v)?;
432 self.insteadof_alias.accept(c, v)?;
433 self.xhp_attr_uses.accept(c, v)?;
434 self.xhp_category.accept(c, v)?;
435 self.reqs.accept(c, v)?;
436 self.implements.accept(c, v)?;
437 self.implements_dynamic.accept(c, v)?;
438 self.where_constraints.accept(c, v)?;
439 self.consts.accept(c, v)?;
440 self.typeconsts.accept(c, v)?;
441 self.vars.accept(c, v)?;
442 self.methods.accept(c, v)?;
443 self.attributes.accept(c, v)?;
444 self.xhp_children.accept(c, v)?;
445 self.xhp_attrs.accept(c, v)?;
446 self.namespace.accept(c, v)?;
447 self.user_attributes.accept(c, v)?;
448 self.file_attributes.accept(c, v)?;
449 self.enum_.accept(c, v)?;
450 self.doc_comment.accept(c, v)?;
451 self.emit_id.accept(c, v)?;
455 impl<P: Params> NodeMut<P> for CollectionTarg<P::Hi> {
459 v: &mut dyn VisitorMut<'node, P = P>,
460 ) -> Result<(), P::Error> {
461 v.visit_collection_targ(c, self)
466 v: &mut dyn VisitorMut<'node, P = P>,
467 ) -> Result<(), P::Error> {
469 CollectionTarg::CollectionTV(a0) => {
473 CollectionTarg::CollectionTKV(a0, a1) => {
481 impl<P: Params> NodeMut<P> for ConstraintKind {
485 v: &mut dyn VisitorMut<'node, P = P>,
486 ) -> Result<(), P::Error> {
487 v.visit_constraint_kind(c, self)
492 v: &mut dyn VisitorMut<'node, P = P>,
493 ) -> Result<(), P::Error> {
495 ConstraintKind::ConstraintAs => Ok(()),
496 ConstraintKind::ConstraintEq => Ok(()),
497 ConstraintKind::ConstraintSuper => Ok(()),
501 impl<P: Params> NodeMut<P> for Contexts {
505 v: &mut dyn VisitorMut<'node, P = P>,
506 ) -> Result<(), P::Error> {
507 v.visit_contexts(c, self)
512 v: &mut dyn VisitorMut<'node, P = P>,
513 ) -> Result<(), P::Error> {
514 self.0.accept(c, v)?;
515 self.1.accept(c, v)?;
519 impl<P: Params> NodeMut<P> for Def<P::Ex, P::Fb, P::En, P::Hi> {
523 v: &mut dyn VisitorMut<'node, P = P>,
524 ) -> Result<(), P::Error> {
530 v: &mut dyn VisitorMut<'node, P = P>,
531 ) -> Result<(), P::Error> {
541 Def::RecordDef(a0) => {
549 Def::Typedef(a0) => {
553 Def::Constant(a0) => {
557 Def::Namespace(a) => {
562 Def::NamespaceUse(a0) => {
566 Def::SetNamespaceEnv(a0) => {
570 Def::FileAttributes(a0) => {
577 impl<P: Params> NodeMut<P> for DocComment {
581 v: &mut dyn VisitorMut<'node, P = P>,
582 ) -> Result<(), P::Error> {
583 v.visit_doc_comment(c, self)
588 v: &mut dyn VisitorMut<'node, P = P>,
589 ) -> Result<(), P::Error> {
590 self.0.accept(c, v)?;
594 impl<P: Params> NodeMut<P> for EmitId {
598 v: &mut dyn VisitorMut<'node, P = P>,
599 ) -> Result<(), P::Error> {
600 v.visit_emit_id(c, self)
605 v: &mut dyn VisitorMut<'node, P = P>,
606 ) -> Result<(), P::Error> {
608 EmitId::EmitId(a0) => {
612 EmitId::Anonymous => Ok(()),
616 impl<P: Params> NodeMut<P> for Enum_ {
620 v: &mut dyn VisitorMut<'node, P = P>,
621 ) -> Result<(), P::Error> {
622 v.visit_enum_(c, self)
627 v: &mut dyn VisitorMut<'node, P = P>,
628 ) -> Result<(), P::Error> {
629 self.base.accept(c, v)?;
630 self.constraint.accept(c, v)?;
631 self.includes.accept(c, v)?;
632 self.enum_class.accept(c, v)?;
636 impl<P: Params> NodeMut<P> for EnvAnnot {
640 v: &mut dyn VisitorMut<'node, P = P>,
641 ) -> Result<(), P::Error> {
642 v.visit_env_annot(c, self)
647 v: &mut dyn VisitorMut<'node, P = P>,
648 ) -> Result<(), P::Error> {
650 EnvAnnot::Join => Ok(()),
651 EnvAnnot::Refinement => Ok(()),
655 impl<P: Params> NodeMut<P> for Expr<P::Ex, P::Fb, P::En, P::Hi> {
659 v: &mut dyn VisitorMut<'node, P = P>,
660 ) -> Result<(), P::Error> {
661 v.visit_expr(c, self)
666 v: &mut dyn VisitorMut<'node, P = P>,
667 ) -> Result<(), P::Error> {
668 v.visit_ex(c, &mut self.0)?;
669 self.1.accept(c, v)?;
673 impl<P: Params> NodeMut<P> for Expr_<P::Ex, P::Fb, P::En, P::Hi> {
677 v: &mut dyn VisitorMut<'node, P = P>,
678 ) -> Result<(), P::Error> {
679 v.visit_expr_(c, self)
684 v: &mut dyn VisitorMut<'node, P = P>,
685 ) -> Result<(), P::Error> {
687 Expr_::Darray(a) => {
692 Expr_::Varray(a) => {
697 Expr_::Shape(a0) => {
701 Expr_::ValCollection(a) => {
707 Expr_::KeyValCollection(a) => {
713 Expr_::Null => Ok(()),
714 Expr_::This => Ok(()),
715 Expr_::True => Ok(()),
716 Expr_::False => Ok(()),
717 Expr_::Omitted => Ok(()),
726 Expr_::Dollardollar(a0) => {
730 Expr_::Clone(a0) => {
734 Expr_::ArrayGet(a) => {
739 Expr_::ObjGet(a) => {
746 Expr_::ClassGet(a) => {
752 Expr_::ClassConst(a) => {
764 Expr_::FunctionPointer(a) => {
773 Expr_::Float(a0) => {
777 Expr_::String(a0) => {
781 Expr_::String2(a0) => {
785 Expr_::PrefixedString(a) => {
790 Expr_::Yield(a0) => {
794 Expr_::Await(a0) => {
798 Expr_::ReadonlyExpr(a0) => {
850 v.visit_ex(c, &mut a.4)?;
853 Expr_::Record(a) => {
874 Expr_::Callconv(a) => {
879 Expr_::Import(a) => {
884 Expr_::Collection(a) => {
890 Expr_::ExpressionTree(a0) => {
894 Expr_::Lplaceholder(a0) => {
898 Expr_::FunId(a0) => {
902 Expr_::MethodId(a) => {
907 Expr_::MethodCaller(a) => {
912 Expr_::SmethodId(a) => {
923 Expr_::ETSplice(a0) => {
927 Expr_::EnumAtom(a0) => {
931 Expr_::Any => Ok(()),
934 v.visit_hi(c, &mut a.1)?;
935 v.visit_hi(c, &mut a.2)?;
942 impl<P: Params> NodeMut<P> for ExpressionTree<P::Ex, P::Fb, P::En, P::Hi> {
946 v: &mut dyn VisitorMut<'node, P = P>,
947 ) -> Result<(), P::Error> {
948 v.visit_expression_tree(c, self)
953 v: &mut dyn VisitorMut<'node, P = P>,
954 ) -> Result<(), P::Error> {
955 self.hint.accept(c, v)?;
956 self.desugared_expr.accept(c, v)?;
960 impl<P: Params> NodeMut<P> for Field<P::Ex, P::Fb, P::En, P::Hi> {
964 v: &mut dyn VisitorMut<'node, P = P>,
965 ) -> Result<(), P::Error> {
966 v.visit_field(c, self)
971 v: &mut dyn VisitorMut<'node, P = P>,
972 ) -> Result<(), P::Error> {
973 self.0.accept(c, v)?;
974 self.1.accept(c, v)?;
978 impl<P: Params> NodeMut<P> for FileAttribute<P::Ex, P::Fb, P::En, P::Hi> {
982 v: &mut dyn VisitorMut<'node, P = P>,
983 ) -> Result<(), P::Error> {
984 v.visit_file_attribute(c, self)
989 v: &mut dyn VisitorMut<'node, P = P>,
990 ) -> Result<(), P::Error> {
991 self.user_attributes.accept(c, v)?;
992 self.namespace.accept(c, v)?;
996 impl<P: Params> NodeMut<P> for FunKind {
1000 v: &mut dyn VisitorMut<'node, P = P>,
1001 ) -> Result<(), P::Error> {
1002 v.visit_fun_kind(c, self)
1007 v: &mut dyn VisitorMut<'node, P = P>,
1008 ) -> Result<(), P::Error> {
1010 FunKind::FSync => Ok(()),
1011 FunKind::FAsync => Ok(()),
1012 FunKind::FGenerator => Ok(()),
1013 FunKind::FAsyncGenerator => Ok(()),
1017 impl<P: Params> NodeMut<P> for FunParam<P::Ex, P::Fb, P::En, P::Hi> {
1021 v: &mut dyn VisitorMut<'node, P = P>,
1022 ) -> Result<(), P::Error> {
1023 v.visit_fun_param(c, self)
1028 v: &mut dyn VisitorMut<'node, P = P>,
1029 ) -> Result<(), P::Error> {
1030 v.visit_ex(c, &mut self.annotation)?;
1031 self.type_hint.accept(c, v)?;
1032 self.is_variadic.accept(c, v)?;
1033 self.pos.accept(c, v)?;
1034 self.name.accept(c, v)?;
1035 self.expr.accept(c, v)?;
1036 self.readonly.accept(c, v)?;
1037 self.callconv.accept(c, v)?;
1038 self.user_attributes.accept(c, v)?;
1039 self.visibility.accept(c, v)?;
1043 impl<P: Params> NodeMut<P> for FunVariadicity<P::Ex, P::Fb, P::En, P::Hi> {
1047 v: &mut dyn VisitorMut<'node, P = P>,
1048 ) -> Result<(), P::Error> {
1049 v.visit_fun_variadicity(c, self)
1054 v: &mut dyn VisitorMut<'node, P = P>,
1055 ) -> Result<(), P::Error> {
1057 FunVariadicity::FVvariadicArg(a0) => {
1061 FunVariadicity::FVellipsis(a0) => {
1065 FunVariadicity::FVnonVariadic => Ok(()),
1069 impl<P: Params> NodeMut<P> for Fun_<P::Ex, P::Fb, P::En, P::Hi> {
1073 v: &mut dyn VisitorMut<'node, P = P>,
1074 ) -> Result<(), P::Error> {
1075 v.visit_fun_(c, self)
1080 v: &mut dyn VisitorMut<'node, P = P>,
1081 ) -> Result<(), P::Error> {
1082 self.span.accept(c, v)?;
1083 v.visit_en(c, &mut self.annotation)?;
1084 self.mode.accept(c, v)?;
1085 self.readonly_ret.accept(c, v)?;
1086 self.ret.accept(c, v)?;
1087 self.name.accept(c, v)?;
1088 self.tparams.accept(c, v)?;
1089 self.where_constraints.accept(c, v)?;
1090 self.variadic.accept(c, v)?;
1091 self.params.accept(c, v)?;
1092 self.ctxs.accept(c, v)?;
1093 self.unsafe_ctxs.accept(c, v)?;
1094 self.body.accept(c, v)?;
1095 self.fun_kind.accept(c, v)?;
1096 self.user_attributes.accept(c, v)?;
1097 self.file_attributes.accept(c, v)?;
1098 self.external.accept(c, v)?;
1099 self.namespace.accept(c, v)?;
1100 self.doc_comment.accept(c, v)?;
1101 self.static_.accept(c, v)?;
1105 impl<P: Params> NodeMut<P> for FuncBody<P::Ex, P::Fb, P::En, P::Hi> {
1109 v: &mut dyn VisitorMut<'node, P = P>,
1110 ) -> Result<(), P::Error> {
1111 v.visit_func_body(c, self)
1116 v: &mut dyn VisitorMut<'node, P = P>,
1117 ) -> Result<(), P::Error> {
1118 self.ast.accept(c, v)?;
1119 v.visit_fb(c, &mut self.annotation)?;
1123 impl<P: Params> NodeMut<P> for FunctionPtrId<P::Ex, P::Fb, P::En, P::Hi> {
1127 v: &mut dyn VisitorMut<'node, P = P>,
1128 ) -> Result<(), P::Error> {
1129 v.visit_function_ptr_id(c, self)
1134 v: &mut dyn VisitorMut<'node, P = P>,
1135 ) -> Result<(), P::Error> {
1137 FunctionPtrId::FPId(a0) => {
1141 FunctionPtrId::FPClassConst(a0, a1) => {
1149 impl<P: Params> NodeMut<P> for Gconst<P::Ex, P::Fb, P::En, P::Hi> {
1153 v: &mut dyn VisitorMut<'node, P = P>,
1154 ) -> Result<(), P::Error> {
1155 v.visit_gconst(c, self)
1160 v: &mut dyn VisitorMut<'node, P = P>,
1161 ) -> Result<(), P::Error> {
1162 v.visit_en(c, &mut self.annotation)?;
1163 self.mode.accept(c, v)?;
1164 self.name.accept(c, v)?;
1165 self.type_.accept(c, v)?;
1166 self.value.accept(c, v)?;
1167 self.namespace.accept(c, v)?;
1168 self.span.accept(c, v)?;
1169 self.emit_id.accept(c, v)?;
1173 impl<P: Params> NodeMut<P> for HfParamInfo {
1177 v: &mut dyn VisitorMut<'node, P = P>,
1178 ) -> Result<(), P::Error> {
1179 v.visit_hf_param_info(c, self)
1184 v: &mut dyn VisitorMut<'node, P = P>,
1185 ) -> Result<(), P::Error> {
1186 self.kind.accept(c, v)?;
1187 self.readonlyness.accept(c, v)?;
1191 impl<P: Params> NodeMut<P> for Hint {
1195 v: &mut dyn VisitorMut<'node, P = P>,
1196 ) -> Result<(), P::Error> {
1197 v.visit_hint(c, self)
1202 v: &mut dyn VisitorMut<'node, P = P>,
1203 ) -> Result<(), P::Error> {
1204 self.0.accept(c, v)?;
1205 self.1.accept(c, v)?;
1209 impl<P: Params> NodeMut<P> for HintFun {
1213 v: &mut dyn VisitorMut<'node, P = P>,
1214 ) -> Result<(), P::Error> {
1215 v.visit_hint_fun(c, self)
1220 v: &mut dyn VisitorMut<'node, P = P>,
1221 ) -> Result<(), P::Error> {
1222 self.param_tys.accept(c, v)?;
1223 self.param_info.accept(c, v)?;
1224 self.variadic_ty.accept(c, v)?;
1225 self.ctxs.accept(c, v)?;
1226 self.return_ty.accept(c, v)?;
1227 self.is_readonly_return.accept(c, v)?;
1231 impl<P: Params> NodeMut<P> for Hint_ {
1235 v: &mut dyn VisitorMut<'node, P = P>,
1236 ) -> Result<(), P::Error> {
1237 v.visit_hint_(c, self)
1242 v: &mut dyn VisitorMut<'node, P = P>,
1243 ) -> Result<(), P::Error> {
1245 Hint_::Hoption(a0) => {
1249 Hint_::Hlike(a0) => {
1253 Hint_::Hfun(a0) => {
1257 Hint_::Htuple(a0) => {
1261 Hint_::Happly(a0, a1) => {
1266 Hint_::Hshape(a0) => {
1270 Hint_::Haccess(a0, a1) => {
1275 Hint_::Hsoft(a0) => {
1279 Hint_::Hany => Ok(()),
1280 Hint_::Herr => Ok(()),
1281 Hint_::Hmixed => Ok(()),
1282 Hint_::Hnonnull => Ok(()),
1283 Hint_::Habstr(a0, a1) => {
1288 Hint_::Hdarray(a0, a1) => {
1293 Hint_::Hvarray(a0) => {
1297 Hint_::HvarrayOrDarray(a0, a1) => {
1302 Hint_::HvecOrDict(a0, a1) => {
1307 Hint_::Hprim(a0) => {
1311 Hint_::Hthis => Ok(()),
1312 Hint_::Hdynamic => Ok(()),
1313 Hint_::Hnothing => Ok(()),
1314 Hint_::Hunion(a0) => {
1318 Hint_::Hintersection(a0) => {
1322 Hint_::HfunContext(a0) => {
1326 Hint_::Hvar(a0) => {
1333 impl<P: Params> NodeMut<P> for HoleSource {
1337 v: &mut dyn VisitorMut<'node, P = P>,
1338 ) -> Result<(), P::Error> {
1339 v.visit_hole_source(c, self)
1344 v: &mut dyn VisitorMut<'node, P = P>,
1345 ) -> Result<(), P::Error> {
1347 HoleSource::Typing => Ok(()),
1348 HoleSource::UnsafeCast => Ok(()),
1349 HoleSource::EnforcedCast => Ok(()),
1353 impl<P: Params> NodeMut<P> for Id {
1357 v: &mut dyn VisitorMut<'node, P = P>,
1358 ) -> Result<(), P::Error> {
1364 v: &mut dyn VisitorMut<'node, P = P>,
1365 ) -> Result<(), P::Error> {
1366 self.0.accept(c, v)?;
1367 self.1.accept(c, v)?;
1371 impl<P: Params> NodeMut<P> for ImportFlavor {
1375 v: &mut dyn VisitorMut<'node, P = P>,
1376 ) -> Result<(), P::Error> {
1377 v.visit_import_flavor(c, self)
1382 v: &mut dyn VisitorMut<'node, P = P>,
1383 ) -> Result<(), P::Error> {
1385 ImportFlavor::Include => Ok(()),
1386 ImportFlavor::Require => Ok(()),
1387 ImportFlavor::IncludeOnce => Ok(()),
1388 ImportFlavor::RequireOnce => Ok(()),
1392 impl<P: Params> NodeMut<P> for InsteadofAlias {
1396 v: &mut dyn VisitorMut<'node, P = P>,
1397 ) -> Result<(), P::Error> {
1398 v.visit_insteadof_alias(c, self)
1403 v: &mut dyn VisitorMut<'node, P = P>,
1404 ) -> Result<(), P::Error> {
1405 self.0.accept(c, v)?;
1406 self.1.accept(c, v)?;
1407 self.2.accept(c, v)?;
1411 impl<P: Params> NodeMut<P> for KvcKind {
1415 v: &mut dyn VisitorMut<'node, P = P>,
1416 ) -> Result<(), P::Error> {
1417 v.visit_kvc_kind(c, self)
1422 v: &mut dyn VisitorMut<'node, P = P>,
1423 ) -> Result<(), P::Error> {
1425 KvcKind::Map => Ok(()),
1426 KvcKind::ImmMap => Ok(()),
1427 KvcKind::Dict => Ok(()),
1431 impl<P: Params> NodeMut<P> for Lid {
1435 v: &mut dyn VisitorMut<'node, P = P>,
1436 ) -> Result<(), P::Error> {
1437 v.visit_lid(c, self)
1442 v: &mut dyn VisitorMut<'node, P = P>,
1443 ) -> Result<(), P::Error> {
1444 self.0.accept(c, v)?;
1445 self.1.accept(c, v)?;
1449 impl<P: Params> NodeMut<P> for Method_<P::Ex, P::Fb, P::En, P::Hi> {
1453 v: &mut dyn VisitorMut<'node, P = P>,
1454 ) -> Result<(), P::Error> {
1455 v.visit_method_(c, self)
1460 v: &mut dyn VisitorMut<'node, P = P>,
1461 ) -> Result<(), P::Error> {
1462 self.span.accept(c, v)?;
1463 v.visit_en(c, &mut self.annotation)?;
1464 self.final_.accept(c, v)?;
1465 self.abstract_.accept(c, v)?;
1466 self.static_.accept(c, v)?;
1467 self.readonly_this.accept(c, v)?;
1468 self.visibility.accept(c, v)?;
1469 self.name.accept(c, v)?;
1470 self.tparams.accept(c, v)?;
1471 self.where_constraints.accept(c, v)?;
1472 self.variadic.accept(c, v)?;
1473 self.params.accept(c, v)?;
1474 self.ctxs.accept(c, v)?;
1475 self.unsafe_ctxs.accept(c, v)?;
1476 self.body.accept(c, v)?;
1477 self.fun_kind.accept(c, v)?;
1478 self.user_attributes.accept(c, v)?;
1479 self.readonly_ret.accept(c, v)?;
1480 self.ret.accept(c, v)?;
1481 self.external.accept(c, v)?;
1482 self.doc_comment.accept(c, v)?;
1486 impl<P: Params> NodeMut<P> for NastShapeInfo {
1490 v: &mut dyn VisitorMut<'node, P = P>,
1491 ) -> Result<(), P::Error> {
1492 v.visit_nast_shape_info(c, self)
1497 v: &mut dyn VisitorMut<'node, P = P>,
1498 ) -> Result<(), P::Error> {
1499 self.allows_unknown_fields.accept(c, v)?;
1500 self.field_map.accept(c, v)?;
1504 impl<P: Params> NodeMut<P> for NsKind {
1508 v: &mut dyn VisitorMut<'node, P = P>,
1509 ) -> Result<(), P::Error> {
1510 v.visit_ns_kind(c, self)
1515 v: &mut dyn VisitorMut<'node, P = P>,
1516 ) -> Result<(), P::Error> {
1518 NsKind::NSNamespace => Ok(()),
1519 NsKind::NSClass => Ok(()),
1520 NsKind::NSClassAndNamespace => Ok(()),
1521 NsKind::NSFun => Ok(()),
1522 NsKind::NSConst => Ok(()),
1526 impl<P: Params> NodeMut<P> for OgNullFlavor {
1530 v: &mut dyn VisitorMut<'node, P = P>,
1531 ) -> Result<(), P::Error> {
1532 v.visit_og_null_flavor(c, self)
1537 v: &mut dyn VisitorMut<'node, P = P>,
1538 ) -> Result<(), P::Error> {
1540 OgNullFlavor::OGNullthrows => Ok(()),
1541 OgNullFlavor::OGNullsafe => Ok(()),
1545 impl<P: Params> NodeMut<P> for ParamKind {
1549 v: &mut dyn VisitorMut<'node, P = P>,
1550 ) -> Result<(), P::Error> {
1551 v.visit_param_kind(c, self)
1556 v: &mut dyn VisitorMut<'node, P = P>,
1557 ) -> Result<(), P::Error> {
1559 ParamKind::Pinout => Ok(()),
1563 impl<P: Params> NodeMut<P> for ReadonlyKind {
1567 v: &mut dyn VisitorMut<'node, P = P>,
1568 ) -> Result<(), P::Error> {
1569 v.visit_readonly_kind(c, self)
1574 v: &mut dyn VisitorMut<'node, P = P>,
1575 ) -> Result<(), P::Error> {
1577 ReadonlyKind::Readonly => Ok(()),
1581 impl<P: Params> NodeMut<P> for RecordDef<P::Ex, P::Fb, P::En, P::Hi> {
1585 v: &mut dyn VisitorMut<'node, P = P>,
1586 ) -> Result<(), P::Error> {
1587 v.visit_record_def(c, self)
1592 v: &mut dyn VisitorMut<'node, P = P>,
1593 ) -> Result<(), P::Error> {
1594 v.visit_en(c, &mut self.annotation)?;
1595 self.name.accept(c, v)?;
1596 self.extends.accept(c, v)?;
1597 self.abstract_.accept(c, v)?;
1598 self.fields.accept(c, v)?;
1599 self.user_attributes.accept(c, v)?;
1600 self.namespace.accept(c, v)?;
1601 self.span.accept(c, v)?;
1602 self.doc_comment.accept(c, v)?;
1603 self.emit_id.accept(c, v)?;
1607 impl<P: Params> NodeMut<P> for ReifyKind {
1611 v: &mut dyn VisitorMut<'node, P = P>,
1612 ) -> Result<(), P::Error> {
1613 v.visit_reify_kind(c, self)
1618 v: &mut dyn VisitorMut<'node, P = P>,
1619 ) -> Result<(), P::Error> {
1621 ReifyKind::Erased => Ok(()),
1622 ReifyKind::SoftReified => Ok(()),
1623 ReifyKind::Reified => Ok(()),
1627 impl<P: Params> NodeMut<P> for ShapeFieldInfo {
1631 v: &mut dyn VisitorMut<'node, P = P>,
1632 ) -> Result<(), P::Error> {
1633 v.visit_shape_field_info(c, self)
1638 v: &mut dyn VisitorMut<'node, P = P>,
1639 ) -> Result<(), P::Error> {
1640 self.optional.accept(c, v)?;
1641 self.hint.accept(c, v)?;
1642 self.name.accept(c, v)?;
1646 impl<P: Params> NodeMut<P> for ShapeFieldName {
1650 v: &mut dyn VisitorMut<'node, P = P>,
1651 ) -> Result<(), P::Error> {
1652 v.visit_shape_field_name(c, self)
1657 v: &mut dyn VisitorMut<'node, P = P>,
1658 ) -> Result<(), P::Error> {
1660 ShapeFieldName::SFlitInt(a0) => {
1664 ShapeFieldName::SFlitStr(a0) => {
1668 ShapeFieldName::SFclassConst(a0, a1) => {
1676 impl<P: Params> NodeMut<P> for Stmt<P::Ex, P::Fb, P::En, P::Hi> {
1680 v: &mut dyn VisitorMut<'node, P = P>,
1681 ) -> Result<(), P::Error> {
1682 v.visit_stmt(c, self)
1687 v: &mut dyn VisitorMut<'node, P = P>,
1688 ) -> Result<(), P::Error> {
1689 self.0.accept(c, v)?;
1690 self.1.accept(c, v)?;
1694 impl<P: Params> NodeMut<P> for Stmt_<P::Ex, P::Fb, P::En, P::Hi> {
1698 v: &mut dyn VisitorMut<'node, P = P>,
1699 ) -> Result<(), P::Error> {
1700 v.visit_stmt_(c, self)
1705 v: &mut dyn VisitorMut<'node, P = P>,
1706 ) -> Result<(), P::Error> {
1708 Stmt_::Fallthrough => Ok(()),
1709 Stmt_::Expr(a0) => {
1713 Stmt_::Break => Ok(()),
1714 Stmt_::Continue => Ok(()),
1715 Stmt_::Throw(a0) => {
1719 Stmt_::Return(a0) => {
1723 Stmt_::YieldBreak => Ok(()),
1724 Stmt_::Awaitall(a) => {
1740 Stmt_::While(a) => {
1745 Stmt_::Using(a0) => {
1756 Stmt_::Switch(a) => {
1761 Stmt_::Foreach(a) => {
1773 Stmt_::Noop => Ok(()),
1774 Stmt_::Block(a0) => {
1778 Stmt_::Markup(a0) => {
1782 Stmt_::AssertEnv(a) => {
1790 impl<P: Params> NodeMut<P> for Targ<P::Hi> {
1794 v: &mut dyn VisitorMut<'node, P = P>,
1795 ) -> Result<(), P::Error> {
1796 v.visit_targ(c, self)
1801 v: &mut dyn VisitorMut<'node, P = P>,
1802 ) -> Result<(), P::Error> {
1803 v.visit_hi(c, &mut self.0)?;
1804 self.1.accept(c, v)?;
1808 impl<P: Params> NodeMut<P> for Tparam<P::Ex, P::Fb, P::En, P::Hi> {
1812 v: &mut dyn VisitorMut<'node, P = P>,
1813 ) -> Result<(), P::Error> {
1814 v.visit_tparam(c, self)
1819 v: &mut dyn VisitorMut<'node, P = P>,
1820 ) -> Result<(), P::Error> {
1821 self.variance.accept(c, v)?;
1822 self.name.accept(c, v)?;
1823 self.parameters.accept(c, v)?;
1824 self.constraints.accept(c, v)?;
1825 self.reified.accept(c, v)?;
1826 self.user_attributes.accept(c, v)?;
1830 impl<P: Params> NodeMut<P> for Tprim {
1834 v: &mut dyn VisitorMut<'node, P = P>,
1835 ) -> Result<(), P::Error> {
1836 v.visit_tprim(c, self)
1841 v: &mut dyn VisitorMut<'node, P = P>,
1842 ) -> Result<(), P::Error> {
1844 Tprim::Tnull => Ok(()),
1845 Tprim::Tvoid => Ok(()),
1846 Tprim::Tint => Ok(()),
1847 Tprim::Tbool => Ok(()),
1848 Tprim::Tfloat => Ok(()),
1849 Tprim::Tstring => Ok(()),
1850 Tprim::Tresource => Ok(()),
1851 Tprim::Tnum => Ok(()),
1852 Tprim::Tarraykey => Ok(()),
1853 Tprim::Tnoreturn => Ok(()),
1857 impl<P: Params> NodeMut<P> for TypeHint<P::Hi> {
1861 v: &mut dyn VisitorMut<'node, P = P>,
1862 ) -> Result<(), P::Error> {
1863 v.visit_type_hint(c, self)
1868 v: &mut dyn VisitorMut<'node, P = P>,
1869 ) -> Result<(), P::Error> {
1870 v.visit_hi(c, &mut self.0)?;
1871 self.1.accept(c, v)?;
1875 impl<P: Params> NodeMut<P> for TypeconstAbstractKind {
1879 v: &mut dyn VisitorMut<'node, P = P>,
1880 ) -> Result<(), P::Error> {
1881 v.visit_typeconst_abstract_kind(c, self)
1886 v: &mut dyn VisitorMut<'node, P = P>,
1887 ) -> Result<(), P::Error> {
1889 TypeconstAbstractKind::TCAbstract(a0) => {
1893 TypeconstAbstractKind::TCPartiallyAbstract => Ok(()),
1894 TypeconstAbstractKind::TCConcrete => Ok(()),
1898 impl<P: Params> NodeMut<P> for Typedef<P::Ex, P::Fb, P::En, P::Hi> {
1902 v: &mut dyn VisitorMut<'node, P = P>,
1903 ) -> Result<(), P::Error> {
1904 v.visit_typedef(c, self)
1909 v: &mut dyn VisitorMut<'node, P = P>,
1910 ) -> Result<(), P::Error> {
1911 v.visit_en(c, &mut self.annotation)?;
1912 self.name.accept(c, v)?;
1913 self.tparams.accept(c, v)?;
1914 self.constraint.accept(c, v)?;
1915 self.kind.accept(c, v)?;
1916 self.user_attributes.accept(c, v)?;
1917 self.mode.accept(c, v)?;
1918 self.vis.accept(c, v)?;
1919 self.namespace.accept(c, v)?;
1920 self.span.accept(c, v)?;
1921 self.emit_id.accept(c, v)?;
1925 impl<P: Params> NodeMut<P> for TypedefVisibility {
1929 v: &mut dyn VisitorMut<'node, P = P>,
1930 ) -> Result<(), P::Error> {
1931 v.visit_typedef_visibility(c, self)
1936 v: &mut dyn VisitorMut<'node, P = P>,
1937 ) -> Result<(), P::Error> {
1939 TypedefVisibility::Transparent => Ok(()),
1940 TypedefVisibility::Opaque => Ok(()),
1944 impl<P: Params> NodeMut<P> for Uop {
1948 v: &mut dyn VisitorMut<'node, P = P>,
1949 ) -> Result<(), P::Error> {
1950 v.visit_uop(c, self)
1955 v: &mut dyn VisitorMut<'node, P = P>,
1956 ) -> Result<(), P::Error> {
1958 Uop::Utild => Ok(()),
1959 Uop::Unot => Ok(()),
1960 Uop::Uplus => Ok(()),
1961 Uop::Uminus => Ok(()),
1962 Uop::Uincr => Ok(()),
1963 Uop::Udecr => Ok(()),
1964 Uop::Upincr => Ok(()),
1965 Uop::Updecr => Ok(()),
1966 Uop::Usilence => Ok(()),
1970 impl<P: Params> NodeMut<P> for UseAsAlias {
1974 v: &mut dyn VisitorMut<'node, P = P>,
1975 ) -> Result<(), P::Error> {
1976 v.visit_use_as_alias(c, self)
1981 v: &mut dyn VisitorMut<'node, P = P>,
1982 ) -> Result<(), P::Error> {
1983 self.0.accept(c, v)?;
1984 self.1.accept(c, v)?;
1985 self.2.accept(c, v)?;
1986 self.3.accept(c, v)?;
1990 impl<P: Params> NodeMut<P> for UseAsVisibility {
1994 v: &mut dyn VisitorMut<'node, P = P>,
1995 ) -> Result<(), P::Error> {
1996 v.visit_use_as_visibility(c, self)
2001 v: &mut dyn VisitorMut<'node, P = P>,
2002 ) -> Result<(), P::Error> {
2004 UseAsVisibility::UseAsPublic => Ok(()),
2005 UseAsVisibility::UseAsPrivate => Ok(()),
2006 UseAsVisibility::UseAsProtected => Ok(()),
2007 UseAsVisibility::UseAsFinal => Ok(()),
2011 impl<P: Params> NodeMut<P> for UserAttribute<P::Ex, P::Fb, P::En, P::Hi> {
2015 v: &mut dyn VisitorMut<'node, P = P>,
2016 ) -> Result<(), P::Error> {
2017 v.visit_user_attribute(c, self)
2022 v: &mut dyn VisitorMut<'node, P = P>,
2023 ) -> Result<(), P::Error> {
2024 self.name.accept(c, v)?;
2025 self.params.accept(c, v)?;
2029 impl<P: Params> NodeMut<P> for UsingStmt<P::Ex, P::Fb, P::En, P::Hi> {
2033 v: &mut dyn VisitorMut<'node, P = P>,
2034 ) -> Result<(), P::Error> {
2035 v.visit_using_stmt(c, self)
2040 v: &mut dyn VisitorMut<'node, P = P>,
2041 ) -> Result<(), P::Error> {
2042 self.is_block_scoped.accept(c, v)?;
2043 self.has_await.accept(c, v)?;
2044 self.exprs.accept(c, v)?;
2045 self.block.accept(c, v)?;
2049 impl<P: Params> NodeMut<P> for Variance {
2053 v: &mut dyn VisitorMut<'node, P = P>,
2054 ) -> Result<(), P::Error> {
2055 v.visit_variance(c, self)
2060 v: &mut dyn VisitorMut<'node, P = P>,
2061 ) -> Result<(), P::Error> {
2063 Variance::Covariant => Ok(()),
2064 Variance::Contravariant => Ok(()),
2065 Variance::Invariant => Ok(()),
2069 impl<P: Params> NodeMut<P> for VcKind {
2073 v: &mut dyn VisitorMut<'node, P = P>,
2074 ) -> Result<(), P::Error> {
2075 v.visit_vc_kind(c, self)
2080 v: &mut dyn VisitorMut<'node, P = P>,
2081 ) -> Result<(), P::Error> {
2083 VcKind::Vector => Ok(()),
2084 VcKind::ImmVector => Ok(()),
2085 VcKind::Vec => Ok(()),
2086 VcKind::Set => Ok(()),
2087 VcKind::ImmSet => Ok(()),
2088 VcKind::Keyset => Ok(()),
2092 impl<P: Params> NodeMut<P> for Visibility {
2096 v: &mut dyn VisitorMut<'node, P = P>,
2097 ) -> Result<(), P::Error> {
2098 v.visit_visibility(c, self)
2103 v: &mut dyn VisitorMut<'node, P = P>,
2104 ) -> Result<(), P::Error> {
2106 Visibility::Private => Ok(()),
2107 Visibility::Public => Ok(()),
2108 Visibility::Protected => Ok(()),
2112 impl<P: Params> NodeMut<P> for WhereConstraintHint {
2116 v: &mut dyn VisitorMut<'node, P = P>,
2117 ) -> Result<(), P::Error> {
2118 v.visit_where_constraint_hint(c, self)
2123 v: &mut dyn VisitorMut<'node, P = P>,
2124 ) -> Result<(), P::Error> {
2125 self.0.accept(c, v)?;
2126 self.1.accept(c, v)?;
2127 self.2.accept(c, v)?;
2131 impl<P: Params> NodeMut<P> for XhpAttr<P::Ex, P::Fb, P::En, P::Hi> {
2135 v: &mut dyn VisitorMut<'node, P = P>,
2136 ) -> Result<(), P::Error> {
2137 v.visit_xhp_attr(c, self)
2142 v: &mut dyn VisitorMut<'node, P = P>,
2143 ) -> Result<(), P::Error> {
2144 self.0.accept(c, v)?;
2145 self.1.accept(c, v)?;
2146 self.2.accept(c, v)?;
2147 self.3.accept(c, v)?;
2151 impl<P: Params> NodeMut<P> for XhpAttrInfo {
2155 v: &mut dyn VisitorMut<'node, P = P>,
2156 ) -> Result<(), P::Error> {
2157 v.visit_xhp_attr_info(c, self)
2162 v: &mut dyn VisitorMut<'node, P = P>,
2163 ) -> Result<(), P::Error> {
2164 self.xai_tag.accept(c, v)?;
2168 impl<P: Params> NodeMut<P> for XhpAttrTag {
2172 v: &mut dyn VisitorMut<'node, P = P>,
2173 ) -> Result<(), P::Error> {
2174 v.visit_xhp_attr_tag(c, self)
2179 v: &mut dyn VisitorMut<'node, P = P>,
2180 ) -> Result<(), P::Error> {
2182 XhpAttrTag::Required => Ok(()),
2183 XhpAttrTag::LateInit => Ok(()),
2187 impl<P: Params> NodeMut<P> for XhpAttribute<P::Ex, P::Fb, P::En, P::Hi> {
2191 v: &mut dyn VisitorMut<'node, P = P>,
2192 ) -> Result<(), P::Error> {
2193 v.visit_xhp_attribute(c, self)
2198 v: &mut dyn VisitorMut<'node, P = P>,
2199 ) -> Result<(), P::Error> {
2201 XhpAttribute::XhpSimple(a0) => {
2205 XhpAttribute::XhpSpread(a0) => {
2212 impl<P: Params> NodeMut<P> for XhpChild {
2216 v: &mut dyn VisitorMut<'node, P = P>,
2217 ) -> Result<(), P::Error> {
2218 v.visit_xhp_child(c, self)
2223 v: &mut dyn VisitorMut<'node, P = P>,
2224 ) -> Result<(), P::Error> {
2226 XhpChild::ChildName(a0) => {
2230 XhpChild::ChildList(a0) => {
2234 XhpChild::ChildUnary(a0, a1) => {
2239 XhpChild::ChildBinary(a0, a1) => {
2247 impl<P: Params> NodeMut<P> for XhpChildOp {
2251 v: &mut dyn VisitorMut<'node, P = P>,
2252 ) -> Result<(), P::Error> {
2253 v.visit_xhp_child_op(c, self)
2258 v: &mut dyn VisitorMut<'node, P = P>,
2259 ) -> Result<(), P::Error> {
2261 XhpChildOp::ChildStar => Ok(()),
2262 XhpChildOp::ChildPlus => Ok(()),
2263 XhpChildOp::ChildQuestion => Ok(()),
2267 impl<P: Params> NodeMut<P> for XhpSimple<P::Ex, P::Fb, P::En, P::Hi> {
2271 v: &mut dyn VisitorMut<'node, P = P>,
2272 ) -> Result<(), P::Error> {
2273 v.visit_xhp_simple(c, self)
2278 v: &mut dyn VisitorMut<'node, P = P>,
2279 ) -> Result<(), P::Error> {
2280 self.name.accept(c, v)?;
2281 v.visit_hi(c, &mut self.type_)?;
2282 self.expr.accept(c, v)?;