NEURON
consist.cpp
Go to the documentation of this file.
1
#include <../../nmodlconf.h>
2
3
/*
4
* Check that names do not have conflicting types. This is done after the
5
* entire file is read in and allows declaring a variable after its use (very
6
* bad style) to work in some circumstances.
7
*/
8
#include "
modl.h
"
9
#include "parse1.hpp"
10
#include "
symbol.h
"
11
12
extern
Symbol
*
scop_indep
;
13
extern
Symbol
*
indepsym
;
14
15
#define con(arg1, arg2, arg3) \
16
if (t & (arg2)) \
17
if (t & (~(arg2 | arg3))) { \
18
Fprintf(stderr, "%s is a %s\n"
, s->name, arg1); \
19
err = 1; \
20
}
21
22
void
consistency
() {
23
Symbol
* s;
24
Item
* qs;
25
int
i
, tu, err = 0;
26
long
t
;
27
28
29
/* the scop_indep can also be a automatic parameter */
30
if
(
scop_indep
!=
indepsym
&&
scop_indep
->subtype == (
PARM
|
INDEP
)) {
31
scop_indep
->subtype =
INDEP
;
32
}
33
34
SYMITER
(NAME) {
35
t
= s->
subtype
;
36
con
(
"KEYWORD"
,
KEYWORD
, 0);
37
con
(
"RESERVED WORD"
,
EXTDEF
|
EXTDEF2
|
EXTDEF3
|
EXTDEF4
|
EXTDEF5
, 0);
38
con
(
"CONSTANT"
,
nmodlCONST
, 0);
39
con
(
"PARAMETER"
,
PARM
,
ARRAY
);
40
con
(
"ASSIGNED"
,
DEP
,
ARRAY
);
41
con
(
"INDEPENDENT"
,
INDEP
, 0);
42
con
(
"STATE"
,
STAT
,
ARRAY
);
43
con
(
"FUNCTION"
,
FUNCT
, 0);
44
con
(
"PROCEDURE"
,
PROCED
, 0);
45
con
(
"DERIVATIVE"
,
DERF
, 0);
46
con
(
" KINETIC"
,
KINF
, 0);
47
con
(
"LINEAR"
,
LINF
, 0);
48
con
(
"NONLINEAR"
,
NLINF
, 0);
49
con
(
"DISCRETE"
,
DISCF
, 0);
50
con
(
"PARTIAL"
,
PARF
, 0);
51
con
(
"STEPPED"
,
STEP1
, 0);
52
con
(
"CONSTANT UNITS FACTOR"
,
UNITDEF
, 0);
53
tu = s->
usage
;
54
if
((tu &
DEP
) && (tu &
FUNCT
))
55
diag
(s->
name
,
" used as both variable and function"
);
56
if
((
t
== 0) && tu)
57
Fprintf
(stderr,
"Warning: %s undefined. (declared within VERBATIM?)\n"
, s->
name
);
58
}
59
if
(err) {
60
diag
(
"multiple uses for same variable"
, (
char
*) 0);
61
}
62
if
(
indepsym
==
SYM0
) {
63
diag
(
"Independent variable is not defined"
, (
char
*) 0);
64
}
65
/* avoid the problem where person inadvertently is using Dstate as a state*/
66
SYMITER
(NAME) {
67
if
((s->
subtype
&
STAT
) && (s->
name
[0] ==
'D'
)) {
68
Symbol
* s1 =
lookup
(s->
name
+ 1);
69
if
(s1 && s->
type
== NAME && (s->
subtype
&
STAT
)) {
70
fprintf
(stderr,
"%s is a STATE so %s is a %s' and"
, s1->
name
, s->
name
, s1->
name
);
71
diag
(
" cannot be declared as a STATE\n"
, (
char
*) 0);
72
}
73
}
74
}
75
}
t
double t
Definition:
cvodeobj.cpp:59
diag
#define diag(s)
Definition:
fmenu.cpp:192
EXTDEF4
#define EXTDEF4
Definition:
modl.h:214
EXTDEF5
#define EXTDEF5
Definition:
modl.h:215
PARM
#define PARM
Definition:
modl.h:190
EXTDEF2
#define EXTDEF2
Definition:
modl.h:210
nmodlCONST
#define nmodlCONST
Definition:
modl.h:211
EXTDEF3
#define EXTDEF3
Definition:
modl.h:212
UNITDEF
#define UNITDEF
Definition:
modl.h:209
i
#define i
Definition:
md1redef.h:12
DERF
#define DERF
Definition:
model.h:125
FUNCT
#define FUNCT
Definition:
model.h:119
SYM0
#define SYM0
Definition:
model.h:74
LINF
#define LINF
Definition:
model.h:126
STAT
#define STAT
Definition:
model.h:117
DISCF
#define DISCF
Definition:
model.h:128
INDEP
#define INDEP
Definition:
model.h:115
PARF
#define PARF
Definition:
model.h:130
STEP1
#define STEP1
Definition:
model.h:129
EXTDEF
#define EXTDEF
Definition:
model.h:131
KINF
#define KINF
Definition:
model.h:132
DEP
#define DEP
Definition:
model.h:116
KEYWORD
#define KEYWORD
Definition:
model.h:113
NLINF
#define NLINF
Definition:
model.h:127
ARRAY
#define ARRAY
Definition:
model.h:118
PROCED
#define PROCED
Definition:
model.h:120
Fprintf
#define Fprintf
Definition:
model.h:234
modl.h
NMODL parser global flags / functions.
scop_indep
Item ** scop_indep
Definition:
declare.cpp:12
consistency
void consistency()
Definition:
consist.cpp:22
SYMITER
#define SYMITER(arg1)
Definition:
symbol.h:13
fprintf
#define fprintf
Definition:
mwprefix.h:30
con
#define con(arg1, arg2, arg3)
Definition:
consist.cpp:15
indepsym
Symbol * indepsym
Definition:
declare.cpp:11
symbol.h
lookup
#define lookup
Definition:
redef.h:90
Item
Definition:
model.h:15
Symbol
Definition:
model.h:57
Symbol::usage
int usage
Definition:
model.h:66
Symbol::type
short type
Definition:
model.h:58
Symbol::subtype
long subtype
Definition:
model.h:59
Symbol::name
char * name
Definition:
model.h:72
src
nmodl
consist.cpp