From 7ed3b26b02e740993bbfaa06da641d19dafc4af3 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Sat, 10 Oct 2020 19:12:17 -0700 Subject: [PATCH] skip assignment in dfs() to avoid PatternLockedError on unmodified patterns --- masque/pattern.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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