@@ -3,12 +3,12 @@ export Variable, Unknown, Parameter, @Unknown, @Param
33
44struct Variable <: Expression
55 name:: Symbol
6- subtype :: Symbol
6+ known :: Bool
77 dependents:: Vector{Variable}
88end
99
10- Parameter (name; dependents = Variable[]) = Variable (name, :Parameter , dependents)
11- Unknown (name; dependents = Variable[]) = Variable (name, :Unknown , dependents)
10+ Parameter (name, dependents = Variable[]) = Variable (name, true , dependents)
11+ Unknown (name, dependents = Variable[]) = Variable (name, false , dependents)
1212
1313
1414struct Constant <: Expression
@@ -22,7 +22,7 @@ Base.isone(ex::Expression) = isa(ex, Constant) && isone(ex.value)
2222
2323
2424# Variables use isequal for equality since == is an Operation
25- Base.:(== )(x:: Variable , y:: Variable ) = (x. name, x. subtype ) == (y. name, y. subtype )
25+ Base.:(== )(x:: Variable , y:: Variable ) = (x. name, x. known ) == (y. name, y. known )
2626Base.:(== )(:: Variable , :: Number ) = false
2727Base.:(== )(:: Number , :: Variable ) = false
2828Base.:(== )(:: Variable , :: Constant ) = false
@@ -32,13 +32,18 @@ Base.:(==)(n::Number, c::Constant) = c.value == n
3232Base.:(== )(a:: Constant , b:: Constant ) = a. value == b. value
3333
3434function Base. convert (:: Type{Expr} , x:: Variable )
35- x. subtype === :Parameter || return x. name
36- isempty (x. dependents) && return x. name
35+ x. known || return x. name
36+ isempty (x. dependents) && return x. name
3737 return :($ (x. name)($ (convert .(Expr, x. dependents)... )))
3838end
3939Base. convert (:: Type{Expr} , c:: Constant ) = c. value
4040
41- Base. show (io:: IO , x:: Variable ) = print (io, x. subtype, ' (' , x. name, ' )' )
41+ function Base. show (io:: IO , x:: Variable )
42+ subtype = x. known ? :Parameter : :Unknown
43+ print (io, subtype, ' (' , repr (x. name))
44+ isempty (x. dependents) || print (io, " , " , x. dependents)
45+ print (io, ' )' )
46+ end
4247
4348# Build variables more easily
4449function _parse_vars (macroname, fun, x)
@@ -65,7 +70,7 @@ function _parse_vars(macroname, fun, x)
6570 end
6671
6772 push! (var_names, var_name)
68- expr = :($ var_name = $ fun ($ (Meta. quot (var_name)), dependents = $ dependents))
73+ expr = :($ var_name = $ fun ($ (Meta. quot (var_name)), $ dependents))
6974 push! (ex. args, expr)
7075 end
7176 push! (ex. args, build_expr (:tuple , var_names))
0 commit comments