anchor.diff:    /// needed by type inference.
     bool _serializeClosureBodyExprs = false;
   
  -  /// If a closure function body is being serialized, the set of closure
  -  /// parameter names which are currently in scope.  Otherwise `null`.
  -  Set<String> _parameterNames;
  +  /// The set of variable names which are currently in scope.
  +  List<String> _variableNames = [];
   
     /// Indicates whether parameters found during visitors might inherit
     /// covariance.
  
positive.code:   /// Serialize the given [expression], creating an [UnlinkedExprBuilder].
    UnlinkedExprBuilder serializeConstExpr(
        bool forConst, Map<int, int> localClosureIndexMap, Expression expression,
        [Set<String> parameterNames]) {
      _ConstExprSerializer serializer = new _ConstExprSerializer(
          forConst, this, localClosureIndexMap, parameterNames);
      serializer.serialize(expression);
      return serializer.toBuilder(expression.beginToken, expression.endToken);
    }
  
negative.code:   /// siblings.
    final Map<int, int> localClosureIndexMap;
  
    /// The names of local variables and parameters that are in scope.
    /// This is a list so that we can handle nesting by pushing and popping values
    /// at the end of it.
    final List<String> variableNames;
  
    _ConstExprSerializer(bool forConst, this.visitor, this.localClosureIndexMap,
        List<String> variableNames)
        : variableNames = variableNames ?? [],
          super(forConst);
  
    @override
    bool isParameterName(String name) {
      return variableNames?.contains(name) ?? false;
    }
  
    @override
  