25 statements.reserve(nodes.size());
26 for (
auto&
node: nodes) {
27 statements.push_back(std::dynamic_pointer_cast<ast::Statement>(
node));
30 return std::make_shared<ast::StatementBlock>(
std::move(statements));
35 return std::make_shared<ast::LongitudinalDiffusionBlock>(
36 std::make_shared<ast::Name>(std::make_shared<ast::String>(
"ld_" +
node.
get_node_name())),
44 for (
const auto& ast_node: kinetic_blocks) {
45 auto kinetic_block = std::dynamic_pointer_cast<ast::KineticBlock>(ast_node);
THIS FILE IS GENERATED AT BUILD TIME AND SHALL NOT BE EDITED.
Represents top level AST node for whole NMODL input.
void visit_program(ast::Program &node) override
visit node of type ast::Program
virtual std::string get_node_name() const
Return name of of the node.
AstNodeType
Enum type for every AST node type.
@ KINETIC_BLOCK
type of ast::KineticBlock
@ LON_DIFFUSE
type of ast::LonDiffuse
@ COMPARTMENT
type of ast::Compartment
std::vector< std::shared_ptr< Statement > > StatementVector
Auto generated AST classes declaration.
Auto generated AST classes declaration.
void move(Item *q1, Item *q2, Item *q3)
Auto generated AST classes declaration.
static std::shared_ptr< ast::StatementBlock > make_statement_block(ast::KineticBlock &kinetic_block, nmodl::ast::AstNodeType node_type)
static std::shared_ptr< ast::LongitudinalDiffusionBlock > create_block(ast::KineticBlock &node)
encapsulates code generation backend implementations
std::vector< std::shared_ptr< const ast::Ast > > collect_nodes(const ast::Ast &node, const std::vector< ast::AstNodeType > &types)
traverse node recursively and collect nodes of given types
static Node * node(Object *)
Auto generated AST classes declaration.
Auto generated AST classes declaration.
Auto generated AST classes declaration.
Auto generated AST classes declaration.
Utility functions for visitors implementation.