Changes in src/AST/Pass.hpp [04124c4:6d51bd7]
- File:
-
- 1 edited
-
src/AST/Pass.hpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Pass.hpp
r04124c4 r6d51bd7 23 23 #include "AST/Fwd.hpp" 24 24 #include "AST/Node.hpp" 25 26 #include "AST/Attribute.hpp" 25 27 #include "AST/Decl.hpp" 28 #include "AST/Expr.hpp" 29 #include "AST/Init.hpp" 30 #include "AST/Stmt.hpp" 31 26 32 #include "AST/Visitor.hpp" 27 33 … … 79 85 80 86 /// Visit function declarations 81 virtual DeclWithType * visit( constObjectDecl * ) override final;82 virtual DeclWithType * visit( constFunctionDecl * ) override final;83 virtual Decl * visit( constStructDecl * ) override final;84 virtual Decl * visit( constUnionDecl * ) override final;85 virtual Decl * visit( constEnumDecl * ) override final;86 virtual Decl * visit( constTraitDecl * ) override final;87 virtual Decl * visit( constTypeDecl * ) override final;88 virtual Decl * visit( constTypedefDecl * ) override final;89 virtual AsmDecl * visit( constAsmDecl * ) override final;90 virtual StaticAssertDecl * visit( constStaticAssertDecl * ) override final;91 virtual CompoundStmt * visit( constCompoundStmt * ) override final;92 virtual Stmt * visit( constExprStmt * ) override final;93 virtual Stmt * visit( constAsmStmt * ) override final;94 virtual Stmt * visit( constDirectiveStmt * ) override final;95 virtual Stmt * visit( constIfStmt * ) override final;96 virtual Stmt * visit( constWhileStmt * ) override final;97 virtual Stmt * visit( constForStmt * ) override final;98 virtual Stmt * visit( constSwitchStmt * ) override final;99 virtual Stmt * visit( constCaseStmt * ) override final;100 virtual Stmt * visit( constBranchStmt * ) override final;101 virtual Stmt * visit( constReturnStmt * ) override final;102 virtual Stmt * visit( constThrowStmt * ) override final;103 virtual Stmt * visit( constTryStmt * ) override final;104 virtual Stmt * visit( constCatchStmt * ) override final;105 virtual Stmt * visit( constFinallyStmt * ) override final;106 virtual Stmt * visit( constWaitForStmt * ) override final;107 virtual Stmt * visit( constWithStmt * ) override final;108 virtual NullStmt * visit( constNullStmt * ) override final;109 virtual Stmt * visit( constDeclStmt * ) override final;110 virtual Stmt * visit( constImplicitCtorDtorStmt * ) override final;111 virtual Expr * visit( constApplicationExpr * ) override final;112 virtual Expr * visit( constUntypedExpr * ) override final;113 virtual Expr * visit( constNameExpr * ) override final;114 virtual Expr * visit( constAddressExpr * ) override final;115 virtual Expr * visit( constLabelAddressExpr * ) override final;116 virtual Expr * visit( constCastExpr * ) override final;117 virtual Expr * visit( constKeywordCastExpr * ) override final;118 virtual Expr * visit( constVirtualCastExpr * ) override final;119 virtual Expr * visit( constUntypedMemberExpr * ) override final;120 virtual Expr * visit( constMemberExpr * ) override final;121 virtual Expr * visit( constVariableExpr * ) override final;122 virtual Expr * visit( constConstantExpr * ) override final;123 virtual Expr * visit( constSizeofExpr * ) override final;124 virtual Expr * visit( constAlignofExpr * ) override final;125 virtual Expr * visit( constUntypedOffsetofExpr * ) override final;126 virtual Expr * visit( constOffsetofExpr * ) override final;127 virtual Expr * visit( constOffsetPackExpr * ) override final;128 virtual Expr * visit( constAttrExpr * ) override final;129 virtual Expr * visit( constLogicalExpr * ) override final;130 virtual Expr * visit( constConditionalExpr * ) override final;131 virtual Expr * visit( constCommaExpr * ) override final;132 virtual Expr * visit( constTypeExpr * ) override final;133 virtual Expr * visit( constAsmExpr * ) override final;134 virtual Expr * visit( constImplicitCopyCtorExpr * ) override final;135 virtual Expr * visit( constConstructorExpr * ) override final;136 virtual Expr * visit( constCompoundLiteralExpr * ) override final;137 virtual Expr * visit( constRangeExpr * ) override final;138 virtual Expr * visit( constUntypedTupleExpr * ) override final;139 virtual Expr * visit( constTupleExpr * ) override final;140 virtual Expr * visit( constTupleIndexExpr * ) override final;141 virtual Expr * visit( constTupleAssignExpr * ) override final;142 virtual Expr * visit( constStmtExpr * ) override final;143 virtual Expr * visit( constUniqueExpr * ) override final;144 virtual Expr * visit( constUntypedInitExpr * ) override final;145 virtual Expr * visit( constInitExpr * ) override final;146 virtual Expr * visit( constDeletedExpr * ) override final;147 virtual Expr * visit( constDefaultArgExpr * ) override final;148 virtual Expr * visit( constGenericExpr * ) override final;149 virtual Type * visit( constVoidType * ) override final;150 virtual Type * visit( constBasicType * ) override final;151 virtual Type * visit( constPointerType * ) override final;152 virtual Type * visit( constArrayType * ) override final;153 virtual Type * visit( constReferenceType * ) override final;154 virtual Type * visit( constQualifiedType * ) override final;155 virtual Type * visit( constFunctionType * ) override final;156 virtual Type * visit( constStructInstType * ) override final;157 virtual Type * visit( constUnionInstType * ) override final;158 virtual Type * visit( constEnumInstType * ) override final;159 virtual Type * visit( constTraitInstType * ) override final;160 virtual Type * visit( constTypeInstType * ) override final;161 virtual Type * visit( constTupleType * ) override final;162 virtual Type * visit( constTypeofType * ) override final;163 virtual Type * visit( constAttrType * ) override final;164 virtual Type * visit( constVarArgsType * ) override final;165 virtual Type * visit( constZeroType * ) override final;166 virtual Type * visit( constOneType * ) override final;167 virtual Type * visit( constGlobalScopeType * ) override final;168 virtual Designation * visit( constDesignation * ) override final;169 virtual Init * visit( constSingleInit * ) override final;170 virtual Init * visit( constListInit * ) override final;171 virtual Init * visit( constConstructorInit * ) override final;172 virtual Constant * visit( constConstant * ) override final;173 virtual Attribute * visit( constAttribute * ) override final;174 virtual TypeSubstitution * visit( constTypeSubstitution * ) override final;87 virtual const ast::DeclWithType * visit( const ast::ObjectDecl * ) override final; 88 virtual const ast::DeclWithType * visit( const ast::FunctionDecl * ) override final; 89 virtual const ast::Decl * visit( const ast::StructDecl * ) override final; 90 virtual const ast::Decl * visit( const ast::UnionDecl * ) override final; 91 virtual const ast::Decl * visit( const ast::EnumDecl * ) override final; 92 virtual const ast::Decl * visit( const ast::TraitDecl * ) override final; 93 virtual const ast::Decl * visit( const ast::TypeDecl * ) override final; 94 virtual const ast::Decl * visit( const ast::TypedefDecl * ) override final; 95 virtual const ast::AsmDecl * visit( const ast::AsmDecl * ) override final; 96 virtual const ast::StaticAssertDecl * visit( const ast::StaticAssertDecl * ) override final; 97 virtual const ast::CompoundStmt * visit( const ast::CompoundStmt * ) override final; 98 virtual const ast::Stmt * visit( const ast::ExprStmt * ) override final; 99 virtual const ast::Stmt * visit( const ast::AsmStmt * ) override final; 100 virtual const ast::Stmt * visit( const ast::DirectiveStmt * ) override final; 101 virtual const ast::Stmt * visit( const ast::IfStmt * ) override final; 102 virtual const ast::Stmt * visit( const ast::WhileStmt * ) override final; 103 virtual const ast::Stmt * visit( const ast::ForStmt * ) override final; 104 virtual const ast::Stmt * visit( const ast::SwitchStmt * ) override final; 105 virtual const ast::Stmt * visit( const ast::CaseStmt * ) override final; 106 virtual const ast::Stmt * visit( const ast::BranchStmt * ) override final; 107 virtual const ast::Stmt * visit( const ast::ReturnStmt * ) override final; 108 virtual const ast::Stmt * visit( const ast::ThrowStmt * ) override final; 109 virtual const ast::Stmt * visit( const ast::TryStmt * ) override final; 110 virtual const ast::Stmt * visit( const ast::CatchStmt * ) override final; 111 virtual const ast::Stmt * visit( const ast::FinallyStmt * ) override final; 112 virtual const ast::Stmt * visit( const ast::WaitForStmt * ) override final; 113 virtual const ast::Stmt * visit( const ast::WithStmt * ) override final; 114 virtual const ast::NullStmt * visit( const ast::NullStmt * ) override final; 115 virtual const ast::Stmt * visit( const ast::DeclStmt * ) override final; 116 virtual const ast::Stmt * visit( const ast::ImplicitCtorDtorStmt * ) override final; 117 virtual const ast::Expr * visit( const ast::ApplicationExpr * ) override final; 118 virtual const ast::Expr * visit( const ast::UntypedExpr * ) override final; 119 virtual const ast::Expr * visit( const ast::NameExpr * ) override final; 120 virtual const ast::Expr * visit( const ast::AddressExpr * ) override final; 121 virtual const ast::Expr * visit( const ast::LabelAddressExpr * ) override final; 122 virtual const ast::Expr * visit( const ast::CastExpr * ) override final; 123 virtual const ast::Expr * visit( const ast::KeywordCastExpr * ) override final; 124 virtual const ast::Expr * visit( const ast::VirtualCastExpr * ) override final; 125 virtual const ast::Expr * visit( const ast::UntypedMemberExpr * ) override final; 126 virtual const ast::Expr * visit( const ast::MemberExpr * ) override final; 127 virtual const ast::Expr * visit( const ast::VariableExpr * ) override final; 128 virtual const ast::Expr * visit( const ast::ConstantExpr * ) override final; 129 virtual const ast::Expr * visit( const ast::SizeofExpr * ) override final; 130 virtual const ast::Expr * visit( const ast::AlignofExpr * ) override final; 131 virtual const ast::Expr * visit( const ast::UntypedOffsetofExpr * ) override final; 132 virtual const ast::Expr * visit( const ast::OffsetofExpr * ) override final; 133 virtual const ast::Expr * visit( const ast::OffsetPackExpr * ) override final; 134 virtual const ast::Expr * visit( const ast::AttrExpr * ) override final; 135 virtual const ast::Expr * visit( const ast::LogicalExpr * ) override final; 136 virtual const ast::Expr * visit( const ast::ConditionalExpr * ) override final; 137 virtual const ast::Expr * visit( const ast::CommaExpr * ) override final; 138 virtual const ast::Expr * visit( const ast::TypeExpr * ) override final; 139 virtual const ast::Expr * visit( const ast::AsmExpr * ) override final; 140 virtual const ast::Expr * visit( const ast::ImplicitCopyCtorExpr * ) override final; 141 virtual const ast::Expr * visit( const ast::ConstructorExpr * ) override final; 142 virtual const ast::Expr * visit( const ast::CompoundLiteralExpr * ) override final; 143 virtual const ast::Expr * visit( const ast::RangeExpr * ) override final; 144 virtual const ast::Expr * visit( const ast::UntypedTupleExpr * ) override final; 145 virtual const ast::Expr * visit( const ast::TupleExpr * ) override final; 146 virtual const ast::Expr * visit( const ast::TupleIndexExpr * ) override final; 147 virtual const ast::Expr * visit( const ast::TupleAssignExpr * ) override final; 148 virtual const ast::Expr * visit( const ast::StmtExpr * ) override final; 149 virtual const ast::Expr * visit( const ast::UniqueExpr * ) override final; 150 virtual const ast::Expr * visit( const ast::UntypedInitExpr * ) override final; 151 virtual const ast::Expr * visit( const ast::InitExpr * ) override final; 152 virtual const ast::Expr * visit( const ast::DeletedExpr * ) override final; 153 virtual const ast::Expr * visit( const ast::DefaultArgExpr * ) override final; 154 virtual const ast::Expr * visit( const ast::GenericExpr * ) override final; 155 virtual const ast::Type * visit( const ast::VoidType * ) override final; 156 virtual const ast::Type * visit( const ast::BasicType * ) override final; 157 virtual const ast::Type * visit( const ast::PointerType * ) override final; 158 virtual const ast::Type * visit( const ast::ArrayType * ) override final; 159 virtual const ast::Type * visit( const ast::ReferenceType * ) override final; 160 virtual const ast::Type * visit( const ast::QualifiedType * ) override final; 161 virtual const ast::Type * visit( const ast::FunctionType * ) override final; 162 virtual const ast::Type * visit( const ast::StructInstType * ) override final; 163 virtual const ast::Type * visit( const ast::UnionInstType * ) override final; 164 virtual const ast::Type * visit( const ast::EnumInstType * ) override final; 165 virtual const ast::Type * visit( const ast::TraitInstType * ) override final; 166 virtual const ast::Type * visit( const ast::TypeInstType * ) override final; 167 virtual const ast::Type * visit( const ast::TupleType * ) override final; 168 virtual const ast::Type * visit( const ast::TypeofType * ) override final; 169 virtual const ast::Type * visit( const ast::AttrType * ) override final; 170 virtual const ast::Type * visit( const ast::VarArgsType * ) override final; 171 virtual const ast::Type * visit( const ast::ZeroType * ) override final; 172 virtual const ast::Type * visit( const ast::OneType * ) override final; 173 virtual const ast::Type * visit( const ast::GlobalScopeType * ) override final; 174 virtual const ast::Designation * visit( const ast::Designation * ) override final; 175 virtual const ast::Init * visit( const ast::SingleInit * ) override final; 176 virtual const ast::Init * visit( const ast::ListInit * ) override final; 177 virtual const ast::Init * visit( const ast::ConstructorInit * ) override final; 178 virtual const ast::Constant * visit( const ast::Constant * ) override final; 179 virtual const ast::Attribute * visit( const ast::Attribute * ) override final; 180 virtual const ast::TypeSubstitution * visit( const ast::TypeSubstitution * ) override final; 175 181 176 182 friend void acceptAll( std::list< ptr<Decl> > & decls, Pass<pass_t>& visitor ); … … 180 186 181 187 private: 188 const ast::Stmt * call_accept( const ast::Stmt * ); 189 const ast::Expr * call_accept( const ast::Expr * ); 190 191 template< typename node_t > 192 auto call_accept( const node_t * node ) -> decltype( node->accept(*this) ); 193 194 template< template <class...> class container_t > 195 container_t< ptr<Stmt> > call_accept( const container_t< ptr<Stmt> > & ); 196 197 template< template <class...> class container_t, typename node_t > 198 container_t< ptr<node_t> > call_accept( const container_t< ptr<node_t> > & container ); 199 182 200 /// Logic to call the accept and mutate the parent if needed, delegates call to accept 183 template<typename parent_t, typename child_t> 184 void maybe_accept(parent_t * & , typename parent_t::child_t *); 185 186 Stmt * call_accept( const Stmt * ); 187 Expr * call_accept( const Expr * ); 188 189 template< template <class> class container_t > 190 container_t< ptr<Stmt> > call_accept( const container_t< ptr<Stmt> > & ); 191 192 template< template <class> class container_t, typename node_t > 193 container_t< ptr<node_t> > call_accept( const container_t< ptr<node_t> > & container ); 201 template<typename node_t, typename parent_t, typename child_t> 202 void maybe_accept(const node_t * &, child_t parent_t::* child); 194 203 195 204 private: … … 210 219 211 220 template<typename pass_t> 212 void accept All( std::list< ptr<Decl> >, Pass<pass_t>& visitor );221 void accept_all( std::list< ast::ptr<ast::Decl> > &, ast::Pass<pass_t> & visitor ); 213 222 214 223 //------------------------------------------------------------------------------------------------- … … 216 225 //------------------------------------------------------------------------------------------------- 217 226 218 template<typename T>219 using std_list = std::list<T>;220 221 227 /// Keep track of the polymorphic const TypeSubstitution * env for the current expression 222 228 struct WithConstTypeSubstitution { … … 226 232 /// Used if visitor requires added statements before or after the current node. 227 233 /// The Pass template handles what *before* and *after* means automatically 228 template< template<class > class container_t = std_list >234 template< template<class...> class container_t = std::list > 229 235 struct WithStmtsToAdd { 230 236 container_t< ptr<Stmt> > stmtsToAddBefore; … … 234 240 /// Used if visitor requires added declarations before or after the current node. 235 241 /// The Pass template handles what *before* and *after* means automatically 236 template< template<class > class container_t = std_list >242 template< template<class...> class container_t = std::list > 237 243 struct WithDeclsToAdd { 238 244 container_t< ptr<Decl> > declsToAddBefore; … … 286 292 }; 287 293 } 294 295 #include "Common/Stats.h" 296 297 extern struct PassVisitorStats { 298 size_t depth = 0; 299 Stats::Counters::MaxCounter<double> * max = nullptr; 300 Stats::Counters::AverageCounter<double> * avg = nullptr; 301 } pass_visitor_stats; 302 303 #include "AST/Pass.impl.hpp"
Note:
See TracChangeset
for help on using the changeset viewer.