22 #include "utils/logger.hpp"
47 const std::shared_ptr<ast::Ast>&)
const;
60 const std::string simulator =
"coreneuron";
72 : simulator(simulator) {}
81 bool find_unhandled_ast_nodes(
Ast&
node)
const;
91 std::string return_error_if_solve_method_is_unhandled(
93 const std::shared_ptr<ast::Ast>& ast_node)
const;
103 template <
typename T>
105 const std::shared_ptr<ast::Ast>& ast_node)
const {
106 auto real_type_block = std::dynamic_pointer_cast<T>(ast_node);
107 auto token = real_type_block->get_token();
109 return fmt::format(
"\"{}\" {}construct found at [{}] is not handled\n",
110 ast_node->get_node_name(),
111 real_type_block->get_nmodl_name(),
112 token ? token->position() :
"unknown location");
113 }
catch (
const std::logic_error&) {
114 return fmt::format(
"{}construct found at [{}] is not handled\n",
115 real_type_block->get_nmodl_name(),
116 token ? token->position() :
"unknown location");
128 template <
typename T>
130 const std::shared_ptr<ast::Ast>& ast_node)
const {
131 auto real_type_block = std::dynamic_pointer_cast<T>(ast_node);
132 return fmt::format(
"{}construct found at [{}] is not handled\n",
133 real_type_block->get_nmodl_name(),
134 real_type_block->get_token()->position());
139 const std::shared_ptr<ast::Ast>& ast_node)
const;
150 const std::shared_ptr<ast::Ast>& ast_node)
const;
153 const std::shared_ptr<ast::Ast>& ast_node)
const;
164 std::string return_error_if_no_bbcore_read_write(
166 const std::shared_ptr<ast::Ast>& ast_node)
const;
Auto generated AST classes declaration.
Concrete visitor for all AST classes.
Visitor for printing compatibility issues of the mod file
CodegenCompatibilityVisitor(const std::string &simulator="coreneuron")
Default CodegenCompatibilityVisitor constructor.
static const std::map< ast::AstNodeType, FunctionPointer > unhandled_ast_types_func
associated container to find the function needed to be called in for every ast::AstNodeType that is u...
std::string return_error_without_name(ast::Ast &, const std::shared_ptr< ast::Ast > &ast_node) const
Takes as parameter an std::shared_ptr<ast::Ast> node and returns a relative error with the type and t...
std::string return_error_with_name(ast::Ast &, const std::shared_ptr< ast::Ast > &ast_node) const
Takes as parameter an std::shared_ptr<ast::Ast> node and returns a relative error with the name,...
Concrete visitor for all AST classes.
static constexpr char DERIVIMPLICIT_METHOD[]
derivimplicit method in nmodl
static constexpr char CNEXP_METHOD[]
cnexp method in nmodl
static constexpr char EULER_METHOD[]
euler method in nmodl
static constexpr char SPARSE_METHOD[]
sparse method in nmodl
static constexpr char AFTER_CVODE_METHOD[]
cvode method in nmodl
encapsulates code generation backend implementations
static Node * node(Object *)
Base class for all Abstract Syntax Tree node types.
Implement classes for representing symbol table at block and file scope.