1.1 --- a/optimiser.py Sat Dec 10 17:35:58 2016 +0100
1.2 +++ b/optimiser.py Sat Dec 10 18:52:54 2016 +0100
1.3 @@ -375,6 +375,8 @@
1.4 # Determine whether the first access involves assignment.
1.5
1.6 assigning = not traversed and not attrnames and final_method == "assign"
1.7 + set_accessor = assigning and "__set_target_accessor" or "__set_accessor"
1.8 + stored_accessor = assigning and "<target_accessor>" or "<accessor>"
1.9
1.10 # Set the context if already available.
1.11
1.12 @@ -385,8 +387,8 @@
1.13 # Prevent re-evaluation of any dynamic expression by storing it.
1.14
1.15 if original_accessor == "<expr>":
1.16 - emit(("__set_accessor", original_accessor))
1.17 - accessor = context_var = ("<accessor>",)
1.18 + emit((set_accessor, original_accessor))
1.19 + accessor = context_var = (stored_accessor,)
1.20 else:
1.21 accessor = context_var = (original_accessor,)
1.22
1.23 @@ -397,8 +399,8 @@
1.24 # Prevent re-evaluation of any dynamic expression by storing it.
1.25
1.26 if original_accessor == "<expr>":
1.27 - emit(("__set_accessor", original_accessor))
1.28 - accessor = ("<accessor>",)
1.29 + emit((set_accessor, original_accessor))
1.30 + accessor = (stored_accessor,)
1.31 else:
1.32 accessor = (original_accessor,)
1.33