11struct Model{F, S}
22 f:: F
33 structure:: S
4+ isconnector:: Bool
45end
56(m:: Model )(args... ; kw... ) = m. f (args... ; kw... )
67
@@ -54,11 +55,27 @@ function connector_macro(mod, name, body)
5455 var"#___sys___" = $ ODESystem ($ (Equation[]), $ iv, [$ (vs... )], $ ([]);
5556 name, gui_metadata = $ gui_metadata)
5657 $ Setfield. @set! (var"#___sys___" . connector_type= $ connector_type (var"#___sys___" ))
57- end , $ dict)
58+ end , $ dict, true )
5859 end
5960end
6061
6162function parse_variable_def! (dict, mod, arg, varclass, kwargs, def = nothing )
63+ metatypes = [(:connection_type , VariableConnectType),
64+ (:description , VariableDescription),
65+ (:unit , VariableUnit),
66+ (:bounds , VariableBounds),
67+ (:noise , VariableNoiseType),
68+ (:input , VariableInput),
69+ (:output , VariableOutput),
70+ (:irreducible , VariableIrreducible),
71+ (:state_priority , VariableStatePriority),
72+ (:misc , VariableMisc),
73+ (:disturbance , VariableDisturbance),
74+ (:tunable , VariableTunable),
75+ (:dist , VariableDistribution),
76+ (:binary , VariableBinary),
77+ (:integer , VariableInteger)]
78+
6279 arg isa LineNumberNode && return
6380 MLStyle. @match arg begin
6481 a:: Symbol => begin
@@ -78,9 +95,12 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, def = nothing)
7895 def, meta = parse_default (mod, b)
7996 var, _ = parse_variable_def! (dict, mod, a, varclass, kwargs, def)
8097 dict[varclass][getname (var)][:default ] = def
81- if ! isnothing (meta)
82- if (ct = get (meta, VariableConnectType, nothing )) != = nothing
83- dict[varclass][getname (var)][:connection_type ] = nameof (ct)
98+ if meta != = nothing
99+ for (type, key) in metatypes
100+ if (mt = get (meta, key, nothing )) != = nothing
101+ key == VariableConnectType && (mt = nameof (mt))
102+ dict[varclass][getname (var)][type] = mt
103+ end
84104 end
85105 var = set_var_metadata (var, meta)
86106 end
@@ -89,8 +109,14 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, def = nothing)
89109 Expr (:tuple , a, b) => begin
90110 var, def = parse_variable_def! (dict, mod, a, varclass, kwargs)
91111 meta = parse_metadata (mod, b)
92- if (ct = get (meta, VariableConnectType, nothing )) != = nothing
93- dict[varclass][getname (var)][:connection_type ] = nameof (ct)
112+ if meta != = nothing
113+ for (type, key) in metatypes
114+ if (mt = get (meta, key, nothing )) != = nothing
115+ key == VariableConnectType && (mt = nameof (mt))
116+ dict[varclass][getname (var)][type] = mt
117+ end
118+ end
119+ var = set_var_metadata (var, meta)
94120 end
95121 (set_var_metadata (var, meta), def)
96122 end
@@ -213,7 +239,7 @@ function mtkmodel_macro(mod, name, expr)
213239 push! (exprs. args, :($ extend ($ sys, $ (ext[]))))
214240 end
215241
216- :($ name = $ Model ((; name, $ (kwargs... )) -> $ exprs, $ dict))
242+ :($ name = $ Model ((; name, $ (kwargs... )) -> $ exprs, $ dict, false ))
217243end
218244
219245function parse_model! (exprs, comps, ext, eqs, icon, vs, ps, dict,
@@ -240,13 +266,13 @@ end
240266function parse_components! (exprs, cs, dict, body, kwargs)
241267 expr = Expr (:block )
242268 push! (exprs, expr)
243- comps = Vector{String }[]
269+ comps = Vector{Symbol }[]
244270 for arg in body. args
245271 arg isa LineNumberNode && continue
246272 MLStyle. @match arg begin
247273 Expr (:(= ), a, b) => begin
248274 push! (cs, a)
249- push! (comps, [String (a), String ( b. args[1 ]) ])
275+ push! (comps, [a, b. args[1 ]])
250276 arg = deepcopy (arg)
251277 b = deepcopy (arg. args[2 ])
252278
0 commit comments