33 template <
typename DefaultVisitor>
35 static const bool is_const_visitor = std::is_same<ConstVisitor, DefaultVisitor>::value;
44 typename std::conditional<is_const_visitor, std::add_const<T>,
identity<T>>::type;
46 using nodes_t = std::vector<std::shared_ptr<ast_t>>;
50 std::vector<ast::AstNodeType>
types;
53 std::vector<std::shared_ptr<ast_t>>
nodes;
81 void visit_node(
typename visit_arg_trait<ast::Node>::type& node)
override;
82 void visit_statement(
typename visit_arg_trait<ast::Statement>::type& node)
override;
83 void visit_expression(
typename visit_arg_trait<ast::Expression>::type& node)
override;
84 void visit_block(
typename visit_arg_trait<ast::Block>::type& node)
override;
85 void visit_identifier(
typename visit_arg_trait<ast::Identifier>::type& node)
override;
86 void visit_number(
typename visit_arg_trait<ast::Number>::type& node)
override;
87 void visit_string(
typename visit_arg_trait<ast::String>::type& node)
override;
88 void visit_integer(
typename visit_arg_trait<ast::Integer>::type& node)
override;
89 void visit_float(
typename visit_arg_trait<ast::Float>::type& node)
override;
90 void visit_double(
typename visit_arg_trait<ast::Double>::type& node)
override;
91 void visit_boolean(
typename visit_arg_trait<ast::Boolean>::type& node)
override;
92 void visit_name(
typename visit_arg_trait<ast::Name>::type& node)
override;
93 void visit_prime_name(
typename visit_arg_trait<ast::PrimeName>::type& node)
override;
94 void visit_indexed_name(
typename visit_arg_trait<ast::IndexedName>::type& node)
override;
95 void visit_var_name(
typename visit_arg_trait<ast::VarName>::type& node)
override;
96 void visit_argument(
typename visit_arg_trait<ast::Argument>::type& node)
override;
98 void visit_read_ion_var(
typename visit_arg_trait<ast::ReadIonVar>::type& node)
override;
102 void visit_range_var(
typename visit_arg_trait<ast::RangeVar>::type& node)
override;
103 void visit_global_var(
typename visit_arg_trait<ast::GlobalVar>::type& node)
override;
104 void visit_pointer_var(
typename visit_arg_trait<ast::PointerVar>::type& node)
override;
105 void visit_random_var(
typename visit_arg_trait<ast::RandomVar>::type& node)
override;
107 void visit_extern_var(
typename visit_arg_trait<ast::ExternVar>::type& node)
override;
108 void visit_param_block(
typename visit_arg_trait<ast::ParamBlock>::type& node)
override;
111 void visit_state_block(
typename visit_arg_trait<ast::StateBlock>::type& node)
override;
112 void visit_initial_block(
typename visit_arg_trait<ast::InitialBlock>::type& node)
override;
117 void visit_linear_block(
typename visit_arg_trait<ast::LinearBlock>::type& node)
override;
124 void visit_solve_block(
typename visit_arg_trait<ast::SolveBlock>::type& node)
override;
126 void visit_before_block(
typename visit_arg_trait<ast::BeforeBlock>::type& node)
override;
127 void visit_after_block(
typename visit_arg_trait<ast::AfterBlock>::type& node)
override;
128 void visit_ba_block(
typename visit_arg_trait<ast::BABlock>::type& node)
override;
129 void visit_for_netcon(
typename visit_arg_trait<ast::ForNetcon>::type& node)
override;
130 void visit_kinetic_block(
typename visit_arg_trait<ast::KineticBlock>::type& node)
override;
131 void visit_unit_block(
typename visit_arg_trait<ast::UnitBlock>::type& node)
override;
133 void visit_neuron_block(
typename visit_arg_trait<ast::NeuronBlock>::type& node)
override;
134 void visit_unit(
typename visit_arg_trait<ast::Unit>::type& node)
override;
135 void visit_double_unit(
typename visit_arg_trait<ast::DoubleUnit>::type& node)
override;
136 void visit_local_var(
typename visit_arg_trait<ast::LocalVar>::type& node)
override;
137 void visit_limits(
typename visit_arg_trait<ast::Limits>::type& node)
override;
138 void visit_number_range(
typename visit_arg_trait<ast::NumberRange>::type& node)
override;
139 void visit_constant_var(
typename visit_arg_trait<ast::ConstantVar>::type& node)
override;
148 void visit_lin_equation(
typename visit_arg_trait<ast::LinEquation>::type& node)
override;
149 void visit_function_call(
typename visit_arg_trait<ast::FunctionCall>::type& node)
override;
150 void visit_watch(
typename visit_arg_trait<ast::Watch>::type& node)
override;
152 void visit_unit_def(
typename visit_arg_trait<ast::UnitDef>::type& node)
override;
153 void visit_factor_def(
typename visit_arg_trait<ast::FactorDef>::type& node)
override;
154 void visit_valence(
typename visit_arg_trait<ast::Valence>::type& node)
override;
155 void visit_unit_state(
typename visit_arg_trait<ast::UnitState>::type& node)
override;
157 void visit_model(
typename visit_arg_trait<ast::Model>::type& node)
override;
158 void visit_define(
typename visit_arg_trait<ast::Define>::type& node)
override;
159 void visit_include(
typename visit_arg_trait<ast::Include>::type& node)
override;
160 void visit_param_assign(
typename visit_arg_trait<ast::ParamAssign>::type& node)
override;
167 void visit_if_statement(
typename visit_arg_trait<ast::IfStatement>::type& node)
override;
171 void visit_mutex_lock(
typename visit_arg_trait<ast::MutexLock>::type& node)
override;
172 void visit_mutex_unlock(
typename visit_arg_trait<ast::MutexUnlock>::type& node)
override;
173 void visit_conserve(
typename visit_arg_trait<ast::Conserve>::type& node)
override;
174 void visit_compartment(
typename visit_arg_trait<ast::Compartment>::type& node)
override;
175 void visit_lon_diffuse(
typename visit_arg_trait<ast::LonDiffuse>::type& node)
override;
177 void visit_lag_statement(
typename visit_arg_trait<ast::LagStatement>::type& node)
override;
180 void visit_suffix(
typename visit_arg_trait<ast::Suffix>::type& node)
override;
181 void visit_useion(
typename visit_arg_trait<ast::Useion>::type& node)
override;
182 void visit_nonspecific(
typename visit_arg_trait<ast::Nonspecific>::type& node)
override;
184 void visit_range(
typename visit_arg_trait<ast::Range>::type& node)
override;
185 void visit_global(
typename visit_arg_trait<ast::Global>::type& node)
override;
187 void visit_pointer(
typename visit_arg_trait<ast::Pointer>::type& node)
override;
189 void visit_external(
typename visit_arg_trait<ast::External>::type& node)
override;
190 void visit_thread_safe(
typename visit_arg_trait<ast::ThreadSafe>::type& node)
override;
191 void visit_verbatim(
typename visit_arg_trait<ast::Verbatim>::type& node)
override;
192 void visit_line_comment(
typename visit_arg_trait<ast::LineComment>::type& node)
override;
193 void visit_block_comment(
typename visit_arg_trait<ast::BlockComment>::type& node)
override;
195 void visit_program(
typename visit_arg_trait<ast::Program>::type& node)
override;
199 void visit_cvode_block(
typename visit_arg_trait<ast::CvodeBlock>::type& node)
override;
204 void visit_update_dt(
typename visit_arg_trait<ast::UpdateDt>::type& node)
override;