1 2/* Compiler implementation of the D programming language 3 * Copyright (C) 2013-2019 by The D Language Foundation, All Rights Reserved 4 * http://www.digitalmars.com 5 * Distributed under the Boost Software License, Version 1.0. 6 * http://www.boost.org/LICENSE_1_0.txt 7 * https://github.com/dlang/dmd/blob/master/src/dmd/visitor.h 8 */ 9 10#pragma once 11 12#include "root/dsystem.h" 13 14class Statement; 15class ErrorStatement; 16class PeelStatement; 17class ExpStatement; 18class DtorExpStatement; 19class CompileStatement; 20class CompoundStatement; 21class CompoundDeclarationStatement; 22class UnrolledLoopStatement; 23class ScopeStatement; 24class ForwardingStatement; 25class WhileStatement; 26class DoStatement; 27class ForStatement; 28class ForeachStatement; 29class ForeachRangeStatement; 30class StaticForeachStatement; 31class IfStatement; 32class ConditionalStatement; 33class PragmaStatement; 34class StaticAssertStatement; 35class SwitchStatement; 36class CaseStatement; 37class CaseRangeStatement; 38class DefaultStatement; 39class GotoDefaultStatement; 40class GotoCaseStatement; 41class SwitchErrorStatement; 42class ReturnStatement; 43class BreakStatement; 44class ContinueStatement; 45class SynchronizedStatement; 46class WithStatement; 47class TryCatchStatement; 48class TryFinallyStatement; 49class OnScopeStatement; 50class ThrowStatement; 51class DebugStatement; 52class GotoStatement; 53class LabelStatement; 54class AsmStatement; 55class InlineAsmStatement; 56class GccAsmStatement; 57class CompoundAsmStatement; 58class ImportStatement; 59 60class Type; 61class TypeError; 62class TypeNext; 63class TypeBasic; 64class TypeVector; 65class TypeArray; 66class TypeSArray; 67class TypeDArray; 68class TypeAArray; 69class TypePointer; 70class TypeReference; 71class TypeFunction; 72class TypeDelegate; 73class TypeQualified; 74class TypeIdentifier; 75class TypeInstance; 76class TypeTypeof; 77class TypeReturn; 78class TypeStruct; 79class TypeEnum; 80class TypeClass; 81class TypeTuple; 82class TypeSlice; 83class TypeNull; 84class TypeTraits; 85 86class Dsymbol; 87 88class StaticAssert; 89class DebugSymbol; 90class VersionSymbol; 91class EnumMember; 92class Import; 93class OverloadSet; 94class LabelDsymbol; 95class AliasThis; 96 97class AttribDeclaration; 98class StorageClassDeclaration; 99class DeprecatedDeclaration; 100class LinkDeclaration; 101class CPPMangleDeclaration; 102class ProtDeclaration; 103class AlignDeclaration; 104class AnonDeclaration; 105class PragmaDeclaration; 106class ConditionalDeclaration; 107class StaticIfDeclaration; 108class CompileDeclaration; 109class StaticForeachDeclaration; 110class UserAttributeDeclaration; 111class ForwardingAttribDeclaration; 112 113class ScopeDsymbol; 114class TemplateDeclaration; 115class TemplateInstance; 116class TemplateMixin; 117class EnumDeclaration; 118class Package; 119class Module; 120class WithScopeSymbol; 121class ArrayScopeSymbol; 122class Nspace; 123 124class AggregateDeclaration; 125class StructDeclaration; 126class UnionDeclaration; 127class ClassDeclaration; 128class InterfaceDeclaration; 129 130class Declaration; 131class TupleDeclaration; 132class AliasDeclaration; 133class OverDeclaration; 134class VarDeclaration; 135class SymbolDeclaration; 136class ThisDeclaration; 137 138class TypeInfoDeclaration; 139class TypeInfoStructDeclaration; 140class TypeInfoClassDeclaration; 141class TypeInfoInterfaceDeclaration; 142class TypeInfoPointerDeclaration; 143class TypeInfoArrayDeclaration; 144class TypeInfoStaticArrayDeclaration; 145class TypeInfoAssociativeArrayDeclaration; 146class TypeInfoEnumDeclaration; 147class TypeInfoFunctionDeclaration; 148class TypeInfoDelegateDeclaration; 149class TypeInfoTupleDeclaration; 150class TypeInfoConstDeclaration; 151class TypeInfoInvariantDeclaration; 152class TypeInfoSharedDeclaration; 153class TypeInfoWildDeclaration; 154class TypeInfoVectorDeclaration; 155 156class FuncDeclaration; 157class FuncAliasDeclaration; 158class FuncLiteralDeclaration; 159class CtorDeclaration; 160class PostBlitDeclaration; 161class DtorDeclaration; 162class StaticCtorDeclaration; 163class SharedStaticCtorDeclaration; 164class StaticDtorDeclaration; 165class SharedStaticDtorDeclaration; 166class InvariantDeclaration; 167class UnitTestDeclaration; 168class NewDeclaration; 169class DeleteDeclaration; 170 171class Initializer; 172class VoidInitializer; 173class ErrorInitializer; 174class StructInitializer; 175class ArrayInitializer; 176class ExpInitializer; 177 178class Expression; 179class IntegerExp; 180class ErrorExp; 181class RealExp; 182class ComplexExp; 183class IdentifierExp; 184class DollarExp; 185class DsymbolExp; 186class ThisExp; 187class SuperExp; 188class NullExp; 189class StringExp; 190class TupleExp; 191class ArrayLiteralExp; 192class AssocArrayLiteralExp; 193class StructLiteralExp; 194class TypeExp; 195class ScopeExp; 196class TemplateExp; 197class NewExp; 198class NewAnonClassExp; 199class SymbolExp; 200class SymOffExp; 201class VarExp; 202class OverExp; 203class FuncExp; 204class DeclarationExp; 205class TypeidExp; 206class TraitsExp; 207class HaltExp; 208class IsExp; 209class UnaExp; 210class BinExp; 211class BinAssignExp; 212class CompileExp; 213class ImportExp; 214class AssertExp; 215class DotIdExp; 216class DotTemplateExp; 217class DotVarExp; 218class DotTemplateInstanceExp; 219class DelegateExp; 220class DotTypeExp; 221class CallExp; 222class AddrExp; 223class PtrExp; 224class NegExp; 225class UAddExp; 226class ComExp; 227class NotExp; 228class DeleteExp; 229class CastExp; 230class VectorExp; 231class VectorArrayExp; 232class SliceExp; 233class ArrayLengthExp; 234class IntervalExp; 235class DelegatePtrExp; 236class DelegateFuncptrExp; 237class ArrayExp; 238class DotExp; 239class CommaExp; 240class IndexExp; 241class PostExp; 242class PreExp; 243class AssignExp; 244class ConstructExp; 245class BlitExp; 246class AddAssignExp; 247class MinAssignExp; 248class MulAssignExp; 249class DivAssignExp; 250class ModAssignExp; 251class AndAssignExp; 252class OrAssignExp; 253class XorAssignExp; 254class PowAssignExp; 255class ShlAssignExp; 256class ShrAssignExp; 257class UshrAssignExp; 258class CatAssignExp; 259class AddExp; 260class MinExp; 261class CatExp; 262class MulExp; 263class DivExp; 264class ModExp; 265class PowExp; 266class ShlExp; 267class ShrExp; 268class UshrExp; 269class AndExp; 270class OrExp; 271class XorExp; 272class OrOrExp; 273class AndAndExp; 274class CmpExp; 275class InExp; 276class RemoveExp; 277class EqualExp; 278class IdentityExp; 279class CondExp; 280class DefaultInitExp; 281class FileInitExp; 282class LineInitExp; 283class ModuleInitExp; 284class FuncInitExp; 285class PrettyFuncInitExp; 286class ClassReferenceExp; 287class VoidInitExp; 288class ThrownExceptionExp; 289 290class TemplateParameter; 291class TemplateTypeParameter; 292class TemplateThisParameter; 293class TemplateValueParameter; 294class TemplateAliasParameter; 295class TemplateTupleParameter; 296 297class Condition; 298class DVCondition; 299class DebugCondition; 300class VersionCondition; 301class StaticIfCondition; 302 303class Parameter; 304 305class Visitor 306{ 307public: 308 virtual void visit(Statement *) { assert(0); } 309 virtual void visit(ErrorStatement *s) { visit((Statement *)s); } 310 virtual void visit(PeelStatement *s) { visit((Statement *)s); } 311 virtual void visit(ExpStatement *s) { visit((Statement *)s); } 312 virtual void visit(DtorExpStatement *s) { visit((ExpStatement *)s); } 313 virtual void visit(CompileStatement *s) { visit((Statement *)s); } 314 virtual void visit(CompoundStatement *s) { visit((Statement *)s); } 315 virtual void visit(CompoundDeclarationStatement *s) { visit((CompoundStatement *)s); } 316 virtual void visit(UnrolledLoopStatement *s) { visit((Statement *)s); } 317 virtual void visit(ScopeStatement *s) { visit((Statement *)s); } 318 virtual void visit(ForwardingStatement *s) { visit((Statement *)s); } 319 virtual void visit(WhileStatement *s) { visit((Statement *)s); } 320 virtual void visit(DoStatement *s) { visit((Statement *)s); } 321 virtual void visit(ForStatement *s) { visit((Statement *)s); } 322 virtual void visit(ForeachStatement *s) { visit((Statement *)s); } 323 virtual void visit(ForeachRangeStatement *s) { visit((Statement *)s); } 324 virtual void visit(StaticForeachStatement *s) { visit((Statement *)s); } 325 virtual void visit(IfStatement *s) { visit((Statement *)s); } 326 virtual void visit(ConditionalStatement *s) { visit((Statement *)s); } 327 virtual void visit(PragmaStatement *s) { visit((Statement *)s); } 328 virtual void visit(StaticAssertStatement *s) { visit((Statement *)s); } 329 virtual void visit(SwitchStatement *s) { visit((Statement *)s); } 330 virtual void visit(CaseStatement *s) { visit((Statement *)s); } 331 virtual void visit(CaseRangeStatement *s) { visit((Statement *)s); } 332 virtual void visit(DefaultStatement *s) { visit((Statement *)s); } 333 virtual void visit(GotoDefaultStatement *s) { visit((Statement *)s); } 334 virtual void visit(GotoCaseStatement *s) { visit((Statement *)s); } 335 virtual void visit(SwitchErrorStatement *s) { visit((Statement *)s); } 336 virtual void visit(ReturnStatement *s) { visit((Statement *)s); } 337 virtual void visit(BreakStatement *s) { visit((Statement *)s); } 338 virtual void visit(ContinueStatement *s) { visit((Statement *)s); } 339 virtual void visit(SynchronizedStatement *s) { visit((Statement *)s); } 340 virtual void visit(WithStatement *s) { visit((Statement *)s); } 341 virtual void visit(TryCatchStatement *s) { visit((Statement *)s); } 342 virtual void visit(TryFinallyStatement *s) { visit((Statement *)s); } 343 virtual void visit(OnScopeStatement *s) { visit((Statement *)s); } 344 virtual void visit(ThrowStatement *s) { visit((Statement *)s); } 345 virtual void visit(DebugStatement *s) { visit((Statement *)s); } 346 virtual void visit(GotoStatement *s) { visit((Statement *)s); } 347 virtual void visit(LabelStatement *s) { visit((Statement *)s); } 348 virtual void visit(AsmStatement *s) { visit((Statement *)s); } 349 virtual void visit(InlineAsmStatement *s) { visit((AsmStatement *)s); } 350 virtual void visit(GccAsmStatement *s) { visit((AsmStatement *)s); } 351 virtual void visit(CompoundAsmStatement *s) { visit((CompoundStatement *)s); } 352 virtual void visit(ImportStatement *s) { visit((Statement *)s); } 353 354 virtual void visit(Type *) { assert(0); } 355 virtual void visit(TypeError *t) { visit((Type *)t); } 356 virtual void visit(TypeNext *t) { visit((Type *)t); } 357 virtual void visit(TypeBasic *t) { visit((Type *)t); } 358 virtual void visit(TypeVector *t) { visit((Type *)t); } 359 virtual void visit(TypeArray *t) { visit((TypeNext *)t); } 360 virtual void visit(TypeSArray *t) { visit((TypeArray *)t); } 361 virtual void visit(TypeDArray *t) { visit((TypeArray *)t); } 362 virtual void visit(TypeAArray *t) { visit((TypeArray *)t); } 363 virtual void visit(TypePointer *t) { visit((TypeNext *)t); } 364 virtual void visit(TypeReference *t) { visit((TypeNext *)t); } 365 virtual void visit(TypeFunction *t) { visit((TypeNext *)t); } 366 virtual void visit(TypeDelegate *t) { visit((TypeNext *)t); } 367 virtual void visit(TypeQualified *t) { visit((Type *)t); } 368 virtual void visit(TypeIdentifier *t) { visit((TypeQualified *)t); } 369 virtual void visit(TypeInstance *t) { visit((TypeQualified *)t); } 370 virtual void visit(TypeTypeof *t) { visit((TypeQualified *)t); } 371 virtual void visit(TypeReturn *t) { visit((TypeQualified *)t); } 372 virtual void visit(TypeStruct *t) { visit((Type *)t); } 373 virtual void visit(TypeEnum *t) { visit((Type *)t); } 374 virtual void visit(TypeClass *t) { visit((Type *)t); } 375 virtual void visit(TypeTuple *t) { visit((Type *)t); } 376 virtual void visit(TypeSlice *t) { visit((TypeNext *)t); } 377 virtual void visit(TypeNull *t) { visit((Type *)t); } 378 virtual void visit(TypeTraits *t) { visit((Type *)t); } 379 380 virtual void visit(Dsymbol *) { assert(0); } 381 382 virtual void visit(StaticAssert *s) { visit((Dsymbol *)s); } 383 virtual void visit(DebugSymbol *s) { visit((Dsymbol *)s); } 384 virtual void visit(VersionSymbol *s) { visit((Dsymbol *)s); } 385 virtual void visit(EnumMember *s) { visit((VarDeclaration *)s); } 386 virtual void visit(Import *s) { visit((Dsymbol *)s); } 387 virtual void visit(OverloadSet *s) { visit((Dsymbol *)s); } 388 virtual void visit(LabelDsymbol *s) { visit((Dsymbol *)s); } 389 virtual void visit(AliasThis *s) { visit((Dsymbol *)s); } 390 391 virtual void visit(AttribDeclaration *s) { visit((Dsymbol *)s); } 392 virtual void visit(StorageClassDeclaration *s) { visit((AttribDeclaration *)s); } 393 virtual void visit(DeprecatedDeclaration *s) { visit((StorageClassDeclaration *)s); } 394 virtual void visit(LinkDeclaration *s) { visit((AttribDeclaration *)s); } 395 virtual void visit(CPPMangleDeclaration *s) { visit((AttribDeclaration *)s); } 396 virtual void visit(ProtDeclaration *s) { visit((AttribDeclaration *)s); } 397 virtual void visit(AlignDeclaration *s) { visit((AttribDeclaration *)s); } 398 virtual void visit(AnonDeclaration *s) { visit((AttribDeclaration *)s); } 399 virtual void visit(PragmaDeclaration *s) { visit((AttribDeclaration *)s); } 400 virtual void visit(ConditionalDeclaration *s) { visit((AttribDeclaration *)s); } 401 virtual void visit(StaticIfDeclaration *s) { visit((ConditionalDeclaration *)s); } 402 virtual void visit(StaticForeachDeclaration *s) { visit((AttribDeclaration *)s); } 403 virtual void visit(CompileDeclaration *s) { visit((AttribDeclaration *)s); } 404 virtual void visit(UserAttributeDeclaration *s) { visit((AttribDeclaration *)s); } 405 virtual void visit(ForwardingAttribDeclaration *s) { visit((AttribDeclaration *)s); } 406 407 virtual void visit(ScopeDsymbol *s) { visit((Dsymbol *)s); } 408 virtual void visit(TemplateDeclaration *s) { visit((ScopeDsymbol *)s); } 409 virtual void visit(TemplateInstance *s) { visit((ScopeDsymbol *)s); } 410 virtual void visit(TemplateMixin *s) { visit((TemplateInstance *)s); } 411 virtual void visit(EnumDeclaration *s) { visit((ScopeDsymbol *)s); } 412 virtual void visit(Package *s) { visit((ScopeDsymbol *)s); } 413 virtual void visit(Module *s) { visit((Package *)s); } 414 virtual void visit(WithScopeSymbol *s) { visit((ScopeDsymbol *)s); } 415 virtual void visit(ArrayScopeSymbol *s) { visit((ScopeDsymbol *)s); } 416 virtual void visit(Nspace *s) { visit((ScopeDsymbol *)s); } 417 418 virtual void visit(AggregateDeclaration *s) { visit((ScopeDsymbol *)s); } 419 virtual void visit(StructDeclaration *s) { visit((AggregateDeclaration *)s); } 420 virtual void visit(UnionDeclaration *s) { visit((StructDeclaration *)s); } 421 virtual void visit(ClassDeclaration *s) { visit((AggregateDeclaration *)s); } 422 virtual void visit(InterfaceDeclaration *s) { visit((ClassDeclaration *)s); } 423 424 virtual void visit(Declaration *s) { visit((Dsymbol *)s); } 425 virtual void visit(TupleDeclaration *s) { visit((Declaration *)s); } 426 virtual void visit(AliasDeclaration *s) { visit((Declaration *)s); } 427 virtual void visit(OverDeclaration *s) { visit((Declaration *)s); } 428 virtual void visit(VarDeclaration *s) { visit((Declaration *)s); } 429 virtual void visit(SymbolDeclaration *s) { visit((Declaration *)s); } 430 virtual void visit(ThisDeclaration *s) { visit((VarDeclaration *)s); } 431 432 virtual void visit(TypeInfoDeclaration *s) { visit((VarDeclaration *)s); } 433 virtual void visit(TypeInfoStructDeclaration *s) { visit((TypeInfoDeclaration *)s); } 434 virtual void visit(TypeInfoClassDeclaration *s) { visit((TypeInfoDeclaration *)s); } 435 virtual void visit(TypeInfoInterfaceDeclaration *s) { visit((TypeInfoDeclaration *)s); } 436 virtual void visit(TypeInfoPointerDeclaration *s) { visit((TypeInfoDeclaration *)s); } 437 virtual void visit(TypeInfoArrayDeclaration *s) { visit((TypeInfoDeclaration *)s); } 438 virtual void visit(TypeInfoStaticArrayDeclaration *s) { visit((TypeInfoDeclaration *)s); } 439 virtual void visit(TypeInfoAssociativeArrayDeclaration *s) { visit((TypeInfoDeclaration *)s); } 440 virtual void visit(TypeInfoEnumDeclaration *s) { visit((TypeInfoDeclaration *)s); } 441 virtual void visit(TypeInfoFunctionDeclaration *s) { visit((TypeInfoDeclaration *)s); } 442 virtual void visit(TypeInfoDelegateDeclaration *s) { visit((TypeInfoDeclaration *)s); } 443 virtual void visit(TypeInfoTupleDeclaration *s) { visit((TypeInfoDeclaration *)s); } 444 virtual void visit(TypeInfoConstDeclaration *s) { visit((TypeInfoDeclaration *)s); } 445 virtual void visit(TypeInfoInvariantDeclaration *s) { visit((TypeInfoDeclaration *)s); } 446 virtual void visit(TypeInfoSharedDeclaration *s) { visit((TypeInfoDeclaration *)s); } 447 virtual void visit(TypeInfoWildDeclaration *s) { visit((TypeInfoDeclaration *)s); } 448 virtual void visit(TypeInfoVectorDeclaration *s) { visit((TypeInfoDeclaration *)s); } 449 450 virtual void visit(FuncDeclaration *s) { visit((Declaration *)s); } 451 virtual void visit(FuncAliasDeclaration *s) { visit((FuncDeclaration *)s); } 452 virtual void visit(FuncLiteralDeclaration *s) { visit((FuncDeclaration *)s); } 453 virtual void visit(CtorDeclaration *s) { visit((FuncDeclaration *)s); } 454 virtual void visit(PostBlitDeclaration *s) { visit((FuncDeclaration *)s); } 455 virtual void visit(DtorDeclaration *s) { visit((FuncDeclaration *)s); } 456 virtual void visit(StaticCtorDeclaration *s) { visit((FuncDeclaration *)s); } 457 virtual void visit(SharedStaticCtorDeclaration *s) { visit((StaticCtorDeclaration *)s); } 458 virtual void visit(StaticDtorDeclaration *s) { visit((FuncDeclaration *)s); } 459 virtual void visit(SharedStaticDtorDeclaration *s) { visit((StaticDtorDeclaration *)s); } 460 virtual void visit(InvariantDeclaration *s) { visit((FuncDeclaration *)s); } 461 virtual void visit(UnitTestDeclaration *s) { visit((FuncDeclaration *)s); } 462 virtual void visit(NewDeclaration *s) { visit((FuncDeclaration *)s); } 463 virtual void visit(DeleteDeclaration *s) { visit((FuncDeclaration *)s); } 464 465 virtual void visit(Initializer *) { assert(0); } 466 virtual void visit(VoidInitializer *i) { visit((Initializer *)i); } 467 virtual void visit(ErrorInitializer *i) { visit((Initializer *)i); } 468 virtual void visit(StructInitializer *i) { visit((Initializer *)i); } 469 virtual void visit(ArrayInitializer *i) { visit((Initializer *)i); } 470 virtual void visit(ExpInitializer *i) { visit((Initializer *)i); } 471 472 virtual void visit(Expression *) { assert(0); } 473 virtual void visit(IntegerExp *e) { visit((Expression *)e); } 474 virtual void visit(ErrorExp *e) { visit((Expression *)e); } 475 virtual void visit(RealExp *e) { visit((Expression *)e); } 476 virtual void visit(ComplexExp *e) { visit((Expression *)e); } 477 virtual void visit(IdentifierExp *e) { visit((Expression *)e); } 478 virtual void visit(DollarExp *e) { visit((IdentifierExp *)e); } 479 virtual void visit(DsymbolExp *e) { visit((Expression *)e); } 480 virtual void visit(ThisExp *e) { visit((Expression *)e); } 481 virtual void visit(SuperExp *e) { visit((ThisExp *)e); } 482 virtual void visit(NullExp *e) { visit((Expression *)e); } 483 virtual void visit(StringExp *e) { visit((Expression *)e); } 484 virtual void visit(TupleExp *e) { visit((Expression *)e); } 485 virtual void visit(ArrayLiteralExp *e) { visit((Expression *)e); } 486 virtual void visit(AssocArrayLiteralExp *e) { visit((Expression *)e); } 487 virtual void visit(StructLiteralExp *e) { visit((Expression *)e); } 488 virtual void visit(TypeExp *e) { visit((Expression *)e); } 489 virtual void visit(ScopeExp *e) { visit((Expression *)e); } 490 virtual void visit(TemplateExp *e) { visit((Expression *)e); } 491 virtual void visit(NewExp *e) { visit((Expression *)e); } 492 virtual void visit(NewAnonClassExp *e) { visit((Expression *)e); } 493 virtual void visit(SymbolExp *e) { visit((Expression *)e); } 494 virtual void visit(SymOffExp *e) { visit((SymbolExp *)e); } 495 virtual void visit(VarExp *e) { visit((SymbolExp *)e); } 496 virtual void visit(OverExp *e) { visit((Expression *)e); } 497 virtual void visit(FuncExp *e) { visit((Expression *)e); } 498 virtual void visit(DeclarationExp *e) { visit((Expression *)e); } 499 virtual void visit(TypeidExp *e) { visit((Expression *)e); } 500 virtual void visit(TraitsExp *e) { visit((Expression *)e); } 501 virtual void visit(HaltExp *e) { visit((Expression *)e); } 502 virtual void visit(IsExp *e) { visit((Expression *)e); } 503 virtual void visit(UnaExp *e) { visit((Expression *)e); } 504 virtual void visit(BinExp *e) { visit((Expression *)e); } 505 virtual void visit(BinAssignExp *e) { visit((BinExp *)e); } 506 virtual void visit(CompileExp *e) { visit((UnaExp *)e); } 507 virtual void visit(ImportExp *e) { visit((UnaExp *)e); } 508 virtual void visit(AssertExp *e) { visit((UnaExp *)e); } 509 virtual void visit(DotIdExp *e) { visit((UnaExp *)e); } 510 virtual void visit(DotTemplateExp *e) { visit((UnaExp *)e); } 511 virtual void visit(DotVarExp *e) { visit((UnaExp *)e); } 512 virtual void visit(DotTemplateInstanceExp *e) { visit((UnaExp *)e); } 513 virtual void visit(DelegateExp *e) { visit((UnaExp *)e); } 514 virtual void visit(DotTypeExp *e) { visit((UnaExp *)e); } 515 virtual void visit(CallExp *e) { visit((UnaExp *)e); } 516 virtual void visit(AddrExp *e) { visit((UnaExp *)e); } 517 virtual void visit(PtrExp *e) { visit((UnaExp *)e); } 518 virtual void visit(NegExp *e) { visit((UnaExp *)e); } 519 virtual void visit(UAddExp *e) { visit((UnaExp *)e); } 520 virtual void visit(ComExp *e) { visit((UnaExp *)e); } 521 virtual void visit(NotExp *e) { visit((UnaExp *)e); } 522 virtual void visit(DeleteExp *e) { visit((UnaExp *)e); } 523 virtual void visit(CastExp *e) { visit((UnaExp *)e); } 524 virtual void visit(VectorExp *e) { visit((UnaExp *)e); } 525 virtual void visit(VectorArrayExp *e) { visit((UnaExp *)e); } 526 virtual void visit(SliceExp *e) { visit((UnaExp *)e); } 527 virtual void visit(ArrayLengthExp *e) { visit((UnaExp *)e); } 528 virtual void visit(IntervalExp *e) { visit((Expression *)e); } 529 virtual void visit(DelegatePtrExp *e) { visit((UnaExp *)e); } 530 virtual void visit(DelegateFuncptrExp *e) { visit((UnaExp *)e); } 531 virtual void visit(ArrayExp *e) { visit((UnaExp *)e); } 532 virtual void visit(DotExp *e) { visit((BinExp *)e); } 533 virtual void visit(CommaExp *e) { visit((BinExp *)e); } 534 virtual void visit(IndexExp *e) { visit((BinExp *)e); } 535 virtual void visit(PostExp *e) { visit((BinExp *)e); } 536 virtual void visit(PreExp *e) { visit((UnaExp *)e); } 537 virtual void visit(AssignExp *e) { visit((BinExp *)e); } 538 virtual void visit(ConstructExp *e) { visit((AssignExp *)e); } 539 virtual void visit(BlitExp *e) { visit((AssignExp *)e); } 540 virtual void visit(AddAssignExp *e) { visit((BinAssignExp *)e); } 541 virtual void visit(MinAssignExp *e) { visit((BinAssignExp *)e); } 542 virtual void visit(MulAssignExp *e) { visit((BinAssignExp *)e); } 543 virtual void visit(DivAssignExp *e) { visit((BinAssignExp *)e); } 544 virtual void visit(ModAssignExp *e) { visit((BinAssignExp *)e); } 545 virtual void visit(AndAssignExp *e) { visit((BinAssignExp *)e); } 546 virtual void visit(OrAssignExp *e) { visit((BinAssignExp *)e); } 547 virtual void visit(XorAssignExp *e) { visit((BinAssignExp *)e); } 548 virtual void visit(PowAssignExp *e) { visit((BinAssignExp *)e); } 549 virtual void visit(ShlAssignExp *e) { visit((BinAssignExp *)e); } 550 virtual void visit(ShrAssignExp *e) { visit((BinAssignExp *)e); } 551 virtual void visit(UshrAssignExp *e) { visit((BinAssignExp *)e); } 552 virtual void visit(CatAssignExp *e) { visit((BinAssignExp *)e); } 553 virtual void visit(AddExp *e) { visit((BinExp *)e); } 554 virtual void visit(MinExp *e) { visit((BinExp *)e); } 555 virtual void visit(CatExp *e) { visit((BinExp *)e); } 556 virtual void visit(MulExp *e) { visit((BinExp *)e); } 557 virtual void visit(DivExp *e) { visit((BinExp *)e); } 558 virtual void visit(ModExp *e) { visit((BinExp *)e); } 559 virtual void visit(PowExp *e) { visit((BinExp *)e); } 560 virtual void visit(ShlExp *e) { visit((BinExp *)e); } 561 virtual void visit(ShrExp *e) { visit((BinExp *)e); } 562 virtual void visit(UshrExp *e) { visit((BinExp *)e); } 563 virtual void visit(AndExp *e) { visit((BinExp *)e); } 564 virtual void visit(OrExp *e) { visit((BinExp *)e); } 565 virtual void visit(XorExp *e) { visit((BinExp *)e); } 566 virtual void visit(OrOrExp *e) { visit((BinExp *)e); } 567 virtual void visit(AndAndExp *e) { visit((BinExp *)e); } 568 virtual void visit(CmpExp *e) { visit((BinExp *)e); } 569 virtual void visit(InExp *e) { visit((BinExp *)e); } 570 virtual void visit(RemoveExp *e) { visit((BinExp *)e); } 571 virtual void visit(EqualExp *e) { visit((BinExp *)e); } 572 virtual void visit(IdentityExp *e) { visit((BinExp *)e); } 573 virtual void visit(CondExp *e) { visit((BinExp *)e); } 574 virtual void visit(DefaultInitExp *e) { visit((Expression *)e); } 575 virtual void visit(FileInitExp *e) { visit((DefaultInitExp *)e); } 576 virtual void visit(LineInitExp *e) { visit((DefaultInitExp *)e); } 577 virtual void visit(ModuleInitExp *e) { visit((DefaultInitExp *)e); } 578 virtual void visit(FuncInitExp *e) { visit((DefaultInitExp *)e); } 579 virtual void visit(PrettyFuncInitExp *e) { visit((DefaultInitExp *)e); } 580 virtual void visit(ClassReferenceExp *e) { visit((Expression *)e); } 581 virtual void visit(VoidInitExp *e) { visit((Expression *)e); } 582 virtual void visit(ThrownExceptionExp *e) { visit((Expression *)e); } 583 584 virtual void visit(TemplateParameter *) { assert(0); } 585 virtual void visit(TemplateTypeParameter *tp) { visit((TemplateParameter *)tp); } 586 virtual void visit(TemplateThisParameter *tp) { visit((TemplateTypeParameter *)tp); } 587 virtual void visit(TemplateValueParameter *tp) { visit((TemplateParameter *)tp); } 588 virtual void visit(TemplateAliasParameter *tp) { visit((TemplateParameter *)tp); } 589 virtual void visit(TemplateTupleParameter *tp) { visit((TemplateParameter *)tp); } 590 591 virtual void visit(Condition *) { assert(0); } 592 virtual void visit(DVCondition *c) { visit((Condition *)c); } 593 virtual void visit(DebugCondition *c) { visit((DVCondition *)c); } 594 virtual void visit(VersionCondition *c) { visit((DVCondition *)c); } 595 virtual void visit(StaticIfCondition *c) { visit((Condition *)c); } 596 597 virtual void visit(Parameter *) { assert(0); } 598}; 599 600class StoppableVisitor : public Visitor 601{ 602public: 603 bool stop; 604 StoppableVisitor() : stop(false) {} 605}; 606