User Guide
|
Visitor for printing C++ code compatible with legacy api of NEURON More...
Visitor for printing C++ code compatible with legacy api of NEURON
Definition at line 71 of file codegen_neuron_cpp_visitor.hpp.
#include <codegen_neuron_cpp_visitor.hpp>
Protected Member Functions | |
std::string | simulator_name () override |
Name of the simulator the code was generated for. More... | |
virtual std::string | backend_name () const override |
Name of the code generation backend. More... | |
int | position_of_float_var (const std::string &name) const override |
Determine the position in the data array for a given float variable. More... | |
int | position_of_int_var (const std::string &name) const override |
Determine the position in the data array for a given int variable. More... | |
virtual void | print_atomic_reduction_pragma () override |
Print atomic update pragma for reduction statements. More... | |
bool | optimize_ion_variable_copies () const override |
Check if ion variable copies should be avoided. More... | |
void | print_net_send_call (const ast::FunctionCall &node) override |
Print call to net_send . More... | |
void | print_net_move_call (const ast::FunctionCall &node) override |
Print call to net_move. More... | |
void | print_net_event_call (const ast::FunctionCall &node) override |
Print call to net_event. More... | |
void | print_point_process_function_definitions () |
Print POINT_PROCESS related functions Wrap external NEURON functions related to POINT_PROCESS mechanisms. More... | |
void | print_setdata_functions () |
Print NEURON functions related to setting global variables of the mechanism. More... | |
void | print_function_prototypes () override |
Print function and procedures prototype declaration. More... | |
void | print_function_or_procedure (const ast::Block &node, const std::string &name) override |
Print nmodl function or procedure (common code) More... | |
void | print_function_procedure_helper (const ast::Block &node) override |
Common helper function to help printing function or procedure blocks. More... | |
virtual void | print_procedure (const ast::ProcedureBlock &node) override |
Print NMODL procedure in target backend code. More... | |
void | print_function (const ast::FunctionBlock &node) override |
Print NMODL function in target backend code. More... | |
void | print_hoc_py_wrapper_function_body (const ast::Block *function_or_procedure_block, InterpreterWrapper wrapper_type) |
void | print_hoc_py_wrapper_function_definitions () |
std::string | internal_method_arguments () override |
Arguments for functions that are defined and used internally. More... | |
ParamVector | internal_method_parameters () override |
Parameters for internally defined functions. More... | |
const char * | external_method_arguments () noexcept override |
Arguments for external functions called from generated code. More... | |
const char * | external_method_parameters (bool table=false) noexcept override |
Parameters for functions in generated code that are called back from external code. More... | |
std::string | nrn_thread_arguments () const override |
Arguments for "_threadargs_" macro in neuron implementation. More... | |
std::string | nrn_thread_internal_arguments () override |
Arguments for "_threadargs_" macro in neuron implementation. More... | |
std::string | process_verbatim_text (std::string const &text) override |
Process a verbatim block for possible variable renaming. More... | |
std::string | register_mechanism_arguments () const override |
Arguments for register_mech or point_register_mech function. More... | |
std::string | conc_write_statement (const std::string &ion_name, const std::string &concentration, int index) override |
Generate Function call statement for nrn_wrote_conc. More... | |
std::string | hoc_function_name (const std::string &function_or_procedure_name) const |
All functions and procedures need a hoc <func_or_proc_name> to be available to the HOC interpreter. More... | |
std::string | hoc_function_signature (const std::string &function_or_procedure_name) const |
Get the signature of the hoc <func_or_proc_name> function. More... | |
std::string | py_function_name (const std::string &function_or_procedure_name) const |
In non POINT_PROCESS mechanisms all functions and procedures need a py <func_or_proc_name> to be available to the HOC interpreter. More... | |
std::string | py_function_signature (const std::string &function_or_procedure_name) const |
Get the signature of the npy <func_or_proc_name> function. More... | |
void | print_namespace_start () override |
Prints the start of the neuron namespace. More... | |
void | print_namespace_stop () override |
Prints the end of the neuron namespace. More... | |
std::string | float_variable_name (const SymbolType &symbol, bool use_instance) const override |
Determine the name of a float variable given its symbol. More... | |
std::string | int_variable_name (const IndexVariableInfo &symbol, const std::string &name, bool use_instance) const override |
Determine the name of an int variable given its symbol. More... | |
std::string | global_variable_name (const SymbolType &symbol, bool use_instance=true) const override |
Determine the variable name for a global variable given its symbol. More... | |
std::string | get_variable_name (const std::string &name, bool use_instance=true) const override |
Determine variable name in the structure of mechanism properties. More... | |
void | print_backend_info () override |
Print top file header printed in generated code. More... | |
void | print_standard_includes () override |
Print standard C/C++ includes. More... | |
void | print_neuron_includes () |
Print includes from NEURON. More... | |
void | print_sdlists_init (bool print_initializers) override |
void | print_mechanism_global_var_structure (bool print_initializers) override |
Print the structure that wraps all global variables used in the NMODL. More... | |
void | print_global_variables_for_hoc () override |
Print byte arrays that register scalar and vector variables for hoc interface. More... | |
void | print_mechanism_register () override |
Print the mechanism registration function. More... | |
virtual void | print_global_function_common_code (BlockType type, const std::string &function_name="") override |
Print common code for global functions like nrn_init, nrn_cur and nrn_state. More... | |
void | print_nrn_init (bool skip_init_check=true) |
Print the nrn_init function definition. More... | |
void | print_initial_block (const ast::InitialBlock *node) |
Print the initial block. More... | |
void | print_nrn_constructor () override |
Print nrn_constructor function definition. More... | |
void | print_nrn_destructor () override |
Print nrn_destructor function definition. More... | |
void | print_nrn_alloc () override |
Print nrn_alloc function definition. More... | |
void | print_nrn_jacob () |
Print nrn_jacob function definition. More... | |
void | print_nrn_state () override |
Print nrn_state / state update function definition. More... | |
std::string | nrn_current_arguments () |
ParamVector | nrn_current_parameters () |
void | print_nrn_current (const ast::BreakpointBlock &node) override |
Print the nrn_current kernel. More... | |
void | print_nrn_cur_conductance_kernel (const ast::BreakpointBlock &node) override |
Print the nrn_cur kernel with NMODL conductance keyword provisions. More... | |
void | print_nrn_cur_non_conductance_kernel () override |
Print the nrn_cur kernel without NMODL conductance keyword provisions. More... | |
void | print_nrn_cur_kernel (const ast::BreakpointBlock &node) override |
Print main body of nrn_cur function. More... | |
virtual void | print_fast_imem_calculation () override |
Print fast membrane current calculation code. More... | |
void | print_nrn_cur () override |
Print nrn_cur / current update function definition. More... | |
void | print_headers_include () override |
Print all includes. More... | |
void | print_macro_definitions () |
Print all NEURON macros. More... | |
void | print_global_macros () |
Print NEURON global variable macros. More... | |
void | print_mechanism_variables_macros () |
Print mechanism variables' related macros. More... | |
void | print_namespace_begin () override |
Print start of namespaces. More... | |
void | print_namespace_end () override |
Print end of namespaces. More... | |
void | print_data_structures (bool print_initializers) override |
Print all classes. More... | |
void | print_make_instance () const |
Print make_*_instance . More... | |
void | print_make_node_data () const |
Print make_*_node_data . More... | |
void | print_v_unused () const override |
Set v_unused (voltage) for NRN_PRCELLSTATE feature. More... | |
void | print_g_unused () const override |
Set g_unused (conductance) for NRN_PRCELLSTATE feature. More... | |
virtual void | print_compute_functions () override |
Print all compute functions for every backend. More... | |
void | print_codegen_routines () override |
Print entry point to code generation. More... | |
virtual void | visit_watch_statement (const ast::WatchStatement &node) override |
TODO: Edit for NEURON. More... | |
template<typename T > | |
void | print_function_declaration (const T &node, const std::string &name) |
Print prototype declarations of functions or procedures. More... | |
Protected Member Functions inherited from nmodl::codegen::CodegenCppVisitor | |
std::string | nmodl_version () const noexcept |
Return Nmodl language version. More... | |
std::string | instance_struct () const |
Name of structure that wraps range variables. More... | |
std::string | node_data_struct () const |
Name of structure that wraps node variables. More... | |
std::string | global_struct () const |
Name of structure that wraps global variables. More... | |
std::string | global_struct_instance () const |
Name of the (host-only) global instance of global_struct More... | |
const char * | local_var_type () const noexcept |
Data type for the local variables. More... | |
const char * | default_float_data_type () const noexcept |
Default data type for floating point elements. More... | |
const std::string & | float_data_type () const noexcept |
Data type for floating point elements specified on command line. More... | |
const char * | default_int_data_type () const noexcept |
Default data type for integer (offset) elements. More... | |
const char * | operator_for_rhs () const noexcept |
Operator for rhs vector update (matrix update) More... | |
const char * | operator_for_d () const noexcept |
Operator for diagonal vector update (matrix update) More... | |
std::string | get_channel_info_var_name () const noexcept |
Name of channel info variable. More... | |
bool | ion_variable_struct_required () const |
Check if a structure for ion variables is required. More... | |
template<typename T > | |
bool | has_parameter_of_name (const T &node, const std::string &name) |
Check if function or procedure node has parameter with given name. More... | |
bool | net_send_buffer_required () const noexcept |
Check if net_send_buffer is required. More... | |
bool | net_receive_buffering_required () const noexcept |
Check if net receive/send buffering kernels required. More... | |
bool | nrn_state_required () const noexcept |
Check if nrn_state function is required. More... | |
bool | nrn_cur_required () const noexcept |
Check if nrn_cur function is required. More... | |
bool | net_receive_required () const noexcept |
Check if net_receive function is required. More... | |
bool | range_variable_setup_required () const noexcept |
Check if setup_range_variable function is required. More... | |
bool | net_receive_exist () const noexcept |
Check if net_receive node exist. More... | |
bool | breakpoint_exist () const noexcept |
Check if breakpoint node exist. More... | |
bool | defined_method (const std::string &name) const |
Check if given method is defined in this model. More... | |
bool | is_net_send (const std::string &name) const noexcept |
Checks if given function name is net_send . More... | |
bool | is_net_move (const std::string &name) const noexcept |
Checks if given function name is net_move . More... | |
bool | is_net_event (const std::string &name) const noexcept |
Checks if given function name is net_event . More... | |
int | float_variables_size () const |
Number of float variables in the model. More... | |
int | int_variables_size () const |
Number of integer variables in the model. More... | |
std::string | format_double_string (const std::string &value) |
Convert a given double value to its string representation. More... | |
std::string | format_float_string (const std::string &value) |
Convert a given float value to its string representation. More... | |
void | update_index_semantics () |
populate all index semantics needed for registration with coreneuron More... | |
std::vector< SymbolType > | get_float_variables () const |
Determine all float variables required during code generation. More... | |
std::vector< IndexVariableInfo > | get_int_variables () |
Determine all int variables required during code generation. More... | |
std::vector< std::string > | ion_read_statements (BlockType type) const |
For a given output block type, return statements for all read ion variables. More... | |
std::vector< std::string > | ion_read_statements_optimized (BlockType type) const |
For a given output block type, return minimal statements for all read ion variables. More... | |
std::vector< ShadowUseStatement > | ion_write_statements (BlockType type) |
For a given output block type, return statements for writing back ion variables. More... | |
std::string | process_shadow_update_statement (const ShadowUseStatement &statement, BlockType type) |
Process shadow update statement. More... | |
std::string | breakpoint_current (std::string current) const |
Determine the variable name for the "current" used in breakpoint block taking into account intermediate code transformations. More... | |
virtual void | print_global_var_struct_decl () |
Instantiate global var instance. More... | |
void | print_statement_block (const ast::StatementBlock &node, bool open_brace=true, bool close_brace=true) |
Print any statement block in nmodl with option to (not) print braces. More... | |
virtual void | print_function_call (const ast::FunctionCall &node) |
Print call to internal or external function. More... | |
void | rename_function_arguments () |
Rename function/procedure arguments that conflict with default arguments. More... | |
template<typename T > | |
void | print_vector_elements (const std::vector< T > &elements, const std::string &separator, const std::string &prefix="") |
Print the items in a vector as a list. More... | |
std::string | add_escape_quote (const std::string &text) const |
Add quotes to string to be output. More... | |
std::string | method_name (const std::string &name) const |
Constructs the name of a function or procedure. More... | |
SymbolType | make_symbol (const std::string &name) const |
Creates a temporary symbol. More... | |
std::string | update_if_ion_variable_name (const std::string &name) const |
Determine the updated name if the ion variable has been optimized. More... | |
virtual void | print_global_var_struct_assertions () const |
Print static assertions about the global variable struct. More... | |
void | print_prcellstate_macros () const |
Print declaration of macro NRN_PRCELLSTATE for debugging. More... | |
void | print_mechanism_info () |
Print backend code for byte array that has mechanism information (to be registered with NEURON/CoreNEURON) More... | |
void | print_nmodl_constants () |
Print the nmodl constants used in backend code. More... | |
void | visit_binary_expression (const ast::BinaryExpression &node) override |
visit node of type ast::BinaryExpression More... | |
void | visit_binary_operator (const ast::BinaryOperator &node) override |
visit node of type ast::BinaryOperator More... | |
void | visit_boolean (const ast::Boolean &node) override |
visit node of type ast::Boolean More... | |
void | visit_double (const ast::Double &node) override |
visit node of type ast::Double More... | |
void | visit_else_if_statement (const ast::ElseIfStatement &node) override |
visit node of type ast::ElseIfStatement More... | |
void | visit_else_statement (const ast::ElseStatement &node) override |
visit node of type ast::ElseStatement More... | |
void | visit_float (const ast::Float &node) override |
visit node of type ast::Float More... | |
void | visit_from_statement (const ast::FromStatement &node) override |
visit node of type ast::FromStatement More... | |
void | visit_function_call (const ast::FunctionCall &node) override |
visit node of type ast::FunctionCall More... | |
void | visit_if_statement (const ast::IfStatement &node) override |
visit node of type ast::IfStatement More... | |
void | visit_indexed_name (const ast::IndexedName &node) override |
visit node of type ast::IndexedName More... | |
void | visit_integer (const ast::Integer &node) override |
visit node of type ast::Integer More... | |
void | visit_local_list_statement (const ast::LocalListStatement &node) override |
visit node of type ast::LocalListStatement More... | |
void | visit_name (const ast::Name &node) override |
visit node of type ast::Name More... | |
void | visit_paren_expression (const ast::ParenExpression &node) override |
visit node of type ast::ParenExpression More... | |
void | visit_prime_name (const ast::PrimeName &node) override |
visit node of type ast::PrimeName More... | |
void | visit_statement_block (const ast::StatementBlock &node) override |
void | visit_string (const ast::String &node) override |
visit node of type ast::String More... | |
void | visit_unary_operator (const ast::UnaryOperator &node) override |
visit node of type ast::UnaryOperator More... | |
void | visit_unit (const ast::Unit &node) override |
visit node of type ast::Unit More... | |
void | visit_var_name (const ast::VarName &node) override |
void | visit_verbatim (const ast::Verbatim &node) override |
visit node of type ast::Verbatim More... | |
void | visit_while_statement (const ast::WhileStatement &node) override |
visit node of type ast::WhileStatement More... | |
void | visit_update_dt (const ast::UpdateDt &node) override |
visit node of type ast::UpdateDt More... | |
void | visit_protect_statement (const ast::ProtectStatement &node) override |
visit node of type ast::ProtectStatement More... | |
void | visit_mutex_lock (const ast::MutexLock &node) override |
visit node of type ast::MutexLock More... | |
void | visit_mutex_unlock (const ast::MutexUnlock &node) override |
visit node of type ast::MutexUnlock More... | |
void | visit_solution_expression (const ast::SolutionExpression &node) override |
visit node of type ast::SolutionExpression More... | |
std::string | compute_method_name (BlockType type) const |
Additional Inherited Members | |
Protected Types inherited from nmodl::codegen::CodegenCppVisitor | |
using | SymbolType = std::shared_ptr< symtab::Symbol > |
using | ParamVector = std::vector< std::tuple< std::string, std::string, std::string, std::string > > |
A vector of parameters represented by a 4-tuple of strings: More... | |
Static Protected Member Functions inherited from nmodl::codegen::CodegenCppVisitor | |
static bool | need_semicolon (const ast::Statement &node) |
Check if a semicolon is required at the end of given statement. More... | |
static std::string | get_parameter_str (const ParamVector ¶ms) |
Generate the string representing the procedure parameter declaration. More... | |
static bool | statement_to_skip (const ast::Statement &node) |
Check if given statement should be skipped during code generation. More... | |
static std::pair< std::string, std::string > | read_ion_variable_name (const std::string &name) |
Return ion variable name and corresponding ion read variable name. More... | |
static std::pair< std::string, std::string > | write_ion_variable_name (const std::string &name) |
Return ion variable name and corresponding ion write variable name. More... | |
Protected Attributes inherited from nmodl::codegen::CodegenCppVisitor | |
std::unique_ptr< CodePrinter > | printer |
Code printer object for target (C++) More... | |
std::string | mod_filename |
Name of mod file (without .mod suffix) More... | |
std::string | float_type = codegen::naming::DEFAULT_FLOAT_TYPE |
Data type of floating point variables. More... | |
bool | optimize_ionvar_copies = true |
Flag to indicate if visitor should avoid ion variable copies. More... | |
codegen::CodegenInfo | info |
All ast information for code generation. More... | |
symtab::SymbolTable * | program_symtab = nullptr |
Symbol table for the program. More... | |
std::vector< SymbolType > | codegen_float_variables |
All float variables for the model. More... | |
std::vector< IndexVariableInfo > | codegen_int_variables |
All int variables for the model. More... | |
std::vector< SymbolType > | codegen_global_variables |
All global variables for the model. More... | |
bool | enable_variable_name_lookup = true |
Variable name should be converted to instance name (but not for function arguments) More... | |
bool | printing_net_receive = false |
true if currently net_receive block being printed More... | |
bool | printing_net_init = false |
true if currently initial block of net_receive being printed More... | |
bool | printing_top_verbatim_blocks = false |
true if currently printing top level verbatim blocks More... | |
bool | internal_method_call_encountered = false |
true if internal method call was encountered while processing verbatim block More... | |
int | current_watch_statement = 0 |
Index of watch statement being printed. More... | |
|
overrideprotectedvirtual |
Name of the code generation backend.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 43 of file codegen_neuron_cpp_visitor.cpp.
|
inline |
Constructs the C++ code generator visitor.
This constructor instantiates an NMODL C++ code generator and allows writing generated code directly to a file in [output_dir]/[mod_filename].cpp.
AstVisitor
the AST must be visited using e.g. visit_program
in order to generate the C++ code corresponding to the AST.mod_filename | The name of the model for which code should be generated. It is used for constructing an output filename. |
output_dir | The directory where target C++ file should be generated. |
float_type | The float type to use in the generated code. The string will be used as-is in the target code. This defaults to double . |
Definition at line 198 of file codegen_cpp_visitor.hpp.
|
inline |
Constructs the C++ code generator visitor.
This constructor instantiates an NMODL C++ code generator and allows writing generated code into an output stream.
AstVisitor
the AST must be visited using e.g. visit_program
in order to generate the C++ code corresponding to the AST.mod_filename | The name of the model for which code should be generated. It is used for constructing an output filename. |
stream | The output stream onto which to write the generated code |
float_type | The float type to use in the generated code. The string will be used as-is in the target code. This defaults to double . |
Definition at line 226 of file codegen_cpp_visitor.hpp.
|
overrideprotectedvirtual |
Generate Function call statement for nrn_wrote_conc.
ion_name | The name of the ion variable |
concentration | The name of the concentration variable |
index |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 473 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtualnoexcept |
Arguments for external functions called from generated code.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 395 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtualnoexcept |
Parameters for functions in generated code that are called back from external code.
TODO: Edit for NEURON.
Functions registered in NEURON during initialization for callback must adhere to a prescribed calling convention. This method generates the string representing the function parameters for these externally called functions.
table |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 401 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Determine the name of a float
variable given its symbol.
TODO: Edit for NEURON.
This function typically returns the accessor expression in backend code for the given symbol. Since the model variables are stored in data arrays and accessed by offset, this function will return the C++ string representing the array access at the correct offset
symbol | The symbol of a variable for which we want to obtain its name |
use_instance | Should the variable be accessed via instance or data array |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 486 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Determine variable name in the structure of mechanism properties.
name | Variable name that is being printed |
use_instance | Should the variable be accessed via instance or data array |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 547 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Determine the variable name for a global variable given its symbol.
symbol | The symbol of a variable for which we want to obtain its name |
use_instance | Should the variable be accessed via the (host-only) global variable or the instance-specific copy (also available on GPU). |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 537 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
All functions and procedures need a hoc
<func_or_proc_name> to be available to the HOC interpreter.
Definition at line 430 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Get the signature of the hoc
<func_or_proc_name> function.
Definition at line 436 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Determine the name of an int
variable given its symbol.
TODO: Edit for NEURON.
This function typically returns the accessor expression in backend code for the given symbol. Since the model variables are stored in data arrays and accessed by offset, this function will return the C++ string representing the array access at the correct offset
symbol | The symbol of a variable for which we want to obtain its name |
name | The name of the index variable |
use_instance | Should the variable be accessed via instance or data array |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 507 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Arguments for functions that are defined and used internally.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 377 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Parameters for internally defined functions.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 382 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Definition at line 1391 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Definition at line 1399 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Arguments for "_threadargs_" macro in neuron implementation.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 407 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Arguments for "_threadargs_" macro in neuron implementation.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 413 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Check if ion variable copies should be avoided.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 89 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Determine the position in the data array for a given float variable.
name | The name of a float variable |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 53 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Determine the position in the data array for a given int variable.
name | The name of an int variable |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 65 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print atomic update pragma for reduction statements.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 85 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print top file header printed in generated code.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 618 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print entry point to code generation.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1710 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print all compute functions for every backend.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1694 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print all classes.
print_initializers | Whether to include default values. |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1663 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print fast membrane current calculation code.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1541 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print NMODL function in target backend code.
node |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 244 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print nmodl function or procedure (common code)
node | the AST node representing the function or procedure in NMODL |
name | the name of the function or procedure |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 207 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Common helper function to help printing function or procedure blocks.
node | the AST node representing the function or procedure in NMODL |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 228 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print function and procedures prototype declaration.
TODO: Edit for NEURON.
TODO: Add mechanism function and procedures declarations
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 197 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Set g_unused (conductance) for NRN_PRCELLSTATE feature.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1684 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print common code for global functions like nrn_init, nrn_cur and nrn_state.
type | The target backend code block type |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1195 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print NEURON global variable macros.
Definition at line 1601 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print byte arrays that register scalar and vector variables for hoc interface.
TODO: Same as CoreNEURON?
TODO: Write HocParmLimits and other HOC global variables (delta_t)
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 803 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print all includes.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1589 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Definition at line 263 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Definition at line 360 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print the initial block.
Definition at line 1173 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print all NEURON macros.
Definition at line 1595 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print make_*_instance
.
Definition at line 1095 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print make_*_node_data
.
Definition at line 1153 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print the structure that wraps all global variables used in the NMODL.
print_initializers | Whether to include default values in the struct definition (true: int foo{42}; false: int foo;) |
TODO: Print only global variables printed in NEURON
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 704 of file codegen_neuron_cpp_visitor.cpp.
|
overridevirtual |
Print the structure that wraps all range and int variables required for the NMODL.
print_initializers | Whether or not default values for variables be included in the struct declaration. |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1054 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print the mechanism registration function.
TODO: Write this according to NEURON
type related information
Call _nrn_mechanism_register_data_fields() with the correct arguments Geenerated code follows the style underneath
_nrn_mechanism_register_data_fields(mech_type, _nrn_mechanism_field<double>{"var_name"}, /* float var index 0 *‍/ ... );
TODO: More things to add here
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 922 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print mechanism variables' related macros.
TODO: More prints here?
Definition at line 1618 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print start of namespaces.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1653 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print end of namespaces.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1658 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Prints the start of the neuron
namespace.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 462 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Prints the end of the neuron
namespace.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 468 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print call to net_event.
node | The AST node representing the function call |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1736 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print call to net_move.
node | The AST node representing the function call |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1732 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print call to net_send
.
node | The AST node representing the function call |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1728 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print includes from NEURON.
Definition at line 651 of file codegen_neuron_cpp_visitor.cpp.
void nmodl::codegen::CodegenNeuronCppVisitor::print_node_data_structure | ( | bool | print_initializers | ) |
Print the structure that wraps all node variables required for the NMODL.
print_initializers | Whether or not default values for variables be included in the struct declaration. |
Definition at line 1139 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print nrn_alloc function definition.
TODO: Print the equivalent of nrn_alloc_<mech_name>
TODO: CONSTRUCTOR call
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1247 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print nrn_constructor function definition.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1235 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print nrn_cur / current update function definition.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1547 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print the nrn_cur
kernel with NMODL conductance
keyword provisions.
TODO: Edit for NEURON.
If the NMODL conductance
keyword is used in the breakpoint
block, then CodegenCoreneuronCppVisitor::print_nrn_cur_kernel will use this printer
node | the AST node representing the NMODL breakpoint block |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1434 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print main body of nrn_cur function.
TODO: Edit for NEURON.
node | the AST node representing the NMODL breakpoint block |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1508 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print the nrn_cur
kernel without NMODL conductance
keyword provisions.
TODO: Edit for NEURON.
If the NMODL conductance
keyword is not used in the breakpoint
block, then CodegenCoreneuronCppVisitor::print_nrn_cur_kernel will use this printer
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1473 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print the nrn_current
kernel.
TODO: Edit for NEURON.
node | the AST node representing the NMODL breakpoint block |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1414 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print nrn_destructor function definition.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1241 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print the nrn_init
function definition.
skip_init_check | true to generate code executing the initialization conditionally |
Definition at line 1211 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print nrn_jacob function definition.
Definition at line 1223 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print nrn_state / state update function definition.
TODO: Edit for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1344 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print POINT_PROCESS related functions Wrap external NEURON functions related to POINT_PROCESS mechanisms.
Definition at line 102 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print NMODL procedure in target backend code.
node |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 239 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
_initlists() should only be called once by the mechanism registration function (_<mod_file>_reg())
TODO: Something similar needs to happen for slist/dlist2 but I don't know their usage at
TODO: We have to do checks and add errors similar to nocmodl in the
TODO: Needs a for loop here. Look at
TODO: Also needs a test
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 662 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Print NEURON functions related to setting global variables of the mechanism.
Definition at line 147 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Print standard C/C++ includes.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 638 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Set v_unused (voltage) for NRN_PRCELLSTATE feature.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 1672 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Process a verbatim block for possible variable renaming.
TODO: Write for NEURON.
text | The verbatim code to be processed |
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 419 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
In non POINT_PROCESS mechanisms all functions and procedures need a py
<func_or_proc_name> to be available to the HOC interpreter.
Definition at line 445 of file codegen_neuron_cpp_visitor.cpp.
|
protected |
Get the signature of the npy
<func_or_proc_name> function.
Definition at line 451 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Arguments for register_mech or point_register_mech function.
TODO: Write for NEURON.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 425 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
Name of the simulator the code was generated for.
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 38 of file codegen_neuron_cpp_visitor.cpp.
|
overrideprotectedvirtual |
TODO: Edit for NEURON.
Implements nmodl::visitor::ConstVisitor.
Definition at line 1746 of file codegen_neuron_cpp_visitor.cpp.