User Guide
nmodl::visitor::SymtabVisitor Class Reference

Concrete visitor for constructing symbol table from AST. More...

Detailed Description

Concrete visitor for constructing symbol table from AST.

Definition at line 37 of file symtab_visitor.hpp.

#include <symtab_visitor.hpp>

Inheritance diagram for nmodl::visitor::SymtabVisitor:
nmodl::visitor::AstVisitor nmodl::visitor::Visitor

Public Member Functions

 SymtabVisitor (bool update=false)
 
 SymtabVisitor (symtab::ModelSymbolTable *_modsymtab, bool update=false)
 
 SymtabVisitor (std::ostream &os, bool update=false)
 
 SymtabVisitor (const std::string &filename, bool update=false)
 
void add_model_symbol_with_property (ast::Node *node, symtab::syminfo::NmodlType property)
 
void setup_symbol (ast::Node *node, symtab::syminfo::NmodlType property)
 helper function to setup/insert symbol into symbol table for the ast nodes which are of variable types More...
 
void setup_symbol_table (ast::Ast *node, const std::string &name, bool is_global)
 
void setup_symbol_table_for_program_block (ast::Program *node)
 Symtab visitor could be called multiple times, after optimization passes, in which case we have to throw awayold symbol tables and setup new ones. More...
 
void setup_symbol_table_for_global_block (ast::Node *node)
 
void setup_symbol_table_for_scoped_block (ast::Node *node, const std::string &name)
 
void visit_prime_name (ast::PrimeName &node) override
 visit node of type ast::PrimeName More...
 
void visit_argument (ast::Argument &node) override
 visit node of type ast::Argument More...
 
void visit_read_ion_var (ast::ReadIonVar &node) override
 visit node of type ast::ReadIonVar More...
 
void visit_write_ion_var (ast::WriteIonVar &node) override
 visit node of type ast::WriteIonVar More...
 
void visit_nonspecific_cur_var (ast::NonspecificCurVar &node) override
 visit node of type ast::NonspecificCurVar More...
 
void visit_electrode_cur_var (ast::ElectrodeCurVar &node) override
 visit node of type ast::ElectrodeCurVar More...
 
void visit_range_var (ast::RangeVar &node) override
 visit node of type ast::RangeVar More...
 
void visit_global_var (ast::GlobalVar &node) override
 visit node of type ast::GlobalVar More...
 
void visit_pointer_var (ast::PointerVar &node) override
 visit node of type ast::PointerVar More...
 
void visit_random_var (ast::RandomVar &node) override
 visit node of type ast::RandomVar More...
 
void visit_bbcore_pointer_var (ast::BbcorePointerVar &node) override
 visit node of type ast::BbcorePointerVar More...
 
void visit_extern_var (ast::ExternVar &node) override
 visit node of type ast::ExternVar More...
 
void visit_param_block (ast::ParamBlock &node) override
 visit node of type ast::ParamBlock More...
 
void visit_independent_block (ast::IndependentBlock &node) override
 visit node of type ast::IndependentBlock More...
 
void visit_assigned_block (ast::AssignedBlock &node) override
 visit node of type ast::AssignedBlock More...
 
void visit_state_block (ast::StateBlock &node) override
 visit node of type ast::StateBlock More...
 
void visit_initial_block (ast::InitialBlock &node) override
 visit node of type ast::InitialBlock More...
 
void visit_constructor_block (ast::ConstructorBlock &node) override
 visit node of type ast::ConstructorBlock More...
 
void visit_destructor_block (ast::DestructorBlock &node) override
 visit node of type ast::DestructorBlock More...
 
void visit_statement_block (ast::StatementBlock &node) override
 visit node of type ast::StatementBlock More...
 
void visit_derivative_block (ast::DerivativeBlock &node) override
 visit node of type ast::DerivativeBlock More...
 
void visit_linear_block (ast::LinearBlock &node) override
 visit node of type ast::LinearBlock More...
 
