Synopsis - Cross-Reference
File: /src/Synopsis/ASG/Visitor.hh1// 2// Copyright (C) 2004 Stefan Seefeld 3// All rights reserved. 4// Licensed to the public under the terms of the GNU LGPL (>= 2), 5// see the file COPYING for details. 6// 7 8#ifndef _Synopsis_ASG_Visitor_hh 9#define _Synopsis_ASG_Visitor_hh 10 11namespace Synopsis 12{ 13namespace ASG 14{ 15 16class Declaration; 17class Builtin; 18class Macro; 19class Scope; 20class Module; 21class Class; 22class Inheritance; 23class Forward; 24class Typedef; 25class Variable; 26class Const; 27class Enumerator; 28class Enum; 29class Parameter; 30class Function; 31class Operation; 32 33//. The Visitor for the AST hierarchy. This class is just an interface 34//. really. It is abstract, and you must reimplement any methods you want. 35//. The default implementations of the methods call the visit methods for 36//. the subclasses of the visited type, eg visit_namespace calls visit_scope 37//. which calls visit_declaration. 38class Visitor 39{ 40public: 41 // Abstract destructor makes the class abstract 42 virtual ~Visitor() {} 43 virtual void visit_declaration(const Declaration*) = 0; 44 virtual void visit_builtin(const Builtin*) = 0; 45 virtual void visit_macro(const Macro*) = 0; 46 virtual void visit_scope(const Scope*) = 0; 47 virtual void visit_module(const Module*) = 0; 48 virtual void visit_class(const Class*) = 0; 49 virtual void visit_inheritance(const Inheritance*) = 0; 50 virtual void visit_forward(const Forward*) = 0; 51 virtual void visit_typedef(const Typedef*) = 0; 52 virtual void visit_variable(const Variable*) = 0; 53 virtual void visit_const(const Const*) = 0; 54 virtual void visit_enum(const Enum*) = 0; 55 virtual void visit_enumerator(const Enumerator*) = 0; 56 virtual void visit_parameter(const Parameter*) = 0; 57 virtual void visit_function(const Function*) = 0; 58 virtual void visit_operation(const Operation*) = 0; 59}; 60 61class TypeId; 62class UnknownTypeId; 63class ModifierTypeId; 64class ArrayTypeId; 65class NamedTypeId; 66class BuiltinTypeId; 67class DependentTypeId; 68class DeclaredTypeId; 69class TemplateId; 70class ParametrizedTypeId; 71class FunctionTypeId; 72 73//. The Type Visitor base class 74class TypeIdVisitor 75{ 76public: 77 // Virtual destructor makes abstract 78 virtual ~TypeIdVisitor() {} 79 virtual void visit_type_id(const TypeId*) = 0; 80 virtual void visit_named_type_id(const NamedTypeId*) = 0; 81 virtual void visit_builtin_type_id(const BuiltinTypeId*) = 0; 82 virtual void visit_dependent_type_id(const DependentTypeId*) = 0; 83 virtual void visit_unknown_type_id(const UnknownTypeId*) = 0; 84 virtual void visit_modifier_type_id(const ModifierTypeId*) = 0; 85 virtual void visit_array_type_id(const ArrayTypeId*) = 0; 86 virtual void visit_declared_type_id(const DeclaredTypeId*) = 0; 87 virtual void visit_template_id(const TemplateId*) = 0; 88 virtual void visit_parametrized_type_id(const ParametrizedTypeId*) = 0; 89 virtual void visit_function_type_id(const FunctionTypeId*) = 0; 90}; 91 92} 93} 94 95#endif