User Guide
symbol_properties.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2023 Blue Brain Project, EPFL.
3  * See the top-level LICENSE file for details.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #include <string>
9 #include <unordered_map>
10 #include <vector>
11 
14 #include "utils/string_utils.hpp"
15 
16 
17 namespace nmodl {
18 namespace symtab {
19 namespace syminfo {
20 
21 
22 // NOLINTNEXTLINE(readability-function-cognitive-complexity)
23 std::vector<std::string> to_string_vector(const NmodlType& obj) {
24  std::vector<std::string> properties;
25 
26  // do nothing for NmodlType::empty
27 
29  properties.emplace_back("local");
30  }
31 
33  properties.emplace_back("global");
34  }
35 
37  properties.emplace_back("range");
38  }
39 
41  properties.emplace_back("parameter");
42  }
43 
45  properties.emplace_back("pointer");
46  }
47 
49  properties.emplace_back("bbcore_pointer");
50  }
51 
53  properties.emplace_back("extern");
54  }
55 
57  properties.emplace_back("prime_name");
58  }
59 
61  properties.emplace_back("assigned_definition");
62  }
63 
65  properties.emplace_back("unit_def");
66  }
67 
69  properties.emplace_back("read_ion");
70  }
71 
73  properties.emplace_back("write_ion");
74  }
75 
77  properties.emplace_back("nonspecific_cur_var");
78  }
79 
81  properties.emplace_back("electrode_cur");
82  }
83 
85  properties.emplace_back("argument");
86  }
87 
89  properties.emplace_back("function_block");
90  }
91 
93  properties.emplace_back("procedure_block");
94  }
95 
97  properties.emplace_back("derivative_block");
98  }
99 
101  properties.emplace_back("linear_block");
102  }
103 
105  properties.emplace_back("non_linear_block");
106  }
107 
109  properties.emplace_back("table_statement_var");
110  }
111 
113  properties.emplace_back("table_assigned_var");
114  }
115 
117  properties.emplace_back("constant");
118  }
119 
121  properties.emplace_back("kinetic_block");
122  }
123 
125  properties.emplace_back("function_table_block");
126  }
127 
129  properties.emplace_back("factor_def");
130  }
131 
133  properties.emplace_back("extern_neuron_var");
134  }
135 
137  properties.emplace_back("extern_method");
138  }
139 
141  properties.emplace_back("state_var");
142  }
143 
144  if (has_property(obj, NmodlType::to_solve)) {
145  properties.emplace_back("to_solve");
146  }
147 
148  if (has_property(obj, NmodlType::useion)) {
149  properties.emplace_back("ion");
150  }
151 
153  properties.emplace_back("discrete_block");
154  }
155 
156  if (has_property(obj, NmodlType::define)) {
157  properties.emplace_back("define");
158  }
159 
161  properties.emplace_back("codegen_var");
162  }
163 
165  properties.emplace_back("use_range_ptr_var");
166  }
167 
169  properties.emplace_back("random_var");
170  }
171 
172  return properties;
173 }
174 
175 std::vector<std::string> to_string_vector(const Status& obj) {
176  std::vector<std::string> status;
177 
178  // do nothing for Status::empty
179 
180  if (has_status(obj, Status::localized)) {
181  status.emplace_back("localized");
182  }
183 
184  if (has_status(obj, Status::globalized)) {
185  status.emplace_back("globalized");
186  }
187 
188  if (has_status(obj, Status::inlined)) {
189  status.emplace_back("inlined");
190  }
191 
192  if (has_status(obj, Status::renamed)) {
193  status.emplace_back("renamed");
194  }
195 
196  if (has_status(obj, Status::created)) {
197  status.emplace_back("created");
198  }
199 
200  if (has_status(obj, Status::from_state)) {
201  status.emplace_back("from_state");
202  }
203 
204  if (has_status(obj, Status::thread_safe)) {
205  status.emplace_back("thread_safe");
206  }
207 
208  return status;
209 }
210 
211 std::ostream& operator<<(std::ostream& os, const NmodlType& obj) {
212  return os << to_string(obj);
213 }
214 
215 std::ostream& operator<<(std::ostream& os, const Status& obj) {
216  return os << to_string(obj);
217 }
218 
219 } // namespace syminfo
220 } // namespace symtab
221 } // namespace nmodl
nmodl::symtab::syminfo::has_status
bool has_status(const Status &obj, Status state)
check if any status is set
Definition: symbol_properties.hpp:268
nmodl::symtab::syminfo::Status::from_state
@ from_state
derived from state
nmodl::symtab::syminfo::NmodlType::write_ion_var
@ write_ion_var
Write Ion.
nmodl::symtab::syminfo::NmodlType::use_range_ptr_var
@ use_range_ptr_var
FUNCTION or PROCEDURE needs setdata check.
nmodl::symtab::syminfo::NmodlType::extern_method
@ extern_method
neuron solver methods and math functions
nmodl::symtab::syminfo::Status::globalized
@ globalized
converted to global
nmodl::symtab::syminfo::Status::thread_safe
@ thread_safe
variable marked as thread safe
nmodl::symtab::syminfo::NmodlType::extern_var
@ extern_var
Extern Type.
nmodl::symtab::syminfo::NmodlType::table_assigned_var
@ table_assigned_var
variable is used in table as assigned
nmodl::symtab::syminfo::NmodlType::linear_block
@ linear_block
Linear Block.
nmodl
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
nmodl::symtab::syminfo::NmodlType::constant_var
@ constant_var
constant variable
nmodl::symtab::syminfo::NmodlType::to_solve
@ to_solve
need to solve : used in solve statement
nmodl::symtab::syminfo::NmodlType::function_table_block
@ function_table_block
FunctionTable Block.
nmodl::symtab::syminfo::NmodlType::local_var
@ local_var
Local Variable.
symbol_properties.hpp
Implement various classes to represent various Symbol properties.
nmodl::symtab::syminfo::Status
Status
state during various compiler passes
Definition: symbol_properties.hpp:54
string_utils.hpp
Implement string manipulation functions.
nmodl::symtab::syminfo::NmodlType::useion
@ useion
ion type
nmodl::symtab::syminfo::NmodlType::codegen_var
@ codegen_var
Codegen specific variable.
nmodl::symtab::syminfo::NmodlType::range_var
@ range_var
Range Variable.
nmodl::symtab::syminfo::Status::created
@ created
created
nmodl::symtab::syminfo::operator<<
std::ostream & operator<<(std::ostream &os, const NmodlType &obj)
Definition: symbol_properties.cpp:211
nmodl::symtab::syminfo::Status::inlined
@ inlined
inlined
nmodl::symtab::syminfo::NmodlType::prime_name
@ prime_name
Prime Type.
nmodl::symtab::syminfo::NmodlType::kinetic_block
@ kinetic_block
Kinetic Block.
nmodl::symtab::syminfo::NmodlType::function_block
@ function_block
Function Type.
codegen_naming.hpp
nmodl::symtab::syminfo::NmodlType::table_statement_var
@ table_statement_var
variable is used in table statement
nmodl::symtab::syminfo::NmodlType::procedure_block
@ procedure_block
Procedure Type.
nmodl::symtab::syminfo::NmodlType::define
@ define
Define variable / macro.
nmodl::symtab::syminfo::NmodlType::argument
@ argument
Argument Type.
nmodl::symtab::syminfo::NmodlType::factor_def
@ factor_def
factor in unit block
nmodl::symtab::syminfo::to_string
std::string to_string(const T &obj)
Definition: symbol_properties.hpp:282
nmodl::symtab::syminfo::NmodlType::nonspecific_cur_var
@ nonspecific_cur_var
Non Specific Current.
nmodl::symtab::syminfo::NmodlType::assigned_definition
@ assigned_definition
Assigned Definition.
nmodl::symtab::syminfo::NmodlType::param_assign
@ param_assign
Parameter Variable.
nmodl::symtab::syminfo::NmodlType
NmodlType
NMODL variable properties.
Definition: symbol_properties.hpp:116
nmodl::symtab::syminfo::NmodlType::pointer_var
@ pointer_var
Pointer Type.
nmodl::symtab::syminfo::NmodlType::bbcore_pointer_var
@ bbcore_pointer_var
Bbcorepointer Type.
nmodl::symtab::syminfo::NmodlType::read_ion_var
@ read_ion_var
Read Ion.
nmodl::symtab::syminfo::NmodlType::state_var
@ state_var
state variable
nmodl::symtab::syminfo::NmodlType::derivative_block
@ derivative_block
Derivative Block.
nmodl::symtab::syminfo::NmodlType::non_linear_block
@ non_linear_block
NonLinear Block.
nmodl::symtab::syminfo::NmodlType::global_var
@ global_var
Global Variable.
nmodl::symtab::syminfo::to_string_vector
std::vector< std::string > to_string_vector(const NmodlType &obj)
helper function to convert nmodl properties to string
Definition: symbol_properties.cpp:23
nmodl::symtab::syminfo::NmodlType::random_var
@ random_var
Randomvar Type.
nmodl::symtab::syminfo::NmodlType::unit_def
@ unit_def
Unit Def.
nmodl::symtab::syminfo::Status::renamed
@ renamed
renamed
nmodl::symtab::syminfo::Status::localized
@ localized
converted to local
nmodl::symtab::syminfo::NmodlType::discrete_block
@ discrete_block
Discrete Block.
nmodl::symtab::syminfo::NmodlType::extern_neuron_variable
@ extern_neuron_variable
neuron variable accessible in mod file
nmodl::symtab::syminfo::NmodlType::electrode_cur_var
@ electrode_cur_var
Electrode Current.
nmodl::symtab::syminfo::has_property
bool has_property(const NmodlType &obj, NmodlType property)
check if any property is set
Definition: symbol_properties.hpp:263