1 /**
2  * Compiler implementation of the
3  * $(LINK2 http://www.dlang.org, D programming language).
4  *
5  * Copyright:   Copyright (c) 1999-2016 by Digital Mars, All Rights Reserved
6  * Authors:     $(LINK2 http://www.digitalmars.com, Walter Bright)
7  * License:     $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source:      $(DMDSRC _visitor.d)
9  */
10 
11 module ddmd.visitor;
12 
13 import ddmd.aggregate;
14 import ddmd.aliasthis;
15 import ddmd.attrib;
16 import ddmd.cond;
17 import ddmd.ctfeexpr;
18 import ddmd.dclass;
19 import ddmd.declaration;
20 import ddmd.denum;
21 import ddmd.dimport;
22 import ddmd.dmodule;
23 import ddmd.dstruct;
24 import ddmd.dsymbol;
25 import ddmd.dtemplate;
26 import ddmd.dversion;
27 import ddmd.expression;
28 import ddmd.func;
29 import ddmd.init;
30 import ddmd.mtype;
31 import ddmd.nspace;
32 import ddmd.statement;
33 import ddmd.staticassert;
34 
35 extern (C++) class Visitor
36 {
37     void visit(Statement)
38     {
39         assert(0);
40     }
41 
42     void visit(ErrorStatement s)
43     {
44         visit(cast(Statement)s);
45     }
46 
47     void visit(PeelStatement s)
48     {
49         visit(cast(Statement)s);
50     }
51 
52     void visit(ExpStatement s)
53     {
54         visit(cast(Statement)s);
55     }
56 
57     void visit(DtorExpStatement s)
58     {
59         visit(cast(ExpStatement)s);
60     }
61 
62     void visit(CompileStatement s)
63     {
64         visit(cast(Statement)s);
65     }
66 
67     void visit(CompoundStatement s)
68     {
69         visit(cast(Statement)s);
70     }
71 
72     void visit(CompoundDeclarationStatement s)
73     {
74         visit(cast(CompoundStatement)s);
75     }
76 
77     void visit(UnrolledLoopStatement s)
78     {
79         visit(cast(Statement)s);
80     }
81 
82     void visit(ScopeStatement s)
83     {
84         visit(cast(Statement)s);
85     }
86 
87     void visit(WhileStatement s)
88     {
89         visit(cast(Statement)s);
90     }
91 
92     void visit(DoStatement s)
93     {
94         visit(cast(Statement)s);
95     }
96 
97     void visit(ForStatement s)
98     {
99         visit(cast(Statement)s);
100     }
101 
102     void visit(ForeachStatement s)
103     {
104         visit(cast(Statement)s);
105     }
106 
107     void visit(ForeachRangeStatement s)
108     {
109         visit(cast(Statement)s);
110     }
111 
112     void visit(IfStatement s)
113     {
114         visit(cast(Statement)s);
115     }
116 
117     void visit(ConditionalStatement s)
118     {
119         visit(cast(Statement)s);
120     }
121 
122     void visit(PragmaStatement s)
123     {
124         visit(cast(Statement)s);
125     }
126 
127     void visit(StaticAssertStatement s)
128     {
129         visit(cast(Statement)s);
130     }
131 
132     void visit(SwitchStatement s)
133     {
134         visit(cast(Statement)s);
135     }
136 
137     void visit(CaseStatement s)
138     {
139         visit(cast(Statement)s);
140     }
141 
142     void visit(CaseRangeStatement s)
143     {
144         visit(cast(Statement)s);
145     }
146 
147     void visit(DefaultStatement s)
148     {
149         visit(cast(Statement)s);
150     }
151 
152     void visit(GotoDefaultStatement s)
153     {
154         visit(cast(Statement)s);
155     }
156 
157     void visit(GotoCaseStatement s)
158     {
159         visit(cast(Statement)s);
160     }
161 
162     void visit(SwitchErrorStatement s)
163     {
164         visit(cast(Statement)s);
165     }
166 
167     void visit(ReturnStatement s)
168     {
169         visit(cast(Statement)s);
170     }
171 
172     void visit(BreakStatement s)
173     {
174         visit(cast(Statement)s);
175     }
176 
177     void visit(ContinueStatement s)
178     {
179         visit(cast(Statement)s);
180     }
181 
182     void visit(SynchronizedStatement s)
183     {
184         visit(cast(Statement)s);
185     }
186 
187     void visit(WithStatement s)
188     {
189         visit(cast(Statement)s);
190     }
191 
192     void visit(TryCatchStatement s)
193     {
194         visit(cast(Statement)s);
195     }
196 
197     void visit(TryFinallyStatement s)
198     {
199         visit(cast(Statement)s);
200     }
201 
202     void visit(OnScopeStatement s)
203     {
204         visit(cast(Statement)s);
205     }
206 
207     void visit(ThrowStatement s)
208     {
209         visit(cast(Statement)s);
210     }
211 
212     void visit(DebugStatement s)
213     {
214         visit(cast(Statement)s);
215     }
216 
217     void visit(GotoStatement s)
218     {
219         visit(cast(Statement)s);
220     }
221 
222     void visit(LabelStatement s)
223     {
224         visit(cast(Statement)s);
225     }
226 
227     void visit(AsmStatement s)
228     {
229         visit(cast(Statement)s);
230     }
231 
232     void visit(CompoundAsmStatement s)
233     {
234         visit(cast(CompoundStatement)s);
235     }
236 
237     void visit(ImportStatement s)
238     {
239         visit(cast(Statement)s);
240     }
241 
242     void visit(Type)
243     {
244         assert(0);
245     }
246 
247     void visit(TypeError t)
248     {
249         visit(cast(Type)t);
250     }
251 
252     void visit(TypeNext t)
253     {
254         visit(cast(Type)t);
255     }
256 
257     void visit(TypeBasic t)
258     {
259         visit(cast(Type)t);
260     }
261 
262     void visit(TypeVector t)
263     {
264         visit(cast(Type)t);
265     }
266 
267     void visit(TypeArray t)
268     {
269         visit(cast(TypeNext)t);
270     }
271 
272     void visit(TypeSArray t)
273     {
274         visit(cast(TypeArray)t);
275     }
276 
277     void visit(TypeDArray t)
278     {
279         visit(cast(TypeArray)t);
280     }
281 
282     void visit(TypeAArray t)
283     {
284         visit(cast(TypeArray)t);
285     }
286 
287     void visit(TypePointer t)
288     {
289         visit(cast(TypeNext)t);
290     }
291 
292     void visit(TypeReference t)
293     {
294         visit(cast(TypeNext)t);
295     }
296 
297     void visit(TypeFunction t)
298     {
299         visit(cast(TypeNext)t);
300     }
301 
302     void visit(TypeDelegate t)
303     {
304         visit(cast(TypeNext)t);
305     }
306 
307     void visit(TypeQualified t)
308     {
309         visit(cast(Type)t);
310     }
311 
312     void visit(TypeIdentifier t)
313     {
314         visit(cast(TypeQualified)t);
315     }
316 
317     void visit(TypeInstance t)
318     {
319         visit(cast(TypeQualified)t);
320     }
321 
322     void visit(TypeTypeof t)
323     {
324         visit(cast(TypeQualified)t);
325     }
326 
327     void visit(TypeReturn t)
328     {
329         visit(cast(TypeQualified)t);
330     }
331 
332     void visit(TypeStruct t)
333     {
334         visit(cast(Type)t);
335     }
336 
337     void visit(TypeEnum t)
338     {
339         visit(cast(Type)t);
340     }
341 
342     void visit(TypeClass t)
343     {
344         visit(cast(Type)t);
345     }
346 
347     void visit(TypeTuple t)
348     {
349         visit(cast(Type)t);
350     }
351 
352     void visit(TypeSlice t)
353     {
354         visit(cast(TypeNext)t);
355     }
356 
357     void visit(TypeNull t)
358     {
359         visit(cast(Type)t);
360     }
361 
362     void visit(Dsymbol)
363     {
364         assert(0);
365     }
366 
367     void visit(StaticAssert s)
368     {
369         visit(cast(Dsymbol)s);
370     }
371 
372     void visit(DebugSymbol s)
373     {
374         visit(cast(Dsymbol)s);
375     }
376 
377     void visit(VersionSymbol s)
378     {
379         visit(cast(Dsymbol)s);
380     }
381 
382     void visit(EnumMember s)
383     {
384         visit(cast(VarDeclaration)s);
385     }
386 
387     void visit(Import s)
388     {
389         visit(cast(Dsymbol)s);
390     }
391 
392     void visit(OverloadSet s)
393     {
394         visit(cast(Dsymbol)s);
395     }
396 
397     void visit(LabelDsymbol s)
398     {
399         visit(cast(Dsymbol)s);
400     }
401 
402     void visit(AliasThis s)
403     {
404         visit(cast(Dsymbol)s);
405     }
406 
407     void visit(AttribDeclaration s)
408     {
409         visit(cast(Dsymbol)s);
410     }
411 
412     void visit(StorageClassDeclaration s)
413     {
414         visit(cast(AttribDeclaration)s);
415     }
416 
417     void visit(DeprecatedDeclaration s)
418     {
419         visit(cast(StorageClassDeclaration)s);
420     }
421 
422     void visit(LinkDeclaration s)
423     {
424         visit(cast(AttribDeclaration)s);
425     }
426 
427     void visit(CPPMangleDeclaration s)
428     {
429         visit(cast(AttribDeclaration)s);
430     }
431 
432     void visit(ProtDeclaration s)
433     {
434         visit(cast(AttribDeclaration)s);
435     }
436 
437     void visit(AlignDeclaration s)
438     {
439         visit(cast(AttribDeclaration)s);
440     }
441 
442     void visit(AnonDeclaration s)
443     {
444         visit(cast(AttribDeclaration)s);
445     }
446 
447     void visit(PragmaDeclaration s)
448     {
449         visit(cast(AttribDeclaration)s);
450     }
451 
452     void visit(ConditionalDeclaration s)
453     {
454         visit(cast(AttribDeclaration)s);
455     }
456 
457     void visit(StaticIfDeclaration s)
458     {
459         visit(cast(ConditionalDeclaration)s);
460     }
461 
462     void visit(CompileDeclaration s)
463     {
464         visit(cast(AttribDeclaration)s);
465     }
466 
467     void visit(UserAttributeDeclaration s)
468     {
469         visit(cast(AttribDeclaration)s);
470     }
471 
472     void visit(ScopeDsymbol s)
473     {
474         visit(cast(Dsymbol)s);
475     }
476 
477     void visit(TemplateDeclaration s)
478     {
479         visit(cast(ScopeDsymbol)s);
480     }
481 
482     void visit(TemplateInstance s)
483     {
484         visit(cast(ScopeDsymbol)s);
485     }
486 
487     void visit(TemplateMixin s)
488     {
489         visit(cast(TemplateInstance)s);
490     }
491 
492     void visit(EnumDeclaration s)
493     {
494         visit(cast(ScopeDsymbol)s);
495     }
496 
497     void visit(Package s)
498     {
499         visit(cast(ScopeDsymbol)s);
500     }
501 
502     void visit(Module s)
503     {
504         visit(cast(Package)s);
505     }
506 
507     void visit(WithScopeSymbol s)
508     {
509         visit(cast(ScopeDsymbol)s);
510     }
511 
512     void visit(ArrayScopeSymbol s)
513     {
514         visit(cast(ScopeDsymbol)s);
515     }
516 
517     void visit(Nspace s)
518     {
519         visit(cast(ScopeDsymbol)s);
520     }
521 
522     void visit(AggregateDeclaration s)
523     {
524         visit(cast(ScopeDsymbol)s);
525     }
526 
527     void visit(StructDeclaration s)
528     {
529         visit(cast(AggregateDeclaration)s);
530     }
531 
532     void visit(UnionDeclaration s)
533     {
534         visit(cast(StructDeclaration)s);
535     }
536 
537     void visit(ClassDeclaration s)
538     {
539         visit(cast(AggregateDeclaration)s);
540     }
541 
542     void visit(InterfaceDeclaration s)
543     {
544         visit(cast(ClassDeclaration)s);
545     }
546 
547     void visit(Declaration s)
548     {
549         visit(cast(Dsymbol)s);
550     }
551 
552     void visit(TupleDeclaration s)
553     {
554         visit(cast(Declaration)s);
555     }
556 
557     void visit(AliasDeclaration s)
558     {
559         visit(cast(Declaration)s);
560     }
561 
562     void visit(OverDeclaration s)
563     {
564         visit(cast(Declaration)s);
565     }
566 
567     void visit(VarDeclaration s)
568     {
569         visit(cast(Declaration)s);
570     }
571 
572     void visit(SymbolDeclaration s)
573     {
574         visit(cast(Declaration)s);
575     }
576 
577     void visit(ThisDeclaration s)
578     {
579         visit(cast(VarDeclaration)s);
580     }
581 
582     void visit(TypeInfoDeclaration s)
583     {
584         visit(cast(VarDeclaration)s);
585     }
586 
587     void visit(TypeInfoStructDeclaration s)
588     {
589         visit(cast(TypeInfoDeclaration)s);
590     }
591 
592     void visit(TypeInfoClassDeclaration s)
593     {
594         visit(cast(TypeInfoDeclaration)s);
595     }
596 
597     void visit(TypeInfoInterfaceDeclaration s)
598     {
599         visit(cast(TypeInfoDeclaration)s);
600     }
601 
602     void visit(TypeInfoPointerDeclaration s)
603     {
604         visit(cast(TypeInfoDeclaration)s);
605     }
606 
607     void visit(TypeInfoArrayDeclaration s)
608     {
609         visit(cast(TypeInfoDeclaration)s);
610     }
611 
612     void visit(TypeInfoStaticArrayDeclaration s)
613     {
614         visit(cast(TypeInfoDeclaration)s);
615     }
616 
617     void visit(TypeInfoAssociativeArrayDeclaration s)
618     {
619         visit(cast(TypeInfoDeclaration)s);
620     }
621 
622     void visit(TypeInfoEnumDeclaration s)
623     {
624         visit(cast(TypeInfoDeclaration)s);
625     }
626 
627     void visit(TypeInfoFunctionDeclaration s)
628     {
629         visit(cast(TypeInfoDeclaration)s);
630     }
631 
632     void visit(TypeInfoDelegateDeclaration s)
633     {
634         visit(cast(TypeInfoDeclaration)s);
635     }
636 
637     void visit(TypeInfoTupleDeclaration s)
638     {
639         visit(cast(TypeInfoDeclaration)s);
640     }
641 
642     void visit(TypeInfoConstDeclaration s)
643     {
644         visit(cast(TypeInfoDeclaration)s);
645     }
646 
647     void visit(TypeInfoInvariantDeclaration s)
648     {
649         visit(cast(TypeInfoDeclaration)s);
650     }
651 
652     void visit(TypeInfoSharedDeclaration s)
653     {
654         visit(cast(TypeInfoDeclaration)s);
655     }
656 
657     void visit(TypeInfoWildDeclaration s)
658     {
659         visit(cast(TypeInfoDeclaration)s);
660     }
661 
662     void visit(TypeInfoVectorDeclaration s)
663     {
664         visit(cast(TypeInfoDeclaration)s);
665     }
666 
667     void visit(FuncDeclaration s)
668     {
669         visit(cast(Declaration)s);
670     }
671 
672     void visit(FuncAliasDeclaration s)
673     {
674         visit(cast(FuncDeclaration)s);
675     }
676 
677     void visit(FuncLiteralDeclaration s)
678     {
679         visit(cast(FuncDeclaration)s);
680     }
681 
682     void visit(CtorDeclaration s)
683     {
684         visit(cast(FuncDeclaration)s);
685     }
686 
687     void visit(PostBlitDeclaration s)
688     {
689         visit(cast(FuncDeclaration)s);
690     }
691 
692     void visit(DtorDeclaration s)
693     {
694         visit(cast(FuncDeclaration)s);
695     }
696 
697     void visit(StaticCtorDeclaration s)
698     {
699         visit(cast(FuncDeclaration)s);
700     }
701 
702     void visit(SharedStaticCtorDeclaration s)
703     {
704         visit(cast(StaticCtorDeclaration)s);
705     }
706 
707     void visit(StaticDtorDeclaration s)
708     {
709         visit(cast(FuncDeclaration)s);
710     }
711 
712     void visit(SharedStaticDtorDeclaration s)
713     {
714         visit(cast(StaticDtorDeclaration)s);
715     }
716 
717     void visit(InvariantDeclaration s)
718     {
719         visit(cast(FuncDeclaration)s);
720     }
721 
722     void visit(UnitTestDeclaration s)
723     {
724         visit(cast(FuncDeclaration)s);
725     }
726 
727     void visit(NewDeclaration s)
728     {
729         visit(cast(FuncDeclaration)s);
730     }
731 
732     void visit(DeleteDeclaration s)
733     {
734         visit(cast(FuncDeclaration)s);
735     }
736 
737     void visit(Initializer)
738     {
739         assert(0);
740     }
741 
742     void visit(VoidInitializer i)
743     {
744         visit(cast(Initializer)i);
745     }
746 
747     void visit(ErrorInitializer i)
748     {
749         visit(cast(Initializer)i);
750     }
751 
752     void visit(StructInitializer i)
753     {
754         visit(cast(Initializer)i);
755     }
756 
757     void visit(ArrayInitializer i)
758     {
759         visit(cast(Initializer)i);
760     }
761 
762     void visit(ExpInitializer i)
763     {
764         visit(cast(Initializer)i);
765     }
766 
767     void visit(Expression)
768     {
769         assert(0);
770     }
771 
772     void visit(IntegerExp e)
773     {
774         visit(cast(Expression)e);
775     }
776 
777     void visit(ErrorExp e)
778     {
779         visit(cast(Expression)e);
780     }
781 
782     void visit(RealExp e)
783     {
784         visit(cast(Expression)e);
785     }
786 
787     void visit(ComplexExp e)
788     {
789         visit(cast(Expression)e);
790     }
791 
792     void visit(IdentifierExp e)
793     {
794         visit(cast(Expression)e);
795     }
796 
797     void visit(DollarExp e)
798     {
799         visit(cast(IdentifierExp)e);
800     }
801 
802     void visit(DsymbolExp e)
803     {
804         visit(cast(Expression)e);
805     }
806 
807     void visit(ThisExp e)
808     {
809         visit(cast(Expression)e);
810     }
811 
812     void visit(SuperExp e)
813     {
814         visit(cast(ThisExp)e);
815     }
816 
817     void visit(NullExp e)
818     {
819         visit(cast(Expression)e);
820     }
821 
822     void visit(StringExp e)
823     {
824         visit(cast(Expression)e);
825     }
826 
827     void visit(TupleExp e)
828     {
829         visit(cast(Expression)e);
830     }
831 
832     void visit(ArrayLiteralExp e)
833     {
834         visit(cast(Expression)e);
835     }
836 
837     void visit(AssocArrayLiteralExp e)
838     {
839         visit(cast(Expression)e);
840     }
841 
842     void visit(StructLiteralExp e)
843     {
844         visit(cast(Expression)e);
845     }
846 
847     void visit(TypeExp e)
848     {
849         visit(cast(Expression)e);
850     }
851 
852     void visit(ScopeExp e)
853     {
854         visit(cast(Expression)e);
855     }
856 
857     void visit(TemplateExp e)
858     {
859         visit(cast(Expression)e);
860     }
861 
862     void visit(NewExp e)
863     {
864         visit(cast(Expression)e);
865     }
866 
867     void visit(NewAnonClassExp e)
868     {
869         visit(cast(Expression)e);
870     }
871 
872     void visit(SymbolExp e)
873     {
874         visit(cast(Expression)e);
875     }
876 
877     void visit(SymOffExp e)
878     {
879         visit(cast(SymbolExp)e);
880     }
881 
882     void visit(VarExp e)
883     {
884         visit(cast(SymbolExp)e);
885     }
886 
887     void visit(OverExp e)
888     {
889         visit(cast(Expression)e);
890     }
891 
892     void visit(FuncExp e)
893     {
894         visit(cast(Expression)e);
895     }
896 
897     void visit(DeclarationExp e)
898     {
899         visit(cast(Expression)e);
900     }
901 
902     void visit(TypeidExp e)
903     {
904         visit(cast(Expression)e);
905     }
906 
907     void visit(TraitsExp e)
908     {
909         visit(cast(Expression)e);
910     }
911 
912     void visit(HaltExp e)
913     {
914         visit(cast(Expression)e);
915     }
916 
917     void visit(IsExp e)
918     {
919         visit(cast(Expression)e);
920     }
921 
922     void visit(UnaExp e)
923     {
924         visit(cast(Expression)e);
925     }
926 
927     void visit(BinExp e)
928     {
929         visit(cast(Expression)e);
930     }
931 
932     void visit(BinAssignExp e)
933     {
934         visit(cast(BinExp)e);
935     }
936 
937     void visit(CompileExp e)
938     {
939         visit(cast(UnaExp)e);
940     }
941 
942     void visit(ImportExp e)
943     {
944         visit(cast(UnaExp)e);
945     }
946 
947     void visit(AssertExp e)
948     {
949         visit(cast(UnaExp)e);
950     }
951 
952     void visit(DotIdExp e)
953     {
954         visit(cast(UnaExp)e);
955     }
956 
957     void visit(DotTemplateExp e)
958     {
959         visit(cast(UnaExp)e);
960     }
961 
962     void visit(DotVarExp e)
963     {
964         visit(cast(UnaExp)e);
965     }
966 
967     void visit(DotTemplateInstanceExp e)
968     {
969         visit(cast(UnaExp)e);
970     }
971 
972     void visit(DelegateExp e)
973     {
974         visit(cast(UnaExp)e);
975     }
976 
977     void visit(DotTypeExp e)
978     {
979         visit(cast(UnaExp)e);
980     }
981 
982     void visit(CallExp e)
983     {
984         visit(cast(UnaExp)e);
985     }
986 
987     void visit(AddrExp e)
988     {
989         visit(cast(UnaExp)e);
990     }
991 
992     void visit(PtrExp e)
993     {
994         visit(cast(UnaExp)e);
995     }
996 
997     void visit(NegExp e)
998     {
999         visit(cast(UnaExp)e);
1000     }
1001 
1002     void visit(UAddExp e)
1003     {
1004         visit(cast(UnaExp)e);
1005     }
1006 
1007     void visit(ComExp e)
1008     {
1009         visit(cast(UnaExp)e);
1010     }
1011 
1012     void visit(NotExp e)
1013     {
1014         visit(cast(UnaExp)e);
1015     }
1016 
1017     void visit(DeleteExp e)
1018     {
1019         visit(cast(UnaExp)e);
1020     }
1021 
1022     void visit(CastExp e)
1023     {
1024         visit(cast(UnaExp)e);
1025     }
1026 
1027     void visit(VectorExp e)
1028     {
1029         visit(cast(UnaExp)e);
1030     }
1031 
1032     void visit(SliceExp e)
1033     {
1034         visit(cast(UnaExp)e);
1035     }
1036 
1037     void visit(ArrayLengthExp e)
1038     {
1039         visit(cast(UnaExp)e);
1040     }
1041 
1042     void visit(IntervalExp e)
1043     {
1044         visit(cast(Expression)e);
1045     }
1046 
1047     void visit(DelegatePtrExp e)
1048     {
1049         visit(cast(UnaExp)e);
1050     }
1051 
1052     void visit(DelegateFuncptrExp e)
1053     {
1054         visit(cast(UnaExp)e);
1055     }
1056 
1057     void visit(ArrayExp e)
1058     {
1059         visit(cast(UnaExp)e);
1060     }
1061 
1062     void visit(DotExp e)
1063     {
1064         visit(cast(BinExp)e);
1065     }
1066 
1067     void visit(CommaExp e)
1068     {
1069         visit(cast(BinExp)e);
1070     }
1071 
1072     void visit(IndexExp e)
1073     {
1074         visit(cast(BinExp)e);
1075     }
1076 
1077     void visit(PostExp e)
1078     {
1079         visit(cast(BinExp)e);
1080     }
1081 
1082     void visit(PreExp e)
1083     {
1084         visit(cast(UnaExp)e);
1085     }
1086 
1087     void visit(AssignExp e)
1088     {
1089         visit(cast(BinExp)e);
1090     }
1091 
1092     void visit(ConstructExp e)
1093     {
1094         visit(cast(AssignExp)e);
1095     }
1096 
1097     void visit(BlitExp e)
1098     {
1099         visit(cast(AssignExp)e);
1100     }
1101 
1102     void visit(AddAssignExp e)
1103     {
1104         visit(cast(BinAssignExp)e);
1105     }
1106 
1107     void visit(MinAssignExp e)
1108     {
1109         visit(cast(BinAssignExp)e);
1110     }
1111 
1112     void visit(MulAssignExp e)
1113     {
1114         visit(cast(BinAssignExp)e);
1115     }
1116 
1117     void visit(DivAssignExp e)
1118     {
1119         visit(cast(BinAssignExp)e);
1120     }
1121 
1122     void visit(ModAssignExp e)
1123     {
1124         visit(cast(BinAssignExp)e);
1125     }
1126 
1127     void visit(AndAssignExp e)
1128     {
1129         visit(cast(BinAssignExp)e);
1130     }
1131 
1132     void visit(OrAssignExp e)
1133     {
1134         visit(cast(BinAssignExp)e);
1135     }
1136 
1137     void visit(XorAssignExp e)
1138     {
1139         visit(cast(BinAssignExp)e);
1140     }
1141 
1142     void visit(PowAssignExp e)
1143     {
1144         visit(cast(BinAssignExp)e);
1145     }
1146 
1147     void visit(ShlAssignExp e)
1148     {
1149         visit(cast(BinAssignExp)e);
1150     }
1151 
1152     void visit(ShrAssignExp e)
1153     {
1154         visit(cast(BinAssignExp)e);
1155     }
1156 
1157     void visit(UshrAssignExp e)
1158     {
1159         visit(cast(BinAssignExp)e);
1160     }
1161 
1162     void visit(CatAssignExp e)
1163     {
1164         visit(cast(BinAssignExp)e);
1165     }
1166 
1167     void visit(AddExp e)
1168     {
1169         visit(cast(BinExp)e);
1170     }
1171 
1172     void visit(MinExp e)
1173     {
1174         visit(cast(BinExp)e);
1175     }
1176 
1177     void visit(CatExp e)
1178     {
1179         visit(cast(BinExp)e);
1180     }
1181 
1182     void visit(MulExp e)
1183     {
1184         visit(cast(BinExp)e);
1185     }
1186 
1187     void visit(DivExp e)
1188     {
1189         visit(cast(BinExp)e);
1190     }
1191 
1192     void visit(ModExp e)
1193     {
1194         visit(cast(BinExp)e);
1195     }
1196 
1197     void visit(PowExp e)
1198     {
1199         visit(cast(BinExp)e);
1200     }
1201 
1202     void visit(ShlExp e)
1203     {
1204         visit(cast(BinExp)e);
1205     }
1206 
1207     void visit(ShrExp e)
1208     {
1209         visit(cast(BinExp)e);
1210     }
1211 
1212     void visit(UshrExp e)
1213     {
1214         visit(cast(BinExp)e);
1215     }
1216 
1217     void visit(AndExp e)
1218     {
1219         visit(cast(BinExp)e);
1220     }
1221 
1222     void visit(OrExp e)
1223     {
1224         visit(cast(BinExp)e);
1225     }
1226 
1227     void visit(XorExp e)
1228     {
1229         visit(cast(BinExp)e);
1230     }
1231 
1232     void visit(OrOrExp e)
1233     {
1234         visit(cast(BinExp)e);
1235     }
1236 
1237     void visit(AndAndExp e)
1238     {
1239         visit(cast(BinExp)e);
1240     }
1241 
1242     void visit(CmpExp e)
1243     {
1244         visit(cast(BinExp)e);
1245     }
1246 
1247     void visit(InExp e)
1248     {
1249         visit(cast(BinExp)e);
1250     }
1251 
1252     void visit(RemoveExp e)
1253     {
1254         visit(cast(BinExp)e);
1255     }
1256 
1257     void visit(EqualExp e)
1258     {
1259         visit(cast(BinExp)e);
1260     }
1261 
1262     void visit(IdentityExp e)
1263     {
1264         visit(cast(BinExp)e);
1265     }
1266 
1267     void visit(CondExp e)
1268     {
1269         visit(cast(BinExp)e);
1270     }
1271 
1272     void visit(DefaultInitExp e)
1273     {
1274         visit(cast(Expression)e);
1275     }
1276 
1277     void visit(FileInitExp e)
1278     {
1279         visit(cast(DefaultInitExp)e);
1280     }
1281 
1282     void visit(LineInitExp e)
1283     {
1284         visit(cast(DefaultInitExp)e);
1285     }
1286 
1287     void visit(ModuleInitExp e)
1288     {
1289         visit(cast(DefaultInitExp)e);
1290     }
1291 
1292     void visit(FuncInitExp e)
1293     {
1294         visit(cast(DefaultInitExp)e);
1295     }
1296 
1297     void visit(PrettyFuncInitExp e)
1298     {
1299         visit(cast(DefaultInitExp)e);
1300     }
1301 
1302     void visit(ClassReferenceExp e)
1303     {
1304         visit(cast(Expression)e);
1305     }
1306 
1307     void visit(VoidInitExp e)
1308     {
1309         visit(cast(Expression)e);
1310     }
1311 
1312     void visit(ThrownExceptionExp e)
1313     {
1314         visit(cast(Expression)e);
1315     }
1316 
1317     void visit(TemplateParameter)
1318     {
1319         assert(0);
1320     }
1321 
1322     void visit(TemplateTypeParameter tp)
1323     {
1324         visit(cast(TemplateParameter)tp);
1325     }
1326 
1327     void visit(TemplateThisParameter tp)
1328     {
1329         visit(cast(TemplateTypeParameter)tp);
1330     }
1331 
1332     void visit(TemplateValueParameter tp)
1333     {
1334         visit(cast(TemplateParameter)tp);
1335     }
1336 
1337     void visit(TemplateAliasParameter tp)
1338     {
1339         visit(cast(TemplateParameter)tp);
1340     }
1341 
1342     void visit(TemplateTupleParameter tp)
1343     {
1344         visit(cast(TemplateParameter)tp);
1345     }
1346 
1347     void visit(Condition)
1348     {
1349         assert(0);
1350     }
1351 
1352     void visit(DVCondition c)
1353     {
1354         visit(cast(Condition)c);
1355     }
1356 
1357     void visit(DebugCondition c)
1358     {
1359         visit(cast(DVCondition)c);
1360     }
1361 
1362     void visit(VersionCondition c)
1363     {
1364         visit(cast(DVCondition)c);
1365     }
1366 
1367     void visit(StaticIfCondition c)
1368     {
1369         visit(cast(Condition)c);
1370     }
1371 
1372     void visit(Parameter)
1373     {
1374         assert(0);
1375     }
1376 }
1377 
1378 extern (C++) class StoppableVisitor : Visitor
1379 {
1380     alias visit = super.visit;
1381 public:
1382     bool stop;
1383 
1384     final extern (D) this()
1385     {
1386     }
1387 }