void visit_non_linear_block (ast::NonLinearBlock &node) override
 visit node of type ast::NonLinearBlock More...
 
void visit_discrete_block (ast::DiscreteBlock &node) override
 visit node of type ast::DiscreteBlock More...
 
void visit_function_table_block (ast::FunctionTableBlock &node) override
 visit node of type ast::FunctionTableBlock More...
 
void visit_function_block (ast::FunctionBlock &node) override
 visit node of type ast::FunctionBlock More...
 
void visit_procedure_block (ast::ProcedureBlock &node) override
 visit node of type ast::ProcedureBlock More...
 
void visit_net_receive_block (ast::NetReceiveBlock &node) override
 visit node of type ast::NetReceiveBlock More...
 
void visit_solve_block (ast::SolveBlock &node) override
 visit node of type ast::SolveBlock More...
 
void visit_breakpoint_block (ast::BreakpointBlock &node) override
 visit node of type ast::BreakpointBlock More...
 
void visit_before_block (ast::BeforeBlock &node) override
 visit node of type ast::BeforeBlock More...
 
void visit_after_block (ast::AfterBlock &node) override
 visit node of type ast::AfterBlock More...
 
void visit_ba_block (ast::BABlock &node) override
 visit node of type ast::BABlock More...
 
void visit_for_netcon (ast::ForNetcon &node) override
 visit node of type ast::ForNetcon More...
 
void visit_kinetic_block (ast::KineticBlock &node) override
 visit node of type ast::KineticBlock More...
 
void visit_unit_block (ast::UnitBlock &node) override
 visit node of type ast::UnitBlock More...
 
void visit_constant_block (ast::ConstantBlock &node) override
 visit node of type ast::ConstantBlock More...
 
void visit_neuron_block (ast::NeuronBlock &node) override
 visit node of type ast::NeuronBlock More...
 
void visit_local_var (ast::LocalVar &node) override
 visit node of type ast::LocalVar More...
 
void visit_constant_var (ast::ConstantVar &node) override
 visit node of type ast::ConstantVar More...
 
void visit_unit_def (ast::UnitDef &node) override
 visit node of type ast::UnitDef More...
 
void visit_factor_def (ast::FactorDef &node) override
 visit node of type ast::FactorDef More...
 
void visit_define (ast::Define &node) override
 visit node of type ast::Define More...
 
void visit_param_assign (ast::ParamAssign &node) override
 visit node of type ast::ParamAssign More...
 
void visit_assigned_definition (ast::AssignedDefinition &node) override
 visit node of type ast::AssignedDefinition More...
 
void visit_table_statement (ast::TableStatement &node) override
 Visit table statement and update symbol in symbol table. More...
 
void visit_useion (ast::Useion &node) override
 visit node of type ast::Useion More...
 
void visit_program (ast::Program &node) override
 visit node of type ast::Program More...
 
void visit_nrn_state_block (ast::NrnStateBlock &node) override
 visit node of type ast::NrnStateBlock More...
 
void visit_eigen_newton_solver_block (ast::EigenNewtonSolverBlock &node) override
 visit node of type ast::EigenNewtonSolverBlock More...
 
void visit_eigen_linear_solver_block (ast::EigenLinearSolverBlock &node) override
 visit node of type ast::EigenLinearSolverBlock More...
 
- Public Member Functions inherited from nmodl::visitor::AstVisitor
void visit_node (ast::Node &node) override
 visit node of type ast::Node More...
 
void visit_statement (ast::Statement &node) override
 visit node of type ast::Statement More...
 
void visit_expression (ast::Expression &node) override
 visit node of type ast::Expression More...
 
void visit_block (ast::Block &node) override
 visit node of type ast::Block More...
 
void visit_identifier (ast::Identifier &node) override
 visit node of type ast::Identifier More...
 
void visit_number (ast::Number &node) override
 visit node of type ast::Number More...
 
