1
1
struct Model{F, S}
2
2
f:: F
3
3
structure:: S
4
+ isconnector:: Bool
4
5
end
5
6
(m:: Model )(args... ; kw... ) = m. f (args... ; kw... )
6
7
@@ -54,11 +55,27 @@ function connector_macro(mod, name, body)
54
55
var"#___sys___" = $ ODESystem ($ (Equation[]), $ iv, [$ (vs... )], $ ([]);
55
56
name, gui_metadata = $ gui_metadata)
56
57
$ Setfield. @set! (var"#___sys___" . connector_type= $ connector_type (var"#___sys___" ))
57
- end , $ dict)
58
+ end , $ dict, true )
58
59
end
59
60
end
60
61
61
62
function 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
+
62
79
arg isa LineNumberNode && return
63
80
MLStyle. @match arg begin
64
81
a:: Symbol => begin
@@ -78,9 +95,12 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, def = nothing)
78
95
def, meta = parse_default (mod, b)
79
96
var, _ = parse_variable_def! (dict, mod, a, varclass, kwargs, def)
80
97
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
84
104
end
85
105
var = set_var_metadata (var, meta)
86
106
end
@@ -89,8 +109,14 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, def = nothing)
89
109
Expr (:tuple , a, b) => begin
90
110
var, def = parse_variable_def! (dict, mod, a, varclass, kwargs)
91
111
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)
94
120
end
95
121
(set_var_metadata (var, meta), def)
96
122
end
@@ -213,7 +239,7 @@ function mtkmodel_macro(mod, name, expr)
213
239
push! (exprs. args, :($ extend ($ sys, $ (ext[]))))
214
240
end
215
241
216
- :($ name = $ Model ((; name, $ (kwargs... )) -> $ exprs, $ dict))
242
+ :($ name = $ Model ((; name, $ (kwargs... )) -> $ exprs, $ dict, false ))
217
243
end
218
244
219
245
function parse_model! (exprs, comps, ext, eqs, icon, vs, ps, dict,
@@ -240,13 +266,13 @@ end
240
266
function parse_components! (exprs, cs, dict, body, kwargs)
241
267
expr = Expr (:block )
242
268
push! (exprs, expr)
243
- comps = Vector{String }[]
269
+ comps = Vector{Symbol }[]
244
270
for arg in body. args
245
271
arg isa LineNumberNode && continue
246
272
MLStyle. @match arg begin
247
273
Expr (:(= ), a, b) => begin
248
274
push! (cs, a)
249
- push! (comps, [String (a), String ( b. args[1 ]) ])
275
+ push! (comps, [a, b. args[1 ]])
250
276
arg = deepcopy (arg)
251
277
b = deepcopy (arg. args[2 ])
252
278
0 commit comments