anchor.diff:        //
         //     { E.foo = x; bar(x) } ==> bar(E.foo = x)
         //
  -      if (getRightHandVariable(binding) == node.variable) {
  +      if (isRhsPropagationAllowed &&
  +          getRightHandVariable(binding) == node.variable) {
           environment.removeLast();
           --node.variable.readCount;
           return visitExpression(binding);
  
positive.code:   /// one dominating assignment, because the reaching definition of the used
    /// variable might have changed since it was put in the environment.
    final Map<Variable, int> dominatingAssignments = <Variable, int>{};
  
    /// Rewriter for methods.
    StatementRewriter() : constantEnvironment = <Variable, Expression>{};
  
    /// Rewriter for nested functions.
    StatementRewriter.nested(StatementRewriter parent)
        : constantEnvironment = parent.constantEnvironment,
          unseenUses = parent.unseenUses;
  
    /// A set of labels that can be safely inlined at their use.
    ///
  
negative.code:   }
  
    Expression visitAssign(Assign node) {
      allowRhsPropagation.add(true);
      node.value = visitExpression(node.value);
      allowRhsPropagation.removeLast();
      // Remove assignments to variables without any uses. This can happen
      // because the assignment was propagated into its use, e.g:
      //
  