void visit_string (ast::String &node) override
 visit node of type ast::String More...
 
void visit_integer (ast::Integer &node) override
 visit node of type ast::Integer More...
 
void visit_float (ast::Float &node) override
 visit node of type ast::Float More...
 
void visit_double (ast::Double &node) override
 visit node of type ast::Double More...
 
void visit_boolean (ast::Boolean &node) override
 visit node of type ast::Boolean More...
 
void visit_name (ast::Name &node) override
 visit node of type ast::Name More...
 
void visit_indexed_name (ast::IndexedName &node) override
 visit node of type ast::IndexedName More...
 
void visit_var_name (ast::VarName &node) override
 visit node of type ast::VarName More...
 
void visit_react_var_name (ast::ReactVarName &node) override
 visit node of type ast::ReactVarName More...
 
void visit_unit (ast::Unit &node) override
 visit node of type ast::Unit More...
 
void visit_double_unit (ast::DoubleUnit &node) override
 visit node of type ast::DoubleUnit More...
 
void visit_limits (ast::Limits &node) override
 visit node of type ast::Limits More...
 
void visit_number_range (ast::NumberRange &node) override
 visit node of type ast::NumberRange More...
 
void visit_binary_operator (ast::BinaryOperator &node) override
 visit node of type ast::BinaryOperator More...
 
void visit_unary_operator (ast::UnaryOperator &node) override
 visit node of type ast::UnaryOperator More...
 
void visit_reaction_operator (ast::ReactionOperator &node) override
 visit node of type ast::ReactionOperator More...
 
void visit_paren_expression (ast::ParenExpression &node) override
 visit node of type ast::ParenExpression More...
 
void visit_binary_expression (ast::BinaryExpression &node) override
 visit node of type ast::BinaryExpression More...
 
void visit_diff_eq_expression (ast::DiffEqExpression &node) override
 visit node of type ast::DiffEqExpression More...
 
void visit_unary_expression (ast::UnaryExpression &node) override
 visit node of type ast::UnaryExpression More...
 
void visit_non_lin_equation (ast::NonLinEquation &node) override
 visit node of type ast::NonLinEquation More...
 
void visit_lin_equation (ast::LinEquation &node) override
 visit node of type ast::LinEquation More...
 
void visit_function_call (ast::FunctionCall &node) override
 visit node of type ast::FunctionCall More...
 
void visit_watch (ast::Watch &node) override
 visit node of type ast::Watch More...
 
void visit_ba_block_type (ast::BABlockType &node) override
 visit node of type ast::BABlockType More...
 
void visit_valence (ast::Valence &node) override
 visit node of type ast::Valence More...
 
void visit_unit_state (ast::UnitState &node) override
 visit node of type ast::UnitState More...
 
void visit_local_list_statement (ast::LocalListStatement &node) override
 visit node of type ast::LocalListStatement More...
 
void visit_model (ast::Model &node) override
 visit node of type ast::Model More...
 
void visit_include (ast::Include &node) override
 visit node of type ast::Include More...
 
void visit_conductance_hint (ast::ConductanceHint &node) override
 visit node of type ast::ConductanceHint More...
 
void visit_expression_statement (ast::ExpressionStatement &node) override
 visit node of type ast::ExpressionStatement More...
 
void visit_protect_statement (ast::ProtectStatement &node) override
 visit node of type ast::ProtectStatement More...
 
void visit_from_statement (ast::FromStatement &node) override
 visit node of type ast::FromStatement More...
 
void visit_while_statement (ast::WhileStatement &node) override
 visit node of type ast::WhileStatement More...
 
void visit_if_statement (ast::IfStatement &node) override
 visit node of type ast::IfStatement More...
 
void visit_else_if_statement (ast::ElseIfStatement &node) override
 visit node of type ast::ElseIfStatement More...
 
void visit_else_statement (ast::ElseStatement &node) override
 visit node of type ast::ElseStatement More...
 
