@@ -187,7 +187,7 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
187
187
var = generate_var! (dict, a, varclass; indices, type)
188
188
update_kwargs_and_metadata! (dict, kwargs, a, def, indices, type, var,
189
189
varclass, where_types)
190
- ( var, def)
190
+ return var, def, Dict ( )
191
191
end
192
192
Expr (:(:: ), a, type) => begin
193
193
type = getfield (mod, type)
@@ -202,12 +202,12 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
202
202
var = generate_var! (dict, a, b, varclass, mod; indices, type)
203
203
update_kwargs_and_metadata! (dict, kwargs, a, def, indices, type, var,
204
204
varclass, where_types)
205
- ( var, def)
205
+ return var, def, Dict ( )
206
206
end
207
207
Expr (:(= ), a, b) => begin
208
208
Base. remove_linenums! (b)
209
209
def, meta = parse_default (mod, b)
210
- var, def = parse_variable_def! (
210
+ var, def, _ = parse_variable_def! (
211
211
dict, mod, a, varclass, kwargs, where_types; def, type)
212
212
if dict[varclass] isa Vector
213
213
dict[varclass][1 ][getname (var)][:default ] = def
@@ -225,12 +225,13 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
225
225
end
226
226
end
227
227
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
229
230
end
230
- ( var, def)
231
+ return var, def, Dict ( )
231
232
end
232
233
Expr (:tuple , a, b) => begin
233
- var, def = parse_variable_def! (
234
+ var, def, _ = parse_variable_def! (
234
235
dict, mod, a, varclass, kwargs, where_types; type)
235
236
meta = parse_metadata (mod, b)
236
237
if meta != = nothing
@@ -244,9 +245,10 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, where_types;
244
245
end
245
246
end
246
247
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
248
250
end
249
- ( var, def)
251
+ return var, def, Dict ( )
250
252
end
251
253
Expr (:ref , a, b... ) => begin
252
254
indices = map (i -> UnitRange (i. args[2 ], i. args[end ]), b)
@@ -350,21 +352,33 @@ function parse_metadata(mod, a)
350
352
end
351
353
end
352
354
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
+
353
363
function set_var_metadata (a, ms)
364
+ metadata_with_exprs = Dict {DataType, Expr} ()
354
365
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)
356
372
end
357
- a
373
+ a, metadata_with_exprs
358
374
end
359
375
360
376
function get_var (mod:: Module , b)
361
377
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)
367
380
end
381
+ b
368
382
end
369
383
370
384
function 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_
595
609
end
596
610
597
611
function 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)
599
614
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
602
632
end
603
633
604
634
function handle_conditional_vars! (
0 commit comments