NEURON
nmodl_visitor.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 ///
9 /// THIS FILE IS GENERATED AT BUILD TIME AND SHALL NOT BE EDITED.
10 ///
11 
13 
14 #include "ast/all.hpp"
16 
17 
18 namespace nmodl {
19 namespace visitor {
20 
21 using namespace ast;
22 
24  if (is_exclude_type(node.get_node_type())) {
25  return;
26  }
27 
28 
29 }
30 
32  if (is_exclude_type(node.get_node_type())) {
33  return;
34  }
35 
36 
37 }
38 
40  if (is_exclude_type(node.get_node_type())) {
41  return;
42  }
43 
44 
45 }
46 
48  if (is_exclude_type(node.get_node_type())) {
49  return;
50  }
51 
52 
53 }
54 
56  if (is_exclude_type(node.get_node_type())) {
57  return;
58  }
59 
60 
61 }
62 
64  if (is_exclude_type(node.get_node_type())) {
65  return;
66  }
67 
68 
69 }
70 
72  if (is_exclude_type(node.get_node_type())) {
73  return;
74  }
75 
76  std::stringstream ss;
77  ss << node.eval();
78  printer->add_element(ss.str());
79 
80 
81 
82 }
83 
85  if (is_exclude_type(node.get_node_type())) {
86  return;
87  }
88 
89  if(node.get_macro() == nullptr) {
90  printer->add_element(std::to_string(node.eval()));
91  }
92 
93 
94 
95  if(node.get_macro()) {
96  node.get_macro()->accept(*this);
97  }
98 
99 
100 }
101 
103  if (is_exclude_type(node.get_node_type())) {
104  return;
105  }
106 
107  std::stringstream ss;
108  ss << std::setprecision(16);
109  ss << node.eval();
110  printer->add_element(ss.str());
111 
112 
113 
114 }
115 
117  if (is_exclude_type(node.get_node_type())) {
118  return;
119  }
120 
121  std::stringstream ss;
122  ss << std::setprecision(16);
123  ss << node.eval();
124  printer->add_element(ss.str());
125 
126 
127 
128 }
129 
131  if (is_exclude_type(node.get_node_type())) {
132  return;
133  }
134 
135  std::stringstream ss;
136  ss << node.eval();
137  printer->add_element(ss.str());
138 
139 
140 
141 }
142 
144  if (is_exclude_type(node.get_node_type())) {
145  return;
146  }
147 
148 
149  node.get_value()->accept(*this);
150 
151 
152 }
153 
155  if (is_exclude_type(node.get_node_type())) {
156  return;
157  }
158 
159 
160  node.get_value()->accept(*this);
161 
162 
163  auto order = node.get_order()->eval();
164  const std::string symbol(order, '\'');
165  printer->add_element(symbol);
166 
167 
168 }
169 
171  if (is_exclude_type(node.get_node_type())) {
172  return;
173  }
174 
175 
176  node.get_name()->accept(*this);
177 
178 
179  printer->add_element("[");
180  node.get_length()->accept(*this);
181 printer->add_element("]");
182 
183 
184 }
185 
187  if (is_exclude_type(node.get_node_type())) {
188  return;
189  }
190 
191 
192  node.get_name()->accept(*this);
193 
194 
195  if(node.get_at()) {
196  printer->add_element("@");
197  node.get_at()->accept(*this);
198  }
199 
200 
201  if(node.get_index()) {
202  printer->add_element("[");
203  node.get_index()->accept(*this);
204 printer->add_element("]");
205  }
206 
207 
208 }
209 
211  if (is_exclude_type(node.get_node_type())) {
212  return;
213  }
214 
215 
216  node.get_name()->accept(*this);
217 
218 
219  if(node.get_unit()) {
220  node.get_unit()->accept(*this);
221  }
222 
223 
224 }
225 
227  if (is_exclude_type(node.get_node_type())) {
228  return;
229  }
230 
231 
232  if(node.get_value()) {
233  printer->add_element(" ");
234  node.get_value()->accept(*this);
235  }
236 
237 
238  node.get_name()->accept(*this);
239 
240 
241 }
242 
244  if (is_exclude_type(node.get_node_type())) {
245  return;
246  }
247 
248 
249  node.get_name()->accept(*this);
250 
251 
252 }
253 
255  if (is_exclude_type(node.get_node_type())) {
256  return;
257  }
258 
259 
260  node.get_name()->accept(*this);
261 
262 
263 }
264 
266  if (is_exclude_type(node.get_node_type())) {
267  return;
268  }
269 
270 
271  node.get_name()->accept(*this);
272 
273 
274 }
275 
277  if (is_exclude_type(node.get_node_type())) {
278  return;
279  }
280 
281 
282  node.get_name()->accept(*this);
283 
284 
285 }
286 
288  if (is_exclude_type(node.get_node_type())) {
289  return;
290  }
291 
292 
293  node.get_name()->accept(*this);
294 
295 
296 }
297 
299  if (is_exclude_type(node.get_node_type())) {
300  return;
301  }
302 
303 
304  node.get_name()->accept(*this);
305 
306 
307 }
308 
310  if (is_exclude_type(node.get_node_type())) {
311  return;
312  }
313 
314 
315  node.get_name()->accept(*this);
316 
317 
318 }
319 
321  if (is_exclude_type(node.get_node_type())) {
322  return;
323  }
324 
325 
326  node.get_name()->accept(*this);
327 
328 
329 }
330 
332  if (is_exclude_type(node.get_node_type())) {
333  return;
334  }
335 
336 
337  node.get_name()->accept(*this);
338 
339 
340 }
341 
343  if (is_exclude_type(node.get_node_type())) {
344  return;
345  }
346 
347 
348  node.get_name()->accept(*this);
349 
350 
351 }
352 
354  if (is_exclude_type(node.get_node_type())) {
355  return;
356  }
357  printer->add_element("PARAMETER ");
358 
359  printer->push_level();
360 
361  visit_element(node.get_statements(),"",false,true);
362 
363 
364 printer->pop_level();
365 }
366 
368  printer->add_element(": INDEPENDENT block is deprecated and has no effect in the NEURON model. Skipped!");
369  return; if (is_exclude_type(node.get_node_type())) {
370  return;
371  }
372  printer->add_element("INDEPENDENT ");
373 
374  printer->push_level();
375 
376  visit_element(node.get_variables()," ",false,false);
377 
378 
379 printer->pop_level();
380 }
381 
383  if (is_exclude_type(node.get_node_type())) {
384  return;
385  }
386  printer->add_element("ASSIGNED ");
387 
388  printer->push_level();
389 
390  visit_element(node.get_definitions(),"",false,true);
391 
392 
393 printer->pop_level();
394 }
395 
397  if (is_exclude_type(node.get_node_type())) {
398  return;
399  }
400  printer->add_element("STATE ");
401 
402  printer->push_level();
403 
404  visit_element(node.get_definitions(),"",false,true);
405 
406 
407 printer->pop_level();
408 }
409 
411  if (is_exclude_type(node.get_node_type())) {
412  return;
413  }
414  printer->add_element("INITIAL ");
415 
416 
417  if(node.get_statement_block()) {
418  node.get_statement_block()->accept(*this);
419  }
420 
421 
422 }
423 
425  if (is_exclude_type(node.get_node_type())) {
426  return;
427  }
428  printer->add_element("CONSTRUCTOR ");
429 
430 
431  if(node.get_statement_block()) {
432  node.get_statement_block()->accept(*this);
433  }
434 
435 
436 }
437 
439  if (is_exclude_type(node.get_node_type())) {
440  return;
441  }
442  printer->add_element("DESTRUCTOR ");
443 
444 
445  if(node.get_statement_block()) {
446  node.get_statement_block()->accept(*this);
447  }
448 
449 
450 }
451 
453  if (is_exclude_type(node.get_node_type())) {
454  return;
455  }
456 
457  printer->push_level();
458 
459  visit_element(node.get_statements(),"",false,true);
460 
461 
462 printer->pop_level();
463 }
464 
466  if (is_exclude_type(node.get_node_type())) {
467  return;
468  }
469  printer->add_element("DERIVATIVE ");
470 
471 
472  node.get_name()->accept(*this);
473 printer->add_element(" ");
474 
475 
476  if(node.get_statement_block()) {
477  node.get_statement_block()->accept(*this);
478  }
479 
480 
481 }
482 
484  if (is_exclude_type(node.get_node_type())) {
485  return;
486  }
487  printer->add_element("LINEAR ");
488 
489 
490  node.get_name()->accept(*this);
491 printer->add_element(" ");
492 
493 
494  if (!node.get_solvefor().empty()) {
495  printer->add_element(" SOLVEFOR ");
496  visit_element(node.get_solvefor(),",",false,false);
497  }
498 
499 
500  if(node.get_statement_block()) {
501  node.get_statement_block()->accept(*this);
502  }
503 
504 
505 }
506 
508  if (is_exclude_type(node.get_node_type())) {
509  return;
510  }
511  printer->add_element("NONLINEAR ");
512 
513 
514  node.get_name()->accept(*this);
515 
516 
517  if (!node.get_solvefor().empty()) {
518  printer->add_element(" SOLVEFOR ");
519  visit_element(node.get_solvefor(),",",false,false);
520  }
521 printer->add_element(" ");
522 
523  if(node.get_statement_block()) {
524  node.get_statement_block()->accept(*this);
525  }
526 
527 
528 }
529 
531  if (is_exclude_type(node.get_node_type())) {
532  return;
533  }
534  printer->add_element("DISCRETE ");
535 
536 
537  node.get_name()->accept(*this);
538 printer->add_element(" ");
539 
540 
541  if(node.get_statement_block()) {
542  node.get_statement_block()->accept(*this);
543  }
544 
545 
546 }
547 
549  if (is_exclude_type(node.get_node_type())) {
550  return;
551  }
552  printer->add_element("FUNCTION_TABLE ");
553 
554 
555  node.get_name()->accept(*this);
556 
557 printer->add_element("(");
558  visit_element(node.get_parameters(),", ",false,false);
559 printer->add_element(")");
560 
561  if(node.get_unit()) {
562  printer->add_element(" ");
563  node.get_unit()->accept(*this);
564  }
565 
566 
567 }
568 
570  if (is_exclude_type(node.get_node_type())) {
571  return;
572  }
573  printer->add_element("FUNCTION ");
574 
575 
576  node.get_name()->accept(*this);
577 
578 printer->add_element("(");
579  visit_element(node.get_parameters(),", ",false,false);
580 printer->add_element(")");
581 
582  if(node.get_unit()) {
583  printer->add_element(" ");
584  node.get_unit()->accept(*this);
585  }
586 printer->add_element(" ");
587 
588  if(node.get_statement_block()) {
589  node.get_statement_block()->accept(*this);
590  }
591 
592 
593 }
594 
596  if (is_exclude_type(node.get_node_type())) {
597  return;
598  }
599  printer->add_element("PROCEDURE ");
600 
601 
602  node.get_name()->accept(*this);
603 
604 printer->add_element("(");
605  visit_element(node.get_parameters(),", ",false,false);
606 printer->add_element(") ");
607 
608  if(node.get_unit()) {
609  node.get_unit()->accept(*this);
610  }
611 
612 
613  if(node.get_statement_block()) {
614  node.get_statement_block()->accept(*this);
615  }
616 
617 
618 }
619 
621  if (is_exclude_type(node.get_node_type())) {
622  return;
623  }
624  printer->add_element("NET_RECEIVE ");
625 
626 printer->add_element("(");
627  visit_element(node.get_parameters(),", ",false,false);
628 printer->add_element(") ");
629 
630  if(node.get_statement_block()) {
631  node.get_statement_block()->accept(*this);
632  }
633 
634 
635 }
636 
638  if (is_exclude_type(node.get_node_type())) {
639  return;
640  }
641  printer->add_element("SOLVE");
642 
643 
644  printer->add_element(" ");
645  node.get_block_name()->accept(*this);
646 
647 
648  if(node.get_method()) {
649  printer->add_element(" METHOD ");
650  node.get_method()->accept(*this);
651  }
652 
653 
654  if(node.get_steadystate()) {
655  printer->add_element(" STEADYSTATE ");
656  node.get_steadystate()->accept(*this);
657  }
658 
659 
660 }
661 
663  if (is_exclude_type(node.get_node_type())) {
664  return;
665  }
666  printer->add_element("BREAKPOINT ");
667 
668 
669  if(node.get_statement_block()) {
670  node.get_statement_block()->accept(*this);
671  }
672 
673 
674 }
675 
677  if (is_exclude_type(node.get_node_type())) {
678  return;
679  }
680  printer->add_element("BEFORE ");
681 
682 
683  node.get_bablock()->accept(*this);
684 
685 
686 }
687 
689  if (is_exclude_type(node.get_node_type())) {
690  return;
691  }
692  printer->add_element("AFTER ");
693 
694 
695  node.get_bablock()->accept(*this);
696 
697 
698 }
699 
701  if (is_exclude_type(node.get_node_type())) {
702  return;
703  }
704 
705 
706  node.get_type()->accept(*this);
707 printer->add_element(" ");
708 
709 
710  if(node.get_statement_block()) {
711  node.get_statement_block()->accept(*this);
712  }
713 
714 
715 }
716 
718  if (is_exclude_type(node.get_node_type())) {
719  return;
720  }
721  printer->add_element("FOR_NETCONS ");
722 
723 printer->add_element("(");
724  visit_element(node.get_parameters(),", ",false,false);
725 printer->add_element(") ");
726 
727  if(node.get_statement_block()) {
728  node.get_statement_block()->accept(*this);
729  }
730 
731 
732 }
733 
735  if (is_exclude_type(node.get_node_type())) {
736  return;
737  }
738  printer->add_element("KINETIC ");
739 
740 
741  node.get_name()->accept(*this);
742 printer->add_element(" ");
743 
744 
745  visit_element(node.get_solvefor(),",",false,false);
746 
747 
748  if(node.get_statement_block()) {
749  node.get_statement_block()->accept(*this);
750  }
751 
752 
753 }
754 
756  if (is_exclude_type(node.get_node_type())) {
757  return;
758  }
759  printer->add_element("UNITS ");
760 
761  printer->push_level();
762 
763  visit_element(node.get_definitions(),"",false,true);
764 
765 
766 printer->pop_level();
767 }
768 
770  if (is_exclude_type(node.get_node_type())) {
771  return;
772  }
773  printer->add_element("CONSTANT ");
774 
775  printer->push_level();
776 
777  visit_element(node.get_statements(),"",false,true);
778 
779 
780 printer->pop_level();
781 }
782 
784  if (is_exclude_type(node.get_node_type())) {
785  return;
786  }
787  printer->add_element("NEURON ");
788 
789 
790  if(node.get_statement_block()) {
791  node.get_statement_block()->accept(*this);
792  }
793 
794 
795 }
796 
798  if (is_exclude_type(node.get_node_type())) {
799  return;
800  }
801 
802 
803  printer->add_element("(");
804  node.get_name()->accept(*this);
805 printer->add_element(")");
806 
807 
808 }
809 
811  if (is_exclude_type(node.get_node_type())) {
812  return;
813  }
814 
815 
816  node.get_value()->accept(*this);
817 
818 
819  if(node.get_unit()) {
820  node.get_unit()->accept(*this);
821  }
822 
823 
824 }
825 
827  if (is_exclude_type(node.get_node_type())) {
828  return;
829  }
830 
831 
832  node.get_name()->accept(*this);
833 
834 
835 }
836 
838  if (is_exclude_type(node.get_node_type())) {
839  return;
840  }
841 
842 
843  printer->add_element("<");
844  node.get_min()->accept(*this);
845 printer->add_element(",");
846 
847 
848  node.get_max()->accept(*this);
849 printer->add_element(">");
850 
851 
852 }
853 
855  if (is_exclude_type(node.get_node_type())) {
856  return;
857  }
858 
859 
860  printer->add_element("<");
861  node.get_min()->accept(*this);
862 printer->add_element(",");
863 
864 
865  node.get_max()->accept(*this);
866 printer->add_element(">");
867 
868 
869 }
870 
872  if (is_exclude_type(node.get_node_type())) {
873  return;
874  }
875 
876 
877  node.get_name()->accept(*this);
878 
879 
880  printer->add_element(" = ");
881  node.get_value()->accept(*this);
882 
883 
884  if(node.get_unit()) {
885  printer->add_element(" ");
886  node.get_unit()->accept(*this);
887  }
888 
889 
890 }
891 
893  if (is_exclude_type(node.get_node_type())) {
894  return;
895  }
896 
897  std::stringstream ss;
898  ss << node.eval();
899  printer->add_element(ss.str());
900 
901 
902 
903 }
904 
906  if (is_exclude_type(node.get_node_type())) {
907  return;
908  }
909 
910  std::stringstream ss;
911  ss << node.eval();
912  printer->add_element(ss.str());
913 
914 
915 
916 }
917 
919  if (is_exclude_type(node.get_node_type())) {
920  return;
921  }
922 
923  std::stringstream ss;
924  ss << node.eval();
925  printer->add_element(ss.str());
926 
927 
928 
929 }
930 
932  if (is_exclude_type(node.get_node_type())) {
933  return;
934  }
935 
936 
937  printer->add_element("(");
938  node.get_expression()->accept(*this);
939 printer->add_element(")");
940 
941 
942 }
943 
945  if (is_exclude_type(node.get_node_type())) {
946  return;
947  }
948 
949 
950  node.get_lhs()->accept(*this);
951 
952 
953  std::string op = node.get_op().eval();
954  if(op == "=" || op == "&&" || op == "||" || op == "==")
955  op = " " + op + " ";
956  printer->add_element(op);
957 
958 
959  node.get_rhs()->accept(*this);
960 
961 
962 }
963 
965  if (is_exclude_type(node.get_node_type())) {
966  return;
967  }
968 
969 
970  node.get_expression()->accept(*this);
971 
972 
973 }
974 
976  if (is_exclude_type(node.get_node_type())) {
977  return;
978  }
979 
980 
981  UnaryOperator(node.get_op()).accept(*this);
982 
983 
984  node.get_expression()->accept(*this);
985 
986 
987 }
988 
990  if (is_exclude_type(node.get_node_type())) {
991  return;
992  }
993  printer->add_element("~ ");
994 
995 
996  node.get_lhs()->accept(*this);
997 printer->add_element(" = ");
998 
999 
1000  node.get_rhs()->accept(*this);
1001 
1002 
1003 }
1004 
1006  if (is_exclude_type(node.get_node_type())) {
1007  return;
1008  }
1009  printer->add_element("~ ");
1010 
1011 
1012  node.get_lhs()->accept(*this);
1013 printer->add_element(" = ");
1014 
1015 
1016  node.get_rhs()->accept(*this);
1017 
1018 
1019 }
1020 
1022  if (is_exclude_type(node.get_node_type())) {
1023  return;
1024  }
1025 
1026 
1027  node.get_name()->accept(*this);
1028 
1029 printer->add_element("(");
1030  visit_element(node.get_arguments(),", ",false,false);
1031 printer->add_element(")");
1032 
1033 }
1034 
1036  if (is_exclude_type(node.get_node_type())) {
1037  return;
1038  }
1039 
1040 
1041  printer->add_element("(");
1042  node.get_expression()->accept(*this);
1043 printer->add_element(")");
1044 
1045 
1046  printer->add_element(" ");
1047  node.get_value()->accept(*this);
1048 
1049 
1050 }
1051 
1053  if (is_exclude_type(node.get_node_type())) {
1054  return;
1055  }
1056 
1057  std::stringstream ss;
1058  ss << node.eval();
1059  printer->add_element(ss.str());
1060 
1061 
1062 
1063 }
1064 
1066  if (is_exclude_type(node.get_node_type())) {
1067  return;
1068  }
1069 
1070 
1071  node.get_unit1()->accept(*this);
1072 
1073 
1074  printer->add_element(" = ");
1075  node.get_unit2()->accept(*this);
1076 
1077 
1078 }
1079 
1081  if (is_exclude_type(node.get_node_type())) {
1082  return;
1083  }
1084 
1085 
1086  node.get_name()->accept(*this);
1087 printer->add_element(" =");
1088 
1089 
1090  if(node.get_value()) {
1091  printer->add_element(" ");
1092  node.get_value()->accept(*this);
1093  }
1094 
1095 
1096  printer->add_element(" ");
1097  node.get_unit1()->accept(*this);
1098 
1099 
1100  if(node.get_gt()) {
1101  if(node.get_gt()->eval()) {
1102  printer->add_element(" ->");
1103  }
1104  }
1105 
1106 
1107  if(node.get_unit2()) {
1108  printer->add_element(" ");
1109  node.get_unit2()->accept(*this);
1110  }
1111 
1112 
1113 }
1114 
1116  if (is_exclude_type(node.get_node_type())) {
1117  return;
1118  }
1119 
1120 
1121  printer->add_element(" ");
1122  node.get_type()->accept(*this);
1123 printer->add_element(" ");
1124 
1125 
1126  node.get_value()->accept(*this);
1127 
1128 
1129 }
1130 
1132  if (is_exclude_type(node.get_node_type())) {
1133  return;
1134  }
1135 
1136  std::stringstream ss;
1137  ss << node.eval();
1138  printer->add_element(ss.str());
1139 
1140 
1141 
1142 }
1143 
1145  if (is_exclude_type(node.get_node_type())) {
1146  return;
1147  }
1148  printer->add_element("LOCAL ");
1149 
1150 
1151  visit_element(node.get_variables(),", ",false,false);
1152 
1153 
1154 }
1155 
1157  if (is_exclude_type(node.get_node_type())) {
1158  return;
1159  }
1160  printer->add_element("TITLE");
1161 
1162 
1163  node.get_title()->accept(*this);
1164 
1165 
1166 }
1167 
1169  if (is_exclude_type(node.get_node_type())) {
1170  return;
1171  }
1172  printer->add_element("DEFINE ");
1173 
1174 
1175  node.get_name()->accept(*this);
1176 
1177 
1178  printer->add_element(" ");
1179  node.get_value()->accept(*this);
1180 
1181 
1182 }
1183 
1185  if (is_exclude_type(node.get_node_type())) {
1186  return;
1187  }
1188  printer->add_element("INCLUDE ");
1189 
1190 
1191  node.get_filename()->accept(*this);
1192 
1193 
1194 
1195 
1196 
1197 }
1198 
1200  if (is_exclude_type(node.get_node_type())) {
1201  return;
1202  }
1203 
1204 
1205  node.get_name()->accept(*this);
1206 
1207 
1208  if(node.get_value()) {
1209  printer->add_element(" = ");
1210  node.get_value()->accept(*this);
1211  }
1212 
1213 
1214  if(node.get_unit()) {
1215  printer->add_element(" ");
1216  node.get_unit()->accept(*this);
1217  }
1218 
1219 
1220  if(node.get_limit()) {
1221  printer->add_element(" ");
1222  node.get_limit()->accept(*this);
1223  }
1224 
1225 
1226 }
1227 
1229  if (is_exclude_type(node.get_node_type())) {
1230  return;
1231  }
1232 
1233 
1234  node.get_name()->accept(*this);
1235 
1236 
1237  if(node.get_length()) {
1238  printer->add_element("[");
1239  node.get_length()->accept(*this);
1240 printer->add_element("]");
1241  }
1242 
1243 
1244  if(node.get_from()) {
1245  printer->add_element(" FROM ");
1246  node.get_from()->accept(*this);
1247  }
1248 
1249 
1250  if(node.get_to()) {
1251  printer->add_element(" TO ");
1252  node.get_to()->accept(*this);
1253  }
1254 
1255 
1256  if(node.get_start()) {
1257  printer->add_element(" START ");
1258  node.get_start()->accept(*this);
1259  }
1260 
1261 
1262  if(node.get_unit()) {
1263  printer->add_element(" ");
1264  node.get_unit()->accept(*this);
1265  }
1266 
1267 
1268  if(node.get_abstol()) {
1269  printer->add_element(" <");
1270  node.get_abstol()->accept(*this);
1271 printer->add_element(">");
1272  }
1273 
1274 
1275 }
1276 
1278  if (is_exclude_type(node.get_node_type())) {
1279  return;
1280  }
1281  printer->add_element("CONDUCTANCE ");
1282 
1283 
1284  node.get_conductance()->accept(*this);
1285 
1286 
1287  if(node.get_ion()) {
1288  printer->add_element(" USEION ");
1289  node.get_ion()->accept(*this);
1290  }
1291 
1292 
1293 }
1294 
1296  if (is_exclude_type(node.get_node_type())) {
1297  return;
1298  }
1299 
1300 
1301  node.get_expression()->accept(*this);
1302 
1303 
1304 }
1305 
1307  if (is_exclude_type(node.get_node_type())) {
1308  return;
1309  }
1310  printer->add_element("PROTECT ");
1311 
1312 
1313  node.get_expression()->accept(*this);
1314 
1315 
1316 }
1317 
1319  if (is_exclude_type(node.get_node_type())) {
1320  return;
1321  }
1322  printer->add_element("FROM ");
1323 
1324 
1325  node.get_name()->accept(*this);
1326 
1327 
1328  printer->add_element(" = ");
1329  node.get_from()->accept(*this);
1330 
1331 
1332  printer->add_element(" TO ");
1333  node.get_to()->accept(*this);
1334 
1335 
1336  if(node.get_increment()) {
1337  printer->add_element(" BY ");
1338  node.get_increment()->accept(*this);
1339  }
1340 printer->add_element(" ");
1341 
1342  if(node.get_statement_block()) {
1343  node.get_statement_block()->accept(*this);
1344  }
1345 
1346 
1347 }
1348 
1350  if (is_exclude_type(node.get_node_type())) {
1351  return;
1352  }
1353  printer->add_element("WHILE ");
1354 
1355 
1356  printer->add_element("(");
1357  node.get_condition()->accept(*this);
1358 printer->add_element(") ");
1359 
1360 
1361  if(node.get_statement_block()) {
1362  node.get_statement_block()->accept(*this);
1363  }
1364 
1365 
1366 }
1367 
1369  if (is_exclude_type(node.get_node_type())) {
1370  return;
1371  }
1372  printer->add_element("IF ");
1373 
1374 
1375  printer->add_element("(");
1376  node.get_condition()->accept(*this);
1377 printer->add_element(") ");
1378 
1379 
1380  if(node.get_statement_block()) {
1381  node.get_statement_block()->accept(*this);
1382  }
1383 
1384 
1385  visit_element(node.get_elseifs(),"",false,false);
1386 
1387 
1388  if(node.get_elses()) {
1389  node.get_elses()->accept(*this);
1390  }
1391 
1392 
1393 }
1394 
1396  if (is_exclude_type(node.get_node_type())) {
1397  return;
1398  }
1399  printer->add_element(" ELSE IF ");
1400 
1401 
1402  printer->add_element("(");
1403  node.get_condition()->accept(*this);
1404 printer->add_element(") ");
1405 
1406 
1407  if(node.get_statement_block()) {
1408  node.get_statement_block()->accept(*this);
1409  }
1410 
1411 
1412 }
1413 
1415  if (is_exclude_type(node.get_node_type())) {
1416  return;
1417  }
1418  printer->add_element(" ELSE ");
1419 
1420 
1421  if(node.get_statement_block()) {
1422  node.get_statement_block()->accept(*this);
1423  }
1424 
1425 
1426 }
1427 
1429  if (is_exclude_type(node.get_node_type())) {
1430  return;
1431  }
1432  printer->add_element("WATCH ");
1433 
1434 
1435  visit_element(node.get_statements(),",",false,false);
1436 
1437 
1438 }
1439 
1441  if (is_exclude_type(node.get_node_type())) {
1442  return;
1443  }
1444  printer->add_element("MUTEXLOCK");
1445 
1446 
1447 }
1448 
1450  if (is_exclude_type(node.get_node_type())) {
1451  return;
1452  }
1453  printer->add_element("MUTEXUNLOCK");
1454 
1455 
1456 }
1457 
1459  if (is_exclude_type(node.get_node_type())) {
1460  return;
1461  }
1462  printer->add_element("CONSERVE");
1463 
1464 
1465  printer->add_element(" ");
1466  node.get_react()->accept(*this);
1467 
1468 
1469  printer->add_element(" = ");
1470  node.get_expr()->accept(*this);
1471 
1472 
1473 }
1474 
1476  if (is_exclude_type(node.get_node_type())) {
1477  return;
1478  }
1479  printer->add_element("COMPARTMENT");
1480 
1481 
1482  if(node.get_index_name()) {
1483  printer->add_element(" ");
1484  node.get_index_name()->accept(*this);
1485 printer->add_element(",");
1486  }
1487 
1488 
1489  printer->add_element(" ");
1490  node.get_volume()->accept(*this);
1491 
1492 
1493  if (!node.get_species().empty()) {
1494  printer->add_element(" {");
1495  visit_element(node.get_species()," ",false,false);
1496 printer->add_element("}");
1497  }
1498 
1499 
1500 }
1501 
1503  if (is_exclude_type(node.get_node_type())) {
1504  return;
1505  }
1506  printer->add_element("LONGITUDINAL_DIFFUSION");
1507 
1508 
1509  if(node.get_index_name()) {
1510  printer->add_element(" ");
1511  node.get_index_name()->accept(*this);
1512 printer->add_element(",");
1513  }
1514 
1515 
1516  printer->add_element(" ");
1517  node.get_rate()->accept(*this);
1518 
1519 
1520  if (!node.get_species().empty()) {
1521  printer->add_element(" {");
1522  visit_element(node.get_species()," ",false,false);
1523 printer->add_element("}");
1524  }
1525 
1526 
1527 }
1528 
1530  if (is_exclude_type(node.get_node_type())) {
1531  return;
1532  }
1533  printer->add_element("~ ");
1534 
1535 
1536  node.get_reaction1()->accept(*this);
1537 
1538 
1539  printer->add_element(" ");
1540  ReactionOperator(node.get_op()).accept(*this);
1541 
1542 
1543  if(node.get_reaction2()) {
1544  printer->add_element(" ");
1545  node.get_reaction2()->accept(*this);
1546  }
1547 
1548 
1549  printer->add_element(" (");
1550  node.get_expression1()->accept(*this);
1551 
1552 
1553  if(node.get_expression2()) {
1554  printer->add_element(", ");
1555  node.get_expression2()->accept(*this);
1556  }
1557 printer->add_element(")");
1558 
1559 }
1560 
1562  if (is_exclude_type(node.get_node_type())) {
1563  return;
1564  }
1565  printer->add_element("LAG ");
1566 
1567 
1568  node.get_name()->accept(*this);
1569 
1570 
1571  printer->add_element(" BY ");
1572  node.get_byname()->accept(*this);
1573 
1574 
1575 }
1576 
1578  if (is_exclude_type(node.get_node_type())) {
1579  return;
1580  }
1581 
1582 
1583  node.get_constant()->accept(*this);
1584 
1585 
1586 }
1587 
1589  if (is_exclude_type(node.get_node_type())) {
1590  return;
1591  }
1592  printer->add_element("TABLE ");
1593 
1594 
1595  visit_element(node.get_table_vars(),",",false,false);
1596 
1597 
1598  if (!node.get_depend_vars().empty()) {
1599  printer->add_element(" DEPEND ");
1600  visit_element(node.get_depend_vars(),",",false,false);
1601  }
1602 
1603 
1604  printer->add_element(" FROM ");
1605  node.get_from()->accept(*this);
1606 
1607 
1608  printer->add_element(" TO ");
1609  node.get_to()->accept(*this);
1610 
1611 
1612  printer->add_element(" WITH ");
1613  node.get_with()->accept(*this);
1614 
1615 
1616 }
1617 
1619  if (is_exclude_type(node.get_node_type())) {
1620  return;
1621  }
1622 
1623 
1624  node.get_type()->accept(*this);
1625 printer->add_element(" ");
1626 
1627 
1628  node.get_name()->accept(*this);
1629 
1630 
1631 }
1632 
1634  if (is_exclude_type(node.get_node_type())) {
1635  return;
1636  }
1637  printer->add_element("USEION ");
1638 
1639 
1640  node.get_name()->accept(*this);
1641 
1642 
1643  if (!node.get_readlist().empty()) {
1644  printer->add_element(" READ ");
1645  visit_element(node.get_readlist(),", ",false,false);
1646  }
1647 
1648 
1649  if (!node.get_writelist().empty()) {
1650  printer->add_element(" WRITE ");
1651  visit_element(node.get_writelist(),", ",false,false);
1652  }
1653 
1654 
1655  if(node.get_valence()) {
1656  node.get_valence()->accept(*this);
1657  }
1658 
1659 
1660  if(node.get_ontology_id()) {
1661  printer->add_element(" REPRESENTS ");
1662  node.get_ontology_id()->accept(*this);
1663  }
1664 
1665 
1666 }
1667 
1669  if (is_exclude_type(node.get_node_type())) {
1670  return;
1671  }
1672  printer->add_element("NONSPECIFIC_CURRENT ");
1673 
1674 
1675  visit_element(node.get_currents(),", ",false,false);
1676 
1677 
1678 }
1679 
1681  if (is_exclude_type(node.get_node_type())) {
1682  return;
1683  }
1684  printer->add_element("ELECTRODE_CURRENT ");
1685 
1686 
1687  visit_element(node.get_currents(),", ",false,false);
1688 
1689 
1690 }
1691 
1693  if (is_exclude_type(node.get_node_type())) {
1694  return;
1695  }
1696  printer->add_element("RANGE ");
1697 
1698 
1699  visit_element(node.get_variables(),", ",false,false);
1700 
1701 
1702 }
1703 
1705  if (is_exclude_type(node.get_node_type())) {
1706  return;
1707  }
1708  printer->add_element("GLOBAL ");
1709 
1710 
1711  visit_element(node.get_variables(),", ",false,false);
1712 
1713 
1714 }
1715 
1717  if (is_exclude_type(node.get_node_type())) {
1718  return;
1719  }
1720  printer->add_element("RANDOM ");
1721 
1722 
1723  visit_element(node.get_variables(),", ",false,false);
1724 
1725 
1726 }
1727 
1729  if (is_exclude_type(node.get_node_type())) {
1730  return;
1731  }
1732  printer->add_element("POINTER ");
1733 
1734 
1735  visit_element(node.get_variables(),", ",false,false);
1736 
1737 
1738 }
1739 
1741  if (is_exclude_type(node.get_node_type())) {
1742  return;
1743  }
1744  printer->add_element("BBCOREPOINTER ");
1745 
1746 
1747  visit_element(node.get_variables(),", ",false,false);
1748 
1749 
1750 }
1751 
1753  if (is_exclude_type(node.get_node_type())) {
1754  return;
1755  }
1756  printer->add_element("EXTERNAL ");
1757 
1758 
1759  visit_element(node.get_variables(),", ",false,false);
1760 
1761 
1762 }
1763 
1765  if (is_exclude_type(node.get_node_type())) {
1766  return;
1767  }
1768  printer->add_element("THREADSAFE");
1769 
1770 
1771 }
1772 
1774  if (is_exclude_type(node.get_node_type())) {
1775  return;
1776  }
1777  printer->add_element("VERBATIM");
1778 
1779 
1780  node.get_statement()->accept(*this);
1781 printer->add_element("ENDVERBATIM");
1782 
1783 
1784 }
1785 
1787  if (is_exclude_type(node.get_node_type())) {
1788  return;
1789  }
1790 
1791 
1792  node.get_statement()->accept(*this);
1793 
1794 
1795 }
1796 
1798  if (is_exclude_type(node.get_node_type())) {
1799  return;
1800  }
1801  printer->add_element("COMMENT");
1802 
1803 
1804  node.get_statement()->accept(*this);
1805 printer->add_element("ENDCOMMENT");
1806 
1807 
1808 }
1809 
1811  if (is_exclude_type(node.get_node_type())) {
1812  return;
1813  }
1814  printer->add_element("REPRESENTS ");
1815 
1816 
1817  node.get_ontology_id()->accept(*this);
1818 
1819 
1820 }
1821 
1823  if (is_exclude_type(node.get_node_type())) {
1824  return;
1825  }
1826 
1827 
1828  visit_element(node.get_blocks(),"",true,false);
1829 
1830 
1831 }
1832 
1834  if (is_exclude_type(node.get_node_type())) {
1835  return;
1836  }
1837  printer->add_element("NRN_STATE ");
1838 
1839 
1840  visit_element(node.get_solve_statements(),"",false,true);
1841 
1842 
1843 }
1844 
1846  if (is_exclude_type(node.get_node_type())) {
1847  return;
1848  }
1849  printer->add_element("EIGEN_NEWTON_SOLVE");
1850 
1851 
1852  printer->add_element("[");
1853  node.get_n_state_vars()->accept(*this);
1854 printer->add_element("]");
1855 
1856 
1857  if(node.get_variable_block()) {
1858  node.get_variable_block()->accept(*this);
1859  }
1860 
1861 
1862  if(node.get_initialize_block()) {
1863  node.get_initialize_block()->accept(*this);
1864  }
1865 
1866 
1867  if(node.get_setup_x_block()) {
1868  node.get_setup_x_block()->accept(*this);
1869  }
1870 
1871 
1872  if(node.get_functor_block()) {
1873  node.get_functor_block()->accept(*this);
1874  }
1875 
1876 
1877  if(node.get_update_states_block()) {
1878  node.get_update_states_block()->accept(*this);
1879  }
1880 
1881 
1882  if(node.get_finalize_block()) {
1883  node.get_finalize_block()->accept(*this);
1884  }
1885 
1886 
1887 }
1888 
1890  if (is_exclude_type(node.get_node_type())) {
1891  return;
1892  }
1893  printer->add_element("EIGEN_LINEAR_SOLVE");
1894 
1895 
1896  printer->add_element("[");
1897  node.get_n_state_vars()->accept(*this);
1898 printer->add_element("]");
1899 
1900 
1901  if(node.get_variable_block()) {
1902  node.get_variable_block()->accept(*this);
1903  }
1904 
1905 
1906  if(node.get_initialize_block()) {
1907  node.get_initialize_block()->accept(*this);
1908  }
1909 
1910 
1911  if(node.get_setup_x_block()) {
1912  node.get_setup_x_block()->accept(*this);
1913  }
1914 
1915 
1916  if(node.get_update_states_block()) {
1917  node.get_update_states_block()->accept(*this);
1918  }
1919 
1920 
1921  if(node.get_finalize_block()) {
1922  node.get_finalize_block()->accept(*this);
1923  }
1924 
1925 
1926 }
1927 
1929  if (is_exclude_type(node.get_node_type())) {
1930  return;
1931  }
1932  printer->add_element("CVODE_BLOCK ");
1933 
1934 
1935  node.get_name()->accept(*this);
1936 printer->add_element(" ");
1937 
1938 
1939  printer->add_element("[");
1940  node.get_n_odes()->accept(*this);
1941 printer->add_element("]");
1942 
1943 
1944  if(node.get_non_stiff_block()) {
1945  node.get_non_stiff_block()->accept(*this);
1946  }
1947 
1948 
1949  if(node.get_stiff_block()) {
1950  node.get_stiff_block()->accept(*this);
1951  }
1952 
1953 
1954 }
1955 
1957  if (is_exclude_type(node.get_node_type())) {
1958  return;
1959  }
1960  printer->add_element("LONGITUDINAL_DIFFUSION_BLOCK");
1961 
1962 
1963  printer->add_element(" ");
1964  node.get_name()->accept(*this);
1965 printer->add_element(" ");
1966 
1967 
1968  if(node.get_longitudinal_diffusion_statements()) {
1969  node.get_longitudinal_diffusion_statements()->accept(*this);
1970  }
1971 
1972 
1973  if(node.get_compartment_statements()) {
1974  node.get_compartment_statements()->accept(*this);
1975  }
1976 
1977 
1978 }
1979 
1981  if (is_exclude_type(node.get_node_type())) {
1982  return;
1983  }
1984 
1985 
1986  node.get_expression()->accept(*this);
1987 
1988 
1989 }
1990 
1992  if (is_exclude_type(node.get_node_type())) {
1993  return;
1994  }
1995 
1996 
1997  node.get_node_to_solve()->accept(*this);
1998 
1999 
2000 }
2001 
2003  if (is_exclude_type(node.get_node_type())) {
2004  return;
2005  }
2006 
2007 
2008  node.get_solve_block()->accept(*this);
2009 
2010 
2011  node.get_node_to_solve()->accept(*this);
2012 
2013 
2014 }
2015 
2017  if (is_exclude_type(node.get_node_type())) {
2018  return;
2019  }
2020  printer->add_element("dt");
2021 
2022 
2023  printer->add_element(" = ");
2024  node.get_value()->accept(*this);
2025 
2026 
2027 }
2028 
2029 
2030 } // namespace visitor
2031 } // namespace nmodl
2032 
Auto generated AST classes declaration.
Represents a AFTER block in NMODL.
Definition: after_block.hpp:51
Represents an argument to functions and procedures.
Definition: argument.hpp:48
Represents a ASSIGNED block in the NMODL.
Represents a statement in ASSIGNED or STATE block.
Represents a block to be executed before or after another block.
Definition: ba_block.hpp:40
Type to represent different block types for before/after block.
Represents BBCOREPOINTER statement in NMODL.
Represent a single variable of type BBCOREPOINTER.
Represents a BEFORE block in NMODL.
Represents binary expression in the NMODL.
Operator used in ast::BinaryExpression.
Represents a multi-line comment in NMODL.
Base class for all block scoped nodes.
Definition: block.hpp:41
Represents a boolean variable.
Definition: boolean.hpp:42
Represents a BREAKPOINT block in NMODL.
Represent COMPARTMENT statement in NMODL.
Definition: compartment.hpp:39
Represents CONDUCTANCE statement in NMODL.
Represent CONSERVE statement in NMODL.
Definition: conserve.hpp:38
Represent CONSTANT block in the mod file.
Represent statement in CONSTANT block of NMODL.
Represents a variable in the ast::ConstantBlock.
Represents a CONSTRUCTOR block in the NMODL.
Represents a block used for variable timestep integration (CVODE) of DERIVATIVE blocks.
Definition: cvode_block.hpp:38
Represents a DEFINE statement in NMODL.
Definition: define.hpp:38
Represents DERIVATIVE block in the NMODL.
Represent a callback to NEURON's derivimplicit solver.
Represents a DESTRUCTOR block in the NMODL.
Represents differential equation in DERIVATIVE block.
Represents a double variable.
Definition: double.hpp:53
Represent linear solver solution block based on Eigen.
Represent newton solver solution block based on Eigen.
Represents ELECTRODE_CURRENT variables statement in NMODL.
Base class for all expressions in the NMODL.
Definition: expression.hpp:43
This construct is deprecated and no longer supported in the NMODL.
Definition: external.hpp:39
Represents a float variable.
Definition: float.hpp:44
Represents GLOBAL statement in NMODL.
Definition: global.hpp:39
Base class for all identifiers.
Definition: identifier.hpp:41
Represents an INCLUDE statement in NMODL.
Definition: include.hpp:39
Represents a INDEPENDENT block in the NMODL.
Represents specific element of an array variable.
Represents a INITIAL block in the NMODL.
Represents an integer variable.
Definition: integer.hpp:49
Represents a LAG statement in the mod file.
One equation in a system of equations tha collectively form a LINEAR block.
Represents a one line comment in NMODL.
Represents LINEAR block in the NMODL.
Represent LONGITUDINAL_DIFFUSION statement in NMODL.
Definition: lon_diffuse.hpp:39
Extracts information required for LONGITUDINAL_DIFFUSION for each KINETIC block.
Represent MUTEXLOCK statement in NMODL.
Definition: mutex_lock.hpp:38
Represent MUTEXUNLOCK statement in NMODL.
Represents a name.
Definition: name.hpp:44
Represent NEURON block in the mod file.
Base class for all AST node.
Definition: node.hpp:40
One equation in a system of equations that collectively make a NONLINEAR block.
Represents NONLINEAR block in the NMODL.
Represents NONSPECIFIC_CURRENT variables statement in NMODL.
Definition: nonspecific.hpp:39
Represents the coreneuron nrn_state callback function.
Base class for all numbers.
Definition: number.hpp:39
Represents CURIE information in NMODL.
Represents a PARAMETER block in the NMODL.
Definition: param_block.hpp:53
Represents POINTER statement in NMODL.
Definition: pointer.hpp:39
Represents a prime variable (for ODE)
Definition: prime_name.hpp:48
Represents top level AST node for whole NMODL input.
Definition: program.hpp:39
Single variable of type RANDOM.
Definition: random_var.hpp:38
Represents RANDOM statement in NMODL.
Represents RANGE variables statement in NMODL.
Definition: range.hpp:39
void accept(visitor::Visitor &v) override
accept (or visit) the current AST node using provided visitor
Definition: ast.cpp:6366
Represent solution of a block in the AST.
Represents a STATE block in the NMODL.
Definition: state_block.hpp:52
Represents block encapsulating list of statements.
Represents a string.
Definition: string.hpp:52
Represents SUFFIX statement in NMODL.
Definition: suffix.hpp:38
Represents TABLE statement in NMODL.
Represents THREADSAFE statement in NMODL.
Definition: thread_safe.hpp:38
void accept(visitor::Visitor &v) override
accept (or visit) the current AST node using provided visitor
Definition: ast.cpp:6307
Statement to indicate a change in timestep in a given block.
Definition: update_dt.hpp:38
Represents USEION statement in NMODL.
Definition: useion.hpp:40
Represents a variable.
Definition: var_name.hpp:43
Represents a C code block.
Definition: verbatim.hpp:38
Represent WATCH statement in NMODL.
Wrap any other expression type.
void visit_bbcore_pointer_var(const ast::BbcorePointerVar &node) override
visit node of type ast::BbcorePointerVar
void visit_define(const ast::Define &node) override
visit node of type ast::Define
void visit_expression(const ast::Expression &node) override
visit node of type ast::Expression
void visit_electrode_current(const ast::ElectrodeCurrent &node) override
visit node of type ast::ElectrodeCurrent
void visit_double(const ast::Double &node) override
visit node of type ast::Double
void visit_string(const ast::String &node) override
visit node of type ast::String
void visit_nonspecific(const ast::Nonspecific &node) override
visit node of type ast::Nonspecific
void visit_initial_block(const ast::InitialBlock &node) override
visit node of type ast::InitialBlock
void visit_protect_statement(const ast::ProtectStatement &node) override
visit node of type ast::ProtectStatement
void visit_random_var_list(const ast::RandomVarList &node) override
visit node of type ast::RandomVarList
void visit_read_ion_var(const ast::ReadIonVar &node) override
visit node of type ast::ReadIonVar
void visit_function_block(const ast::FunctionBlock &node) override
visit node of type ast::FunctionBlock
void visit_conserve(const ast::Conserve &node) override
visit node of type ast::Conserve
void visit_constant_statement(const ast::ConstantStatement &node) override
visit node of type ast::ConstantStatement
void visit_ba_block_type(const ast::BABlockType &node) override
visit node of type ast::BABlockType
void visit_while_statement(const ast::WhileStatement &node) override
visit node of type ast::WhileStatement
void visit_thread_safe(const ast::ThreadSafe &node) override
visit node of type ast::ThreadSafe
void visit_binary_operator(const ast::BinaryOperator &node) override
visit node of type ast::BinaryOperator
void visit_derivative_block(const ast::DerivativeBlock &node) override
visit node of type ast::DerivativeBlock
void visit_verbatim(const ast::Verbatim &node) override
visit node of type ast::Verbatim
void visit_eigen_newton_solver_block(const ast::EigenNewtonSolverBlock &node) override
visit node of type ast::EigenNewtonSolverBlock
void visit_random_var(const ast::RandomVar &node) override
visit node of type ast::RandomVar
void visit_mutex_unlock(const ast::MutexUnlock &node) override
visit node of type ast::MutexUnlock
void visit_unit_block(const ast::UnitBlock &node) override
visit node of type ast::UnitBlock
void visit_nonspecific_cur_var(const ast::NonspecificCurVar &node) override
visit node of type ast::NonspecificCurVar
void visit_conductance_hint(const ast::ConductanceHint &node) override
visit node of type ast::ConductanceHint
void visit_breakpoint_block(const ast::BreakpointBlock &node) override
visit node of type ast::BreakpointBlock
void visit_integer(const ast::Integer &node) override
visit node of type ast::Integer
void visit_ontology_statement(const ast::OntologyStatement &node) override
visit node of type ast::OntologyStatement
void visit_react_var_name(const ast::ReactVarName &node) override
visit node of type ast::ReactVarName
void visit_number(const ast::Number &node) override
visit node of type ast::Number
void visit_suffix(const ast::Suffix &node) override
visit node of type ast::Suffix
void visit_compartment(const ast::Compartment &node) override
visit node of type ast::Compartment
void visit_kinetic_block(const ast::KineticBlock &node) override
visit node of type ast::KineticBlock
void visit_indexed_name(const ast::IndexedName &node) override
visit node of type ast::IndexedName
void visit_identifier(const ast::Identifier &node) override
visit node of type ast::Identifier
void visit_paren_expression(const ast::ParenExpression &node) override
visit node of type ast::ParenExpression
void visit_before_block(const ast::BeforeBlock &node) override
visit node of type ast::BeforeBlock
void visit_watch_statement(const ast::WatchStatement &node) override
visit node of type ast::WatchStatement
void visit_bbcore_pointer(const ast::BbcorePointer &node) override
visit node of type ast::BbcorePointer
void visit_unit_state(const ast::UnitState &node) override
visit node of type ast::UnitState
void visit_after_block(const ast::AfterBlock &node) override
visit node of type ast::AfterBlock
void visit_write_ion_var(const ast::WriteIonVar &node) override
visit node of type ast::WriteIonVar
void visit_update_dt(const ast::UpdateDt &node) override
visit node of type ast::UpdateDt
void visit_lin_equation(const ast::LinEquation &node) override
visit node of type ast::LinEquation
void visit_argument(const ast::Argument &node) override
visit node of type ast::Argument
void visit_statement_block(const ast::StatementBlock &node) override
visit node of type ast::StatementBlock
void visit_factor_def(const ast::FactorDef &node) override
visit node of type ast::FactorDef
void visit_include(const ast::Include &node) override
visit node of type ast::Include
void visit_float(const ast::Float &node) override
visit node of type ast::Float
void visit_function_call(const ast::FunctionCall &node) override
visit node of type ast::FunctionCall
void visit_block(const ast::Block &node) override
visit node of type ast::Block
void visit_node(const ast::Node &node) override
visit node of type ast::Node
void visit_else_statement(const ast::ElseStatement &node) override
visit node of type ast::ElseStatement
void visit_program(const ast::Program &node) override
visit node of type ast::Program
void visit_external(const ast::External &node) override
visit node of type ast::External
void visit_unary_operator(const ast::UnaryOperator &node) override
visit node of type ast::UnaryOperator
void visit_var_name(const ast::VarName &node) override
visit node of type ast::VarName
void visit_for_netcon(const ast::ForNetcon &node) override
visit node of type ast::ForNetcon
void visit_constant_var(const ast::ConstantVar &node) override
visit node of type ast::ConstantVar
void visit_nrn_state_block(const ast::NrnStateBlock &node) override
visit node of type ast::NrnStateBlock
void visit_binary_expression(const ast::BinaryExpression &node) override
visit node of type ast::BinaryExpression
void visit_global_var(const ast::GlobalVar &node) override
visit node of type ast::GlobalVar
void visit_solve_block(const ast::SolveBlock &node) override
visit node of type ast::SolveBlock
void visit_eigen_linear_solver_block(const ast::EigenLinearSolverBlock &node) override
visit node of type ast::EigenLinearSolverBlock
void visit_lon_diffuse(const ast::LonDiffuse &node) override
visit node of type ast::LonDiffuse
void visit_pointer_var(const ast::PointerVar &node) override
visit node of type ast::PointerVar
void visit_solution_expression(const ast::SolutionExpression &node) override
visit node of type ast::SolutionExpression
void visit_global(const ast::Global &node) override
visit node of type ast::Global
void visit_unit_def(const ast::UnitDef &node) override
visit node of type ast::UnitDef
void visit_local_var(const ast::LocalVar &node) override
visit node of type ast::LocalVar
void visit_unit(const ast::Unit &node) override
visit node of type ast::Unit
void visit_if_statement(const ast::IfStatement &node) override
visit node of type ast::IfStatement
void visit_derivimplicit_callback(const ast::DerivimplicitCallback &node) override
visit node of type ast::DerivimplicitCallback
void visit_assigned_definition(const ast::AssignedDefinition &node) override
visit node of type ast::AssignedDefinition
void visit_name(const ast::Name &node) override
visit node of type ast::Name
void visit_block_comment(const ast::BlockComment &node) override
visit node of type ast::BlockComment
void visit_from_statement(const ast::FromStatement &node) override
visit node of type ast::FromStatement
void visit_range(const ast::Range &node) override
visit node of type ast::Range
void visit_ba_block(const ast::BABlock &node) override
visit node of type ast::BABlock
void visit_reaction_statement(const ast::ReactionStatement &node) override
visit node of type ast::ReactionStatement
void visit_neuron_block(const ast::NeuronBlock &node) override
visit node of type ast::NeuronBlock
void visit_local_list_statement(const ast::LocalListStatement &node) override
visit node of type ast::LocalListStatement
void visit_extern_var(const ast::ExternVar &node) override
visit node of type ast::ExternVar
void visit_range_var(const ast::RangeVar &node) override
visit node of type ast::RangeVar
void visit_prime_name(const ast::PrimeName &node) override
visit node of type ast::PrimeName
void visit_double_unit(const ast::DoubleUnit &node) override
visit node of type ast::DoubleUnit
void visit_useion(const ast::Useion &node) override
visit node of type ast::Useion
void visit_procedure_block(const ast::ProcedureBlock &node) override
visit node of type ast::ProcedureBlock
void visit_unary_expression(const ast::UnaryExpression &node) override
visit node of type ast::UnaryExpression
void visit_line_comment(const ast::LineComment &node) override
visit node of type ast::LineComment
void visit_non_linear_block(const ast::NonLinearBlock &node) override
visit node of type ast::NonLinearBlock
void visit_constant_block(const ast::ConstantBlock &node) override
visit node of type ast::ConstantBlock
void visit_linear_block(const ast::LinearBlock &node) override
visit node of type ast::LinearBlock
void visit_non_lin_equation(const ast::NonLinEquation &node) override
visit node of type ast::NonLinEquation
void visit_destructor_block(const ast::DestructorBlock &node) override
visit node of type ast::DestructorBlock
void visit_wrapped_expression(const ast::WrappedExpression &node) override
visit node of type ast::WrappedExpression
void visit_valence(const ast::Valence &node) override
visit node of type ast::Valence
void visit_watch(const ast::Watch &node) override
visit node of type ast::Watch
void visit_longitudinal_diffusion_block(const ast::LongitudinalDiffusionBlock &node) override
visit node of type ast::LongitudinalDiffusionBlock
void visit_param_block(const ast::ParamBlock &node) override
visit node of type ast::ParamBlock
void visit_cvode_block(const ast::CvodeBlock &node) override
visit node of type ast::CvodeBlock
void visit_number_range(const ast::NumberRange &node) override
visit node of type ast::NumberRange
void visit_function_table_block(const ast::FunctionTableBlock &node) override
visit node of type ast::FunctionTableBlock
void visit_net_receive_block(const ast::NetReceiveBlock &node) override
visit node of type ast::NetReceiveBlock
void visit_electrode_cur_var(const ast::ElectrodeCurVar &node) override
visit node of type ast::ElectrodeCurVar
void visit_diff_eq_expression(const ast::DiffEqExpression &node) override
visit node of type ast::DiffEqExpression
void visit_limits(const ast::Limits &node) override
visit node of type ast::Limits
void visit_else_if_statement(const ast::ElseIfStatement &node) override
visit node of type ast::ElseIfStatement
void visit_reaction_operator(const ast::ReactionOperator &node) override
visit node of type ast::ReactionOperator
void visit_statement(const ast::Statement &node) override
visit node of type ast::Statement
void visit_mutex_lock(const ast::MutexLock &node) override
visit node of type ast::MutexLock
void visit_assigned_block(const ast::AssignedBlock &node) override
visit node of type ast::AssignedBlock
void visit_model(const ast::Model &node) override
visit node of type ast::Model
void visit_independent_block(const ast::IndependentBlock &node) override
visit node of type ast::IndependentBlock
void visit_state_block(const ast::StateBlock &node) override
visit node of type ast::StateBlock
void visit_lag_statement(const ast::LagStatement &node) override
visit node of type ast::LagStatement
void visit_expression_statement(const ast::ExpressionStatement &node) override
visit node of type ast::ExpressionStatement
void visit_constructor_block(const ast::ConstructorBlock &node) override
visit node of type ast::ConstructorBlock
void visit_boolean(const ast::Boolean &node) override
visit node of type ast::Boolean
void visit_table_statement(const ast::TableStatement &node) override
visit node of type ast::TableStatement
void visit_pointer(const ast::Pointer &node) override
visit node of type ast::Pointer
void visit_discrete_block(const ast::DiscreteBlock &node) override
visit node of type ast::DiscreteBlock
void visit_param_assign(const ast::ParamAssign &node) override
visit node of type ast::ParamAssign
static double order(void *v)
Definition: cvodeobj.cpp:218
std::string to_string(const T &obj)
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
THIS FILE IS GENERATED AT BUILD TIME AND SHALL NOT BE EDITED.
static Node * node(Object *)
Definition: netcvode.cpp:291