@@ -187,7 +187,7 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
187187 var = generate_var! (dict, a, varclass; indices, type)
188188 update_kwargs_and_metadata! (dict, kwargs, a, def, indices, type, var,
189189 varclass, where_types)
190- ( var, def)
190+ return var, def, Dict ( )
191191 end
192192 Expr (:(:: ), a, type) => begin
193193 type = getfield (mod, type)
@@ -202,12 +202,12 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
202202 var = generate_var! (dict, a, b, varclass, mod; indices, type)
203203 update_kwargs_and_metadata! (dict, kwargs, a, def, indices, type, var,
204204 varclass, where_types)
205- ( var, def)
205+ return var, def, Dict ( )
206206 end
207207 Expr (:(= ), a, b) => begin
208208 Base. remove_linenums! (b)
209209 def, meta = parse_default (mod, b)
210- var, def = parse_variable_def! (
210+ var, def, _ = parse_variable_def! (
211211 dict, mod, a, varclass, kwargs, where_types; def, type)
212212 if dict[varclass] isa Vector
213213 dict[varclass][1 ][getname (var)][:default ] = def
@@ -225,12 +225,13 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
225225 end
226226 end
227227 end
228- var = set_var_metadata (var, meta)
228+ var, metadata_with_exprs = set_var_metadata (var, meta)
229+ return var, def, metadata_with_exprs
229230 end
230- ( var, def)
231+ return var, def, Dict ( )
231232 end
232233 Expr (:tuple , a, b) => begin
233- var, def = parse_variable_def! (
234+ var, def, _ = parse_variable_def! (
234235 dict, mod, a, varclass, kwargs, where_types; type)
235236 meta = parse_metadata (mod, b)
236237 if meta != = nothing
@@ -244,9 +245,10 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
244245 end
245246 end
246247 end
247- var = set_var_metadata (var, meta)
248+ var, metadata_with_exprs = set_var_metadata (var, meta)
249+ return var, def, metadata_with_exprs
248250 end
249- ( var, def)
251+ return var, def, Dict ( )
250252 end
251253 Expr (:ref , a, b... ) => begin
252254 indices = map (i -> UnitRange (i. args[2 ], i. args[end ]), b)
@@ -350,21 +352,33 @@ function parse_metadata(mod, a)
350352 end
351353end
352354
355+ function _set_var_metadata! (metadata_with_exprs, a, m, v:: Expr )
356+ push! (metadata_with_exprs, m => v)
357+ a
358+ end
359+ function _set_var_metadata! (metadata_with_exprs, a, m, v)
360+ wrap (set_scalar_metadata (unwrap (a), m, v))
361+ end
362+
353363function set_var_metadata (a, ms)
364+ metadata_with_exprs = Dict {DataType, Expr} ()
354365 for (m, v) in ms
355- a = wrap (set_scalar_metadata (unwrap (a), m, v))
366+ if m == VariableGuess && v isa Symbol
367+ v = quote
368+ $ v
369+ end
370+ end
371+ a = _set_var_metadata! (metadata_with_exprs, a, m, v)
356372 end
357- a
373+ a, metadata_with_exprs
358374end
359375
360376function get_var (mod:: Module , b)
361377 if b isa Symbol
362- getproperty (mod, b)
363- elseif b isa Expr
364- Core. eval (mod, b)
365- else
366- b
378+ isdefined (mod, b) && return getproperty (mod, b)
379+ isdefined (@__MODULE__ , b) && return getproperty (@__MODULE__ , b)
367380 end
381+ b
368382end
369383
370384function parse_model! (exprs, comps, ext, eqs, icon, vs, ps, sps, c_evts, d_evts,
@@ -595,10 +609,26 @@ function parse_variable_arg!(exprs, vs, dict, mod, arg, varclass, kwargs, where_
595609end
596610
597611function parse_variable_arg (dict, mod, arg, varclass, kwargs, where_types)
598- vv, def = parse_variable_def! (dict, mod, arg, varclass, kwargs, where_types)
612+ vv, def, metadata_with_exprs = parse_variable_def! (
613+ dict, mod, arg, varclass, kwargs, where_types)
599614 name = getname (vv)
600- return vv isa Num ? name : :($ name... ),
601- :($ name = $ name === nothing ? $ setdefault ($ vv, $ def) : $ setdefault ($ vv, $ name))
615+
616+ varexpr = quote
617+ $ name = if $ name === nothing
618+ $ setdefault ($ vv, $ def)
619+ else
620+ $ setdefault ($ vv, $ name)
621+ end
622+ end
623+
624+ metadata_expr = Expr (:block )
625+ for (k, v) in metadata_with_exprs
626+ push! (metadata_expr. args,
627+ :($ name = $ wrap ($ set_scalar_metadata ($ unwrap ($ name), $ k, $ v))))
628+ end
629+
630+ push! (varexpr. args, metadata_expr)
631+ return vv isa Num ? name : :($ name... ), varexpr
602632end
603633
604634function handle_conditional_vars! (
0 commit comments