# HG changeset patch # User Paul Boddie # Date 1476629583 -7200 # Node ID d2ec435eb18f6bd21d737f510ec4ac7ca0aeb282 # Parent 83b8f4d485234c5216cdb1607fdadbe28c4b5373 Store the accessor and context for possible subsequent multiple referencing. diff -r 83b8f4d48523 -r d2ec435eb18f optimiser.py --- a/optimiser.py Sun Oct 16 00:39:20 2016 +0200 +++ b/optimiser.py Sun Oct 16 16:53:03 2016 +0200 @@ -377,20 +377,26 @@ if context == "base": accessor = context_var = (base,) elif context == "original-accessor": + + # Prevent re-evaluation of any dynamic expression by storing it. + if original_accessor == "": emit(("set_accessor", original_accessor)) accessor = context_var = ("accessor",) else: - accessor = context_var = original_accessor + accessor = context_var = (original_accessor,) # Assigning does not set the context. elif context in ("final-accessor", "unset") and access_first_attribute: + + # Prevent re-evaluation of any dynamic expression by storing it. + if original_accessor == "": emit(("set_accessor", original_accessor)) accessor = ("accessor",) else: - accessor = original_accessor + accessor = (original_accessor,) # Apply any test. @@ -459,7 +465,8 @@ # Set the context, if appropriate. if remaining == 1 and final_method != "assign" and context == "final-accessor": - context_var = accessor + emit(("set_context", accessor)) + accessor = context_var = "context" # Perform the access only if not achieved directly. @@ -485,7 +492,8 @@ # Set the context, if appropriate. if remaining == 1 and final_method != "assign" and context == "final-accessor": - context_var = accessor + emit(("set_context", accessor)) + accessor = context_var = "context" # Perform the access only if not achieved directly.