anchor.diff:    final Map<TypeParameter, DartType> _typeVariables =
         <TypeParameter, DartType>{};
   
  -  /// The values of the parameters/variables in scope.
  -  final Map<VariableDeclaration, Constant> _variables =
  -      <VariableDeclaration, Constant>{};
  +  /// The references to values of the parameters/variables in scope.
  +  final Map<VariableDeclaration, EvaluationReference> _variables =
  +      <VariableDeclaration, EvaluationReference>{};
   
     /// The variables that hold unevaluated constants.
     ///
  
positive.code:             // TODO(johnniwinther): This should call [_evaluateSubexpression].
              : _evaluateNullableSubexpression(parameter.initializer);
          if (value is AbortConstant) return value;
          env.addVariableValue(parameter, value);
        }
        for (final VariableDeclaration parameter in function.namedParameters) {
          final Constant value = namedArguments[parameter.name] ??
              // TODO(johnniwinther): This should call [_evaluateSubexpression].
              _evaluateNullableSubexpression(parameter.initializer);
          if (value is AbortConstant) return value;
          env.addVariableValue(parameter, value);
        }
  
        // Step 2) Run all initializers (including super calls) with environment
  
negative.code:           final VariableDeclaration variable = init.variable;
            Constant constant = _evaluateSubexpression(variable.initializer);
            if (constant is AbortConstant) return constant;
            env.updateVariableValue(variable, constant);
          } else if (init is SuperInitializer) {
            AbortConstant error = checkConstructorConst(init, constructor);
            if (error != null) return error;
  