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) if (t & (arg2)) if (t & (~(arg2 | arg3))) {\
16
Fprintf(stderr, "%s is a %s\n",\
17
s->name, arg1);\
18
err=1;\
19
}
20
21
void
consistency
()
22
{
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,
58
"Warning: %s undefined. (declared within VERBATIM?)\n"
, s->
name
);
59
}
60
if
(err) {
61
diag
(
"multiple uses for same variable"
, (
char
*) 0);
62
}
63
if
(indepsym ==
SYM0
) {
64
diag
(
"Independent variable is not defined"
, (
char
*)0);
65
}
66
/* avoid the problem where person inadvertently is using Dstate as a state*/
67
SYMITER
(NAME) {
68
if
((s->
subtype
&
STAT
) && (s->
name
[0] ==
'D'
)) {
69
Symbol
* s1 =
lookup
(s->
name
+ 1);
70
if
(s1 && s->
type
== NAME && (s->
subtype
&
STAT
)) {
71
fprintf
(stderr,
"%s is a STATE so %s is a %s' and"
, s1->
name
, s->
name
, s1->
name
);
72
diag
(
" cannot be declared as a STATE\n"
, (
char
*)0);
73
}
74
}
75
}
76
}
PARM
#define PARM
Definition:
modl.h:190
symbol.h
KINF
#define KINF
Definition:
model.h:132
con
#define con(arg1, arg2, arg3)
Definition:
consist.cpp:15
DERF
#define DERF
Definition:
model.h:125
scop_indep
Item ** scop_indep
Definition:
declare.cpp:12
Symbol::usage
int usage
Definition:
model.h:66
PROCED
#define PROCED
Definition:
model.h:120
Symbol::type
short type
Definition:
model.h:58
diag
#define diag(s)
Definition:
fmenu.cpp:188
DEP
#define DEP
Definition:
model.h:116
Symbol::name
char * name
Definition:
model.h:72
Fprintf
#define Fprintf
Definition:
model.h:249
EXTDEF4
#define EXTDEF4
Definition:
modl.h:214
UNITDEF
#define UNITDEF
Definition:
modl.h:209
Item
Definition:
model.h:15
EXTDEF5
#define EXTDEF5
Definition:
modl.h:215
s
_CONST char * s
Definition:
system.cpp:74
ARRAY
#define ARRAY
Definition:
model.h:118
DISCF
#define DISCF
Definition:
model.h:128
PARF
#define PARF
Definition:
model.h:130
KEYWORD
#define KEYWORD
Definition:
model.h:113
fprintf
fprintf(stderr, "Don't know the location of params at %p\, pp)
Symbol
Definition:
model.h:57
indepsym
Symbol * indepsym
Definition:
declare.cpp:11
NLINF
#define NLINF
Definition:
model.h:127
FUNCT
#define FUNCT
Definition:
model.h:119
EXTDEF
#define EXTDEF
Definition:
model.h:131
modl.h
NMODL parser global flags / functions.
lookup
#define lookup
Definition:
redef.h:90
Symbol::subtype
long subtype
Definition:
model.h:59
EXTDEF2
#define EXTDEF2
Definition:
modl.h:210
LINF
#define LINF
Definition:
model.h:126
i
#define i
Definition:
md1redef.h:12
STAT
#define STAT
Definition:
model.h:117
STEP1
#define STEP1
Definition:
model.h:129
SYM0
#define SYM0
Definition:
model.h:74
EXTDEF3
#define EXTDEF3
Definition:
modl.h:212
t
double t
Definition:
init.cpp:123
INDEP
#define INDEP
Definition:
model.h:115
nmodlCONST
#define nmodlCONST
Definition:
modl.h:211
consistency
void consistency()
Definition:
consist.cpp:21
SYMITER
#define SYMITER(arg1)
Definition:
symbol.h:9
src
nmodl
consist.cpp