anchor.diff:      }
     }
   
  +  Constant unevaluated(Expression expression) {
  +    return new UnevaluatedConstant(expression);
  +  }
  +
     /// Evaluates [node] and possibly cache the evaluation result.
     /// @throws _AbortCurrentEvaluation if expression can't be evaluated.
     Constant _evaluateSubexpression(Expression node) {
  
positive.code:           // TODO(askesc): Give more meaningful error message if name is null.
          } else {
            // Leave environment constant unevaluated.
            return new UnevaluatedConstant(new StaticInvocation(
                target, unevaluatedArguments(arguments),
                isConst: true));
          }
        }
  
negative.code:     return named;
    }
  
    Arguments unevaluatedArguments(List<Constant> positionalArgs,
        Map<String, Constant> namedArgs, List<DartType> types) {
      final positional = new List<Expression>(positionalArgs.length);
      final named = new List<NamedExpression>(namedArgs.length);
      for (int i = 0; i < positionalArgs.length; ++i) {
        positional[i] = positionalArgs[i].asExpression();
      }
      int i = 0;
      namedArgs.forEach((String name, Constant value) {
        named[i++] = new NamedExpression(name, value.asExpression());
      });
      return new Arguments(positional, named: named, types: types);
    }
  
    Constant canonicalize(Constant constant) {
  