anchor.diff:    visitAsExpression(AsExpression node) {
       final Constant constant = _evaluateSubexpression(node.operand);
       if (hasUnevaluatedChild(node)) {
  -      return unevaluated(
  -          node, new AsExpression(unique(constant.asExpression()), node.type));
  +      return unevaluated(node, new AsExpression(extract(constant), node.type));
       }
       ensureIsSubtype(constant, evaluateDartType(node, node.type), node);
       return constant;
  
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:       enterLazy();
        Constant right = _evaluateSubexpression(node.right);
        leaveLazy();
        return unevaluated(node,
            new LogicalExpression(extract(left), node.operator, extract(right)));
      }
      switch (node.operator) {
        case '||':
  