anchor.diff:        if (getRightHand(binding) == node.variable) {
           environment.removeLast();
           --node.variable.readCount;
  -        --seenUses[node.variable];
           return visitExpression(binding);
         }
       }
  
positive.code:   /// for a break to L' if L maps to L'.
    Map<Label, Jump> labelRedirects = <Label, Jump>{};
  
    /// Number of uses seen so far. Used to detect the first use of a variable
    /// (since we do backwards traversal, the first use is the last one seen).
    Map<Variable, int> seenUses = <Variable, int>{};
  
    /// Rewriter for methods.
    StatementRewriter({this.isDartMode})
  
negative.code: 
    @override
    Expression visitVariableUse(VariableUse node) {
      // Count of number of unseen uses remaining.
      unseenUses.putIfAbsent(node.variable, () => node.variable.readCount);
      --unseenUses[node.variable];
  
      // We traverse the tree right-to-left, so when we have seen all uses,
      // it means we are looking at the first use.
      assert(unseenUses[node.variable] < node.variable.readCount);
      assert(unseenUses[node.variable] >= 0);
      bool isFirstUse = unseenUses[node.variable] == 0;
  
      // Propagate constant to use site.
      Expression constant = constantEnvironment[node.variable];
      if (constant != null) {
        --node.variable.readCount;
        return visitExpression(constant);
      }
  
  