@@ -206,7 +206,7 @@ function Base.propertynames(sys::AbstractSystem; private=false)
206
206
end
207
207
end
208
208
209
- function Base. getproperty (sys:: AbstractSystem , name:: Symbol )
209
+ function Base. getproperty (sys:: AbstractSystem , name:: Symbol ; namespace = true )
210
210
sysname = nameof (sys)
211
211
systems = get_systems (sys)
212
212
if isdefined (sys, name)
@@ -215,30 +215,30 @@ function Base.getproperty(sys::AbstractSystem, name::Symbol)
215
215
elseif ! isempty (systems)
216
216
i = findfirst (x-> nameof (x)== name,systems)
217
217
if i != = nothing
218
- return rename (systems[i],renamespace (sysname,name))
218
+ return namespace ? rename (systems[i],renamespace (sysname,name)) : systems[i]
219
219
end
220
220
end
221
221
222
222
sts = get_states (sys)
223
223
i = findfirst (x-> getname (x) == name, sts)
224
224
225
225
if i != = nothing
226
- return rename (sts[i],renamespace (sysname,name))
226
+ return namespace ? rename (sts[i],renamespace (sysname,name)) : sts[i]
227
227
end
228
228
229
229
if has_ps (sys)
230
230
ps = get_ps (sys)
231
231
i = findfirst (x-> getname (x) == name,ps)
232
232
if i != = nothing
233
- return rename (ps[i],renamespace (sysname,name))
233
+ return namespace ? rename (ps[i],renamespace (sysname,name)) : ps[i]
234
234
end
235
235
end
236
236
237
237
if has_observed (sys)
238
238
obs = get_observed (sys)
239
239
i = findfirst (x-> getname (x. lhs)== name,obs)
240
240
if i != = nothing
241
- return rename (obs[i]. lhs,renamespace (sysname,name))
241
+ return namespace ? rename (obs[i]. lhs,renamespace (sysname,name)) : obs[i]
242
242
end
243
243
end
244
244
@@ -490,10 +490,35 @@ function _named(expr)
490
490
:($ name = $ call)
491
491
end
492
492
493
+ """
494
+ $(SIGNATURES)
495
+
496
+ Rewrite `@named y = foo(x)` to `y = foo(x; name=:y)`.
497
+ """
493
498
macro named (expr)
494
499
esc (_named (expr))
495
500
end
496
501
502
+ function _nonamespace (expr)
503
+ if Meta. isexpr (expr, :.)
504
+ return :($ getproperty ($ (map (_nonamespace, expr. args)... ); namespace= false ))
505
+ elseif expr isa Expr && ! isempty (expr. args)
506
+ return Expr (expr. head, map (_nonamespace, expr. args)... )
507
+ else
508
+ expr
509
+ end
510
+ end
511
+
512
+ """
513
+ $(SIGNATURES)
514
+
515
+ Rewrite `@nonamespace a.b.c` to
516
+ `getproperty(getproperty(a, :b; namespace = false), :c; namespace = false)`.
517
+ """
518
+ macro nonamespace (expr)
519
+ esc (_nonamespace (expr))
520
+ end
521
+
497
522
"""
498
523
$(SIGNATURES)
499
524
0 commit comments