1.1 --- a/optimiser.py Sun Oct 16 00:39:20 2016 +0200
1.2 +++ b/optimiser.py Sun Oct 16 16:53:03 2016 +0200
1.3 @@ -377,20 +377,26 @@
1.4 if context == "base":
1.5 accessor = context_var = (base,)
1.6 elif context == "original-accessor":
1.7 +
1.8 + # Prevent re-evaluation of any dynamic expression by storing it.
1.9 +
1.10 if original_accessor == "<expr>":
1.11 emit(("set_accessor", original_accessor))
1.12 accessor = context_var = ("accessor",)
1.13 else:
1.14 - accessor = context_var = original_accessor
1.15 + accessor = context_var = (original_accessor,)
1.16
1.17 # Assigning does not set the context.
1.18
1.19 elif context in ("final-accessor", "unset") and access_first_attribute:
1.20 +
1.21 + # Prevent re-evaluation of any dynamic expression by storing it.
1.22 +
1.23 if original_accessor == "<expr>":
1.24 emit(("set_accessor", original_accessor))
1.25 accessor = ("accessor",)
1.26 else:
1.27 - accessor = original_accessor
1.28 + accessor = (original_accessor,)
1.29
1.30 # Apply any test.
1.31
1.32 @@ -459,7 +465,8 @@
1.33 # Set the context, if appropriate.
1.34
1.35 if remaining == 1 and final_method != "assign" and context == "final-accessor":
1.36 - context_var = accessor
1.37 + emit(("set_context", accessor))
1.38 + accessor = context_var = "context"
1.39
1.40 # Perform the access only if not achieved directly.
1.41
1.42 @@ -485,7 +492,8 @@
1.43 # Set the context, if appropriate.
1.44
1.45 if remaining == 1 and final_method != "assign" and context == "final-accessor":
1.46 - context_var = accessor
1.47 + emit(("set_context", accessor))
1.48 + accessor = context_var = "context"
1.49
1.50 # Perform the access only if not achieved directly.
1.51