@@ -357,30 +357,53 @@ function Base.setproperty!(sys::AbstractSystem, prop::Symbol, val)
357
357
end
358
358
end
359
359
360
+ function apply_to_variables (f:: F , ex) where {F}
361
+ if isvariable (ex)
362
+ return f (ex)
363
+ end
364
+ istree (ex) || return ex
365
+ similarterm (ex, apply_to_variables (operation (ex)),
366
+ map (apply_to_variables, arguments (ex)),
367
+ metadata = metadata (ex))
368
+ end
369
+
360
370
abstract type SymScope end
361
371
362
372
struct LocalScope <: SymScope end
363
- LocalScope (sym:: Union{Num, Symbolic} ) = setmetadata (sym, SymScope, LocalScope ())
373
+ function LocalScope (sym:: Union{Num, Symbolic} )
374
+ apply_to_variables (sym) do sym
375
+ setmetadata (sym, SymScope, LocalScope ())
376
+ end
377
+ end
364
378
365
379
struct ParentScope <: SymScope
366
380
parent:: SymScope
367
381
end
368
382
function ParentScope (sym:: Union{Num, Symbolic} )
369
- setmetadata (sym, SymScope, ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
383
+ apply_to_variables (sym) do sym
384
+ setmetadata (sym, SymScope,
385
+ ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
386
+ end
370
387
end
371
388
372
389
struct DelayParentScope <: SymScope
373
390
parent:: SymScope
374
391
N:: Int
375
392
end
376
393
function DelayParentScope (sym:: Union{Num, Symbolic} , N)
377
- setmetadata (sym, SymScope,
378
- DelayParentScope (getmetadata (value (sym), SymScope, LocalScope ()), N))
394
+ apply_to_variables (sym) do sym
395
+ setmetadata (sym, SymScope,
396
+ DelayParentScope (getmetadata (value (sym), SymScope, LocalScope ()), N))
397
+ end
379
398
end
380
399
DelayParentScope (sym:: Union{Num, Symbolic} ) = DelayParentScope (sym, 1 )
381
400
382
401
struct GlobalScope <: SymScope end
383
- GlobalScope (sym:: Union{Num, Symbolic} ) = setmetadata (sym, SymScope, GlobalScope ())
402
+ function GlobalScope (sym:: Union{Num, Symbolic} )
403
+ apply_to_variables (sym) do sym
404
+ setmetadata (sym, SymScope, GlobalScope ())
405
+ end
406
+ end
384
407
385
408
renamespace (sys, eq:: Equation ) = namespace_equation (eq, sys)
386
409
@@ -996,7 +1019,15 @@ end
996
1019
997
1020
function default_to_parentscope (v)
998
1021
uv = unwrap (v)
999
- uv isa Symbolic && ! hasmetadata (uv, SymScope) ? ParentScope (v) : v
1022
+ uv isa Symbolic || return v
1023
+ apply_to_variables (v) do sym
1024
+ if ! hasmetadata (uv, SymScope)
1025
+ setmetadata (sym, SymScope,
1026
+ ParentScope (getmetadata (value (sym), SymScope, LocalScope ())))
1027
+ else
1028
+ sym
1029
+ end
1030
+ end
1000
1031
end
1001
1032
1002
1033
function _config (expr, namespace)
0 commit comments