anchor.diff:        leaveLazy();
         return unevaluated(
             node,
  -          new ConditionalExpression(
  -              unique(condition.asExpression()),
  -              unique(then.asExpression()),
  -              unique(otherwise.asExpression()),
  -              node.staticType));
  +          new ConditionalExpression(extract(condition), extract(then),
  +              extract(otherwise), node.staticType));
       } else {
         return report(
             node,
  
positive.code:     if (hasUnevaluatedChild(node)) {
        final mapEntries = new List<MapEntry>(node.entries.length);
        for (int i = 0; i < node.entries.length; ++i) {
          mapEntries[i] = new MapEntry(unique(entries[i].key.asExpression()),
              unique(entries[i].value.asExpression()));
        }
        return unevaluated(
            node,
  
negative.code:     final Constant constant = _evaluateSubexpression(node.expression);
      if (hasUnevaluatedChild(node)) {
        return unevaluated(
            node, new Instantiation(extract(constant), node.typeArguments));
      }
      if (constant is TearOffConstant) {
        if (node.typeArguments.length ==
  