void visit_watch_statement (ast::WatchStatement &node) override
 visit node of type ast::WatchStatement More...
 
void visit_mutex_lock (ast::MutexLock &node) override
 visit node of type ast::MutexLock More...
 
void visit_mutex_unlock (ast::MutexUnlock &node) override
 visit node of type ast::MutexUnlock More...
 
void visit_conserve (ast::Conserve &node) override
 visit node of type ast::Conserve More...
 
void visit_compartment (ast::Compartment &node) override
 visit node of type ast::Compartment More...
 
void visit_lon_difuse (ast::LonDifuse &node) override
 visit node of type ast::LonDifuse More...
 
void visit_reaction_statement (ast::ReactionStatement &node) override
 visit node of type ast::ReactionStatement More...
 
void visit_lag_statement (ast::LagStatement &node) override
 visit node of type ast::LagStatement More...
 
void visit_constant_statement (ast::ConstantStatement &node) override
 visit node of type ast::ConstantStatement More...
 
void visit_suffix (ast::Suffix &node) override
 visit node of type ast::Suffix More...
 
void visit_nonspecific (ast::Nonspecific &node) override
 visit node of type ast::Nonspecific More...
 
void visit_electrode_current (ast::ElectrodeCurrent &node) override
 visit node of type ast::ElectrodeCurrent More...
 
void visit_range (ast::Range &node) override
 visit node of type ast::Range More...
 
void visit_global (ast::Global &node) override
 visit node of type ast::Global More...
 
void visit_random_var_list (ast::RandomVarList &node) override
 visit node of type ast::RandomVarList More...
 
void visit_pointer (ast::Pointer &node) override
 visit node of type ast::Pointer More...
 
void visit_bbcore_pointer (ast::BbcorePointer &node) override
 visit node of type ast::BbcorePointer More...
 
void visit_external (ast::External &node) override
 visit node of type ast::External More...
 
void visit_thread_safe (ast::ThreadSafe &node) override
 visit node of type ast::ThreadSafe More...
 
void visit_verbatim (ast::Verbatim &node) override
 visit node of type ast::Verbatim More...
 
void visit_line_comment (ast::LineComment &node) override
 visit node of type ast::LineComment More...
 
void visit_block_comment (ast::BlockComment &node) override
 visit node of type ast::BlockComment More...
 
void visit_ontology_statement (ast::OntologyStatement &node) override
 visit node of type ast::OntologyStatement More...
 
void visit_wrapped_expression (ast::WrappedExpression &node) override
 visit node of type ast::WrappedExpression More...
 
void visit_derivimplicit_callback (ast::DerivimplicitCallback &node) override
 visit node of type ast::DerivimplicitCallback More...
 
void visit_solution_expression (ast::SolutionExpression &node) override
 visit node of type ast::SolutionExpression More...
 
void visit_update_dt (ast::UpdateDt &node) override
 visit node of type ast::UpdateDt More...
 
- Public Member Functions inherited from nmodl::visitor::Visitor
virtual ~Visitor ()=default
 

Private Attributes

symtab::ModelSymbolTablemodsymtab = nullptr
 
std::unique_ptr< printer::JSONPrinterprinter
 
std::set< std::string > block_to_solve
 
bool update = false
 
bool under_state_block = false
 

Constructor & Destructor Documentation

◆ SymtabVisitor() [1/4]

nmodl::visitor::SymtabVisitor::SymtabVisitor ( bool  update = false)
inlineexplicit

Definition at line 47 of file symtab_visitor.hpp.

◆ SymtabVisitor() [2/4]

nmodl::visitor::SymtabVisitor::SymtabVisitor ( symtab::ModelSymbolTable _modsymtab,
bool  update = false 
)
inline

Definition at line 51 of file symtab_visitor.hpp.

◆ SymtabVisitor() [3/4]

nmodl::visitor::SymtabVisitor::SymtabVisitor ( std::ostream &  os,
bool  update = false 
)
inline

