11mutable struct Variable <: Expression
22 name:: Symbol
3- value
43 value_type:: DataType
54 subtype:: Symbol
65 diff:: Union{Function,Nothing} # FIXME
@@ -13,20 +12,19 @@ mutable struct Variable <: Expression
1312end
1413
1514Variable (name,
16- value = nothing ,
17- value_type = typeof (value);
15+ value_type = Any;
1816 subtype:: Symbol = :Variable ,
1917 dependents:: Vector{Variable} = Variable[],
2018 flow:: Bool = false ,
2119 description:: String = " " ,
2220 domain = Reals (),
2321 size = nothing ,
2422 context = nothing ) =
25- Variable (name,value, value_type,subtype,nothing ,
23+ Variable (name,value_type,subtype,nothing ,
2624 dependents,description,flow,domain,size,context)
2725Variable (name,args... ;kwargs... ) = Variable (name,args... ;subtype= :Variable ,kwargs... )
2826
29- Variable (name,x:: Variable ) = Variable (name,x. value,x . value_type,
27+ Variable (name,x:: Variable ) = Variable (name,x. value_type,
3028 x. subtype,D,x. dependents,x. description,x. flow,x. domain,
3129 x. size,x. context)
3230
@@ -73,8 +71,8 @@ Base.isone(ex::Expression) = isa(ex, Constant) && isone(ex.value)
7371
7472
7573# Variables use isequal for equality since == is an Operation
76- function Base.:(== )(x:: Variable ,y:: Variable )
77- x. name == y. name && x. subtype == y. subtype && x . value == y . value &&
74+ function Base.:(== )(x:: Variable , y:: Variable )
75+ x. name == y. name && x. subtype == y. subtype &&
7876 x. value_type == y. value_type && x. diff == y. diff
7977end
8078Base.:(== )(:: Variable , :: Number ) = false
@@ -142,45 +140,29 @@ function _parse_vars(macroname, fun, x)
142140 # begin
143141 # x
144142 # y
145- # z = exp(2)
143+ # z
146144 # end
147145 x = flatten_expr! (x)
148146 for _var in x
149147 iscall = typeof (_var) <: Expr && _var. head == :call
150148 issym = _var isa Symbol
151- isassign = issym ? false : _var. head == :(= )
152- @assert iscall || issym || isassign " @$macroname expects a tuple of expressions!\n E.g. `@$macroname x y z=1`"
153- if iscall || issym
154- if iscall
155- dependents = :([$ (_var. args[2 : end ]. .. )])
156- var = _var. args[1 ]
157- else
158- dependents = Variable[]
159- var = _var
160- end
161- lhs = var
162- push! (lhss, lhs)
163- expr = :( $ lhs = $ fun ( Symbol ($ (String (lhs))) ,
164- dependents = $ dependents))
165- end
166- if isassign
167- iscall = typeof (_var. args[1 ]) <: Expr && _var. args[1 ]. head == :call
168- if iscall
169- dependents = :([$ (_var. args[1 ]. args[2 : end ]. .. )])
170- lhs = _var. args[1 ]. args[1 ]
171- else
172- dependents = Variable[]
173- lhs = _var. args[1 ]
174- end
175- rhs = _var. args[2 ]
176- push! (lhss, lhs)
177- expr = :( $ lhs = $ fun ( Symbol ($ (String (lhs))) , $ rhs,
178- dependents = $ dependents))
149+ @assert iscall || issym " @$macroname expects a tuple of expressions!\n E.g. `@$macroname x y z`"
150+
151+ if iscall
152+ dependents = :([$ (_var. args[2 : end ]. .. )])
153+ lhs = _var. args[1 ]
154+ else
155+ dependents = Variable[]
156+ lhs = _var
179157 end
158+
159+ push! (lhss, lhs)
160+ expr = :( $ lhs = $ fun ( Symbol ($ (String (lhs))) ,
161+ dependents = $ dependents))
180162 push! (ex. args, expr)
181163 end
182- push! (ex. args, Expr (:tuple , lhss... ))
183- ex
164+ push! (ex. args, build_expr (:tuple , lhss))
165+ return ex
184166end
185167
186168for funs in ((:DVar , :DependentVariable ), (:IVar , :IndependentVariable ),
0 commit comments