diff --git a/masque/pattern.py b/masque/pattern.py index 2393a6f..31a331c 100644 --- a/masque/pattern.py +++ b/masque/pattern.py @@ -291,11 +291,14 @@ class Pattern(LockableImpl, AnnotatableImpl, metaclass=AutoSlots): sp_transform = False if subpattern.pattern is not None: - subpattern.pattern = subpattern.pattern.dfs(visit_before=visit_before, - visit_after=visit_after, - transform=sp_transform, - memo=memo, - hierarchy=hierarchy + (self,)) + result = subpattern.pattern.dfs(visit_before=visit_before, + visit_after=visit_after, + transform=sp_transform, + memo=memo, + hierarchy=hierarchy + (self,)) + if result is not subpattern.pattern: + # skip assignment to avoid PatternLockedError unless modified + subpattern.pattern = result if visit_after is not None: pat = visit_after(pat, hierarchy=hierarchy, memo=memo, transform=transform) # type: ignore