Definition at line 55 of file symtab_visitor.hpp.

◆ SymtabVisitor() [4/4]

nmodl::visitor::SymtabVisitor::SymtabVisitor ( const std::string &  filename,
bool  update = false 
)
inline

Definition at line 59 of file symtab_visitor.hpp.

Member Function Documentation

◆ add_model_symbol_with_property()

void nmodl::visitor::SymtabVisitor::add_model_symbol_with_property ( ast::Node node,
symtab::syminfo::NmodlType  property 
)

Definition at line 150 of file symtab_visitor_helper.hpp.

◆ setup_symbol()

void nmodl::visitor::SymtabVisitor::setup_symbol ( ast::Node node,
symtab::syminfo::NmodlType  property 
)

helper function to setup/insert symbol into symbol table for the ast nodes which are of variable types

if prime variable is already exist in symbol table then just update the order

range and non_spec_cur can appear in any order in neuron block. for both properties, we have to check if symbol is already exist. if so we have to return to avoid duplicate definition error.

insert might return different symbol if already exist in the same scope

visit children, most likely variables are already leaf nodes, not necessary to visit

Definition at line 53 of file symtab_visitor_helper.hpp.

◆ setup_symbol_table()

void nmodl::visitor::SymtabVisitor::setup_symbol_table ( ast::Ast node,
const std::string &  name,
bool  is_global 
)

entering into new nmodl block

there is only one solve statement allowed in mod file

not required at the moment but every node has pointer to associated symbol table

when visiting highest level node i.e. Program, we insert all global variables to the global symbol table

look for all children blocks recursively

existing nmodl block

Definition at line 185 of file symtab_visitor_helper.hpp.

◆ setup_symbol_table_for_global_block()

void nmodl::visitor::SymtabVisitor::setup_symbol_table_for_global_block ( ast::Node node)

Definition at line 232 of file symtab_visitor_helper.hpp.

◆ setup_symbol_table_for_program_block()

void nmodl::visitor::SymtabVisitor::setup_symbol_table_for_program_block ( ast::Program node)

Symtab visitor could be called multiple times, after optimization passes, in which case we have to throw awayold symbol tables and setup new ones.

Definition at line 225 of file symtab_visitor_helper.hpp.

◆ setup_symbol_table_for_scoped_block()

void nmodl::visitor::SymtabVisitor::setup_symbol_table_for_scoped_block ( ast::Node node,
const std::string &  name 
)

Definition at line 237 of file symtab_visitor_helper.hpp.

◆ visit_after_block()

void nmodl::visitor::SymtabVisitor::visit_after_block ( ast::AfterBlock node)
overridevirtual

visit node of type ast::AfterBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 154 of file symtab_visitor.cpp.

◆ visit_argument()

void nmodl::visitor::SymtabVisitor::visit_argument ( ast::Argument node)
overridevirtual

visit node of type ast::Argument

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 27 of file symtab_visitor.cpp.

◆ visit_assigned_block()

void nmodl::visitor::SymtabVisitor::visit_assigned_block ( ast::AssignedBlock node)
overridevirtual

visit node of type ast::AssignedBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 79 of file symtab_visitor.cpp.

◆ visit_assigned_definition()

void nmodl::visitor::SymtabVisitor::visit_assigned_definition ( ast::AssignedDefinition node)
overridevirtual

visit node of type ast::AssignedDefinition

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 207 of file symtab_visitor.cpp.

◆ visit_ba_block()

void nmodl::visitor::SymtabVisitor::visit_ba_block ( ast::BABlock node)
overridevirtual

visit node of type ast::BABlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 158 of file symtab_visitor.cpp.

◆ visit_bbcore_pointer_var()

void nmodl::visitor::SymtabVisitor::visit_bbcore_pointer_var ( ast::BbcorePointerVar node)
overridevirtual

