@@ -29,12 +29,32 @@ Variable(name,args...;kwargs...) = Variable(name,args...;subtype=:Variable,kwarg
29
29
Parameter (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :Parameter ,kwargs... )
30
30
Constant (value:: Number ) = Variable (Symbol (value),value,typeof (value);subtype= :Constant )
31
31
Constant (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :Constant ,kwargs... )
32
- DependentVariable (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :DependentVariable ,kwargs... )
33
- StateVariable (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :StateVariable ,kwargs... )
34
- ControlVariable (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :ControlVariable ,kwargs... )
35
32
IndependentVariable (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :IndependentVariable ,kwargs... )
36
- JumpVariable (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :JumpVariable ,kwargs... )
37
- NoiseVariable (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :NoiseVariable ,kwargs... )
33
+
34
+ function DependentVariable (name,args... ;dependents = [],kwargs... )
35
+ @assert ! isempty (dependents)
36
+ Variable (name,args... ;subtype= :DependentVariable ,dependents= dependents,kwargs... )
37
+ end
38
+
39
+ function StateVariable (name,args... ;dependents = [],kwargs... )
40
+ @assert ! isempty (dependents)
41
+ Variable (name,args... ;subtype= :StateVariable ,dependents= dependents,kwargs... )
42
+ end
43
+
44
+ function ControlVariable (name,args... ;dependents = [],kwargs... )
45
+ @assert ! isempty (dependents)
46
+ Variable (name,args... ;subtype= :ControlVariable ,dependents= dependents,kwargs... )
47
+ end
48
+
49
+ function JumpVariable (name,args... ;dependents = [],kwargs... )
50
+ @assert ! isempty (dependents)
51
+ Variable (name,args... ;subtype= :JumpVariable ,dependents= dependents,kwargs... )
52
+ end
53
+
54
+ function NoiseVariable (name,args... ;dependents = [],kwargs... )
55
+ @assert ! isempty (dependents)
56
+ Variable (name,args... ;subtype= :NoiseVariable ,dependents= dependents,kwargs... )
57
+ end
38
58
39
59
export Variable,Parameter,Constant,DependentVariable,IndependentVariable,JumpVariable,NoiseVariable,
40
60
@Var , @DVar , @IVar , @Param , @Const
@@ -109,28 +129,35 @@ function _parse_vars(macroname, fun, x)
109
129
x = flatten_expr! (x)
110
130
for _var in x
111
131
iscall = typeof (_var) <: Expr && _var. head == :call
112
- @show iscall
113
- if iscall
114
- dependents = Variable[:($ (esc (d))) for d in _var. args[2 : end ]]
115
- var = _var. args[1 ]
116
- else
117
- dependents = Variable[]
118
- var = _var
119
- end
120
- issym = var isa Symbol
121
- isassign = issym ? false : var. head == :(= )
122
- @assert issym || isassign " @$macroname expects a tuple of expressions!\n E.g. `@$macroname x y z=1`"
123
- if issym
132
+ issym = _var isa Symbol
133
+ isassign = issym ? false : _var. head == :(= )
134
+ @assert iscall || issym || isassign " @$macroname expects a tuple of expressions!\n E.g. `@$macroname x y z=1`"
135
+ if iscall || issym
136
+ if iscall
137
+ dependents = :([$ (_var. args[2 : end ]. .. )])
138
+ var = _var. args[1 ]
139
+ else
140
+ dependents = Variable[]
141
+ var = _var
142
+ end
124
143
lhs = var
125
144
push! (lhss, lhs)
126
145
expr = :( $ lhs = $ fun ( Symbol ($ (String (lhs))) ,
127
146
dependents = $ dependents))
128
147
end
129
148
if isassign
130
- lhs = var. args[1 ]
131
- rhs = var. args[2 ]
149
+ iscall = typeof (_var. args[1 ]) <: Expr && _var. args[1 ]. head == :call
150
+ if iscall
151
+ dependents = :([$ (_var. args[1 ]. args[2 : end ]. .. )])
152
+ lhs = _var. args[1 ]. args[1 ]
153
+ else
154
+ dependents = Variable[]
155
+ lhs = _var. args[1 ]
156
+ end
157
+ rhs = _var. args[2 ]
132
158
push! (lhss, lhs)
133
- expr = :( $ lhs = $ fun ( Symbol ($ (String (lhs))) , $ rhs))
159
+ expr = :( $ lhs = $ fun ( Symbol ($ (String (lhs))) , $ rhs,
160
+ dependents = $ dependents))
134
161
end
135
162
push! (ex. args, expr)
136
163
end
0 commit comments