Skip to content

Commit 7ec630d

Browse files
feat: invalidate cache in @set!
1 parent fffc983 commit 7ec630d

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/systems/abstractsystem.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,18 @@ function invalidate_cache!(sys::AbstractSystem)
811811
return sys
812812
end
813813

814+
# `::MetadataT` but that is defined later
815+
function refreshed_metadata(meta::Base.ImmutableDict)
816+
newmeta = MetadataT()
817+
for (k, v) in meta
818+
if k === MutableCacheKey
819+
v = MutableCacheT()
820+
end
821+
newmeta = Base.ImmutableDict(newmeta, k => v)
822+
end
823+
return newmeta
824+
end
825+
814826
function Setfield.get(obj::AbstractSystem, ::Setfield.PropertyLens{field}) where {field}
815827
getfield(obj, field)
816828
end
@@ -819,6 +831,8 @@ end
819831
args = map(fieldnames(obj)) do fn
820832
if fn in fieldnames(patch)
821833
:(patch.$fn)
834+
elseif fn == :metadata
835+
:($refreshed_metadata(getfield(obj, $(Meta.quot(fn)))))
822836
else
823837
:(getfield(obj, $(Meta.quot(fn))))
824838
end

0 commit comments

Comments
 (0)