visit node of type ast::BbcorePointerVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 63 of file symtab_visitor.cpp.

◆ visit_before_block()

void nmodl::visitor::SymtabVisitor::visit_before_block ( ast::BeforeBlock node)
overridevirtual

visit node of type ast::BeforeBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 150 of file symtab_visitor.cpp.

◆ visit_breakpoint_block()

void nmodl::visitor::SymtabVisitor::visit_breakpoint_block ( ast::BreakpointBlock node)
overridevirtual

visit node of type ast::BreakpointBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 146 of file symtab_visitor.cpp.

◆ visit_constant_block()

void nmodl::visitor::SymtabVisitor::visit_constant_block ( ast::ConstantBlock node)
overridevirtual

visit node of type ast::ConstantBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 175 of file symtab_visitor.cpp.

◆ visit_constant_var()

void nmodl::visitor::SymtabVisitor::visit_constant_var ( ast::ConstantVar node)
overridevirtual

visit node of type ast::ConstantVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 187 of file symtab_visitor.cpp.

◆ visit_constructor_block()

void nmodl::visitor::SymtabVisitor::visit_constructor_block ( ast::ConstructorBlock node)
overridevirtual

visit node of type ast::ConstructorBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 91 of file symtab_visitor.cpp.

◆ visit_define()

void nmodl::visitor::SymtabVisitor::visit_define ( ast::Define node)
overridevirtual

visit node of type ast::Define

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 199 of file symtab_visitor.cpp.

◆ visit_derivative_block()

void nmodl::visitor::SymtabVisitor::visit_derivative_block ( ast::DerivativeBlock node)
overridevirtual

visit node of type ast::DerivativeBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 103 of file symtab_visitor.cpp.

◆ visit_destructor_block()

void nmodl::visitor::SymtabVisitor::visit_destructor_block ( ast::DestructorBlock node)
overridevirtual

visit node of type ast::DestructorBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 95 of file symtab_visitor.cpp.

◆ visit_discrete_block()

void nmodl::visitor::SymtabVisitor::visit_discrete_block ( ast::DiscreteBlock node)
overridevirtual

visit node of type ast::DiscreteBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 118 of file symtab_visitor.cpp.

◆ visit_eigen_linear_solver_block()

void nmodl::visitor::SymtabVisitor::visit_eigen_linear_solver_block ( ast::EigenLinearSolverBlock node)
overridevirtual

visit node of type ast::EigenLinearSolverBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 227 of file symtab_visitor.cpp.

◆ visit_eigen_newton_solver_block()

void nmodl::visitor::SymtabVisitor::visit_eigen_newton_solver_block ( ast::EigenNewtonSolverBlock node)
overridevirtual

visit node of type ast::EigenNewtonSolverBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 223 of file symtab_visitor.cpp.

◆ visit_electrode_cur_var()

void nmodl::visitor::SymtabVisitor::visit_electrode_cur_var ( ast::ElectrodeCurVar node)
overridevirtual

visit node of type ast::ElectrodeCurVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 43 of file symtab_visitor.cpp.

◆ visit_extern_var()

void nmodl::visitor::SymtabVisitor::visit_extern_var ( ast::ExternVar node)
overridevirtual

visit node of type ast::ExternVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 67 of file symtab_visitor.cpp.

◆ visit_factor_def()

void nmodl::visitor::SymtabVisitor::visit_factor_def ( ast::FactorDef node)
overridevirtual

visit node of type ast::FactorDef

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 195 of file symtab_visitor.cpp.

◆ visit_for_netcon()

void nmodl::visitor::SymtabVisitor::visit_for_netcon ( ast::ForNetcon node)
overridevirtual

visit node of type ast::ForNetcon

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 162 of file symtab_visitor.cpp.

◆ visit_function_block()

void nmodl::visitor::SymtabVisitor::visit_function_block ( ast::FunctionBlock node)
overridevirtual

visit node of type ast::FunctionBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 128 of file symtab_visitor.cpp.

◆ visit_function_table_block()

void nmodl::visitor::SymtabVisitor::visit_function_table_block ( ast::FunctionTableBlock node)
overridevirtual

visit node of type ast::FunctionTableBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 123 of file symtab_visitor.cpp.

◆ visit_global_var()

void nmodl::visitor::SymtabVisitor::visit_global_var ( ast::GlobalVar node)
overridevirtual

visit node of type ast::GlobalVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 51 of file symtab_visitor.cpp.

◆ visit_independent_block()

void nmodl::visitor::SymtabVisitor::visit_independent_block ( ast::IndependentBlock node)
overridevirtual

visit node of type ast::IndependentBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 75 of file symtab_visitor.cpp.

◆ visit_initial_block()

void nmodl::visitor::SymtabVisitor::visit_initial_block ( ast::InitialBlock node)
overridevirtual

visit node of type ast::InitialBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 87 of file symtab_visitor.cpp.

◆ visit_kinetic_block()

void nmodl::visitor::SymtabVisitor::visit_kinetic_block ( ast::KineticBlock node)
overridevirtual

visit node of type ast::KineticBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 166 of file symtab_visitor.cpp.

◆ visit_linear_block()

void nmodl::visitor::SymtabVisitor::visit_linear_block ( ast::LinearBlock node)
overridevirtual

visit node of type ast::LinearBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 108 of file symtab_visitor.cpp.

◆ visit_local_var()

void nmodl::visitor::SymtabVisitor::visit_local_var ( ast::LocalVar node)
overridevirtual

visit node of type ast::LocalVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 183 of file symtab_visitor.cpp.

◆ visit_net_receive_block()

void nmodl::visitor::SymtabVisitor::visit_net_receive_block ( ast::NetReceiveBlock node)
overridevirtual

visit node of type ast::NetReceiveBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 138 of file symtab_visitor.cpp.

◆ visit_neuron_block()

void nmodl::visitor::SymtabVisitor::visit_neuron_block ( ast::NeuronBlock node)
overridevirtual

visit node of type ast::NeuronBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 179 of file symtab_visitor.cpp.

◆ visit_non_linear_block()

void nmodl::visitor::SymtabVisitor::visit_non_linear_block ( ast::NonLinearBlock node)
overridevirtual

visit node of type ast::NonLinearBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 113 of file symtab_visitor.cpp.

◆ visit_nonspecific_cur_var()

void nmodl::visitor::SymtabVisitor::visit_nonspecific_cur_var ( ast::NonspecificCurVar node)
overridevirtual

visit node of type ast::NonspecificCurVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 39 of file symtab_visitor.cpp.

◆ visit_nrn_state_block()

void nmodl::visitor::SymtabVisitor::visit_nrn_state_block ( ast::NrnStateBlock node)
overridevirtual

visit node of type ast::NrnStateBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 219 of file symtab_visitor.cpp.

◆ visit_param_assign()

void nmodl::visitor::SymtabVisitor::visit_param_assign ( ast::ParamAssign node)
overridevirtual

visit node of type ast::ParamAssign

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 203 of file symtab_visitor.cpp.

◆ visit_param_block()

void nmodl::visitor::SymtabVisitor::visit_param_block ( ast::ParamBlock node)
overridevirtual

visit node of type ast::ParamBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 71 of file symtab_visitor.cpp.

◆ visit_pointer_var()

void nmodl::visitor::SymtabVisitor::visit_pointer_var ( ast::PointerVar node)
overridevirtual

visit node of type ast::PointerVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 55 of file symtab_visitor.cpp.

◆ visit_prime_name()

void nmodl::visitor::SymtabVisitor::visit_prime_name ( ast::PrimeName node)
overridevirtual

visit node of type ast::PrimeName

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 23 of file symtab_visitor.cpp.

◆ visit_procedure_block()

void nmodl::visitor::SymtabVisitor::visit_procedure_block ( ast::ProcedureBlock node)
overridevirtual

visit node of type ast::ProcedureBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 133 of file symtab_visitor.cpp.

◆ visit_program()

void nmodl::visitor::SymtabVisitor::visit_program ( ast::Program node)
overridevirtual

visit node of type ast::Program

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 215 of file symtab_visitor.cpp.

◆ visit_random_var()

void nmodl::visitor::SymtabVisitor::visit_random_var ( ast::RandomVar node)
overridevirtual

visit node of type ast::RandomVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 59 of file symtab_visitor.cpp.

◆ visit_range_var()

void nmodl::visitor::SymtabVisitor::visit_range_var ( ast::RangeVar node)
overridevirtual

visit node of type ast::RangeVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 47 of file symtab_visitor.cpp.

◆ visit_read_ion_var()

void nmodl::visitor::SymtabVisitor::visit_read_ion_var ( ast::ReadIonVar node)
overridevirtual

visit node of type ast::ReadIonVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 31 of file symtab_visitor.cpp.

◆ visit_solve_block()

void nmodl::visitor::SymtabVisitor::visit_solve_block ( ast::SolveBlock node)
overridevirtual

visit node of type ast::SolveBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 142 of file symtab_visitor.cpp.

◆ visit_state_block()

void nmodl::visitor::SymtabVisitor::visit_state_block ( ast::StateBlock node)
overridevirtual

visit node of type ast::StateBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 83 of file symtab_visitor.cpp.

◆ visit_statement_block()

void nmodl::visitor::SymtabVisitor::visit_statement_block ( ast::StatementBlock node)
overridevirtual

visit node of type ast::StatementBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 99 of file symtab_visitor.cpp.

◆ visit_table_statement()

void nmodl::visitor::SymtabVisitor::visit_table_statement ( ast::TableStatement node)
overridevirtual

Visit table statement and update symbol in symbol table.

Todo:
we assume table statement follows variable declaration

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 247 of file symtab_visitor_helper.hpp.

◆ visit_unit_block()

void nmodl::visitor::SymtabVisitor::visit_unit_block ( ast::UnitBlock node)
overridevirtual

visit node of type ast::UnitBlock

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 171 of file symtab_visitor.cpp.

◆ visit_unit_def()

void nmodl::visitor::SymtabVisitor::visit_unit_def ( ast::UnitDef node)
overridevirtual

visit node of type ast::UnitDef

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 191 of file symtab_visitor.cpp.

◆ visit_useion()

void nmodl::visitor::SymtabVisitor::visit_useion ( ast::Useion node)
overridevirtual

visit node of type ast::Useion

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 211 of file symtab_visitor.cpp.

◆ visit_write_ion_var()

void nmodl::visitor::SymtabVisitor::visit_write_ion_var ( ast::WriteIonVar node)
overridevirtual

visit node of type ast::WriteIonVar

Reimplemented from nmodl::visitor::AstVisitor.

Definition at line 35 of file symtab_visitor.cpp.

Member Data Documentation

◆ block_to_solve

std::set<std::string> nmodl::visitor::SymtabVisitor::block_to_solve
private

Definition at line 42 of file symtab_visitor.hpp.

◆ modsymtab

symtab::ModelSymbolTable* nmodl::visitor::SymtabVisitor::modsymtab = nullptr
private

Definition at line 39 of file symtab_visitor.hpp.

◆ printer

std::unique_ptr<printer::JSONPrinter> nmodl::visitor::SymtabVisitor::printer
private

Definition at line 41 of file symtab_visitor.hpp.

◆ under_state_block

bool nmodl::visitor::SymtabVisitor::under_state_block = false
private

Definition at line 44 of file symtab_visitor.hpp.

◆ update

bool nmodl::visitor::SymtabVisitor::update = false
private

Definition at line 43 of file symtab_visitor.hpp.


The documentation for this class was generated from the following files: