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)) {
        return unevaluated(
            node,
            new MethodInvocation(unique(receiver.asExpression()), node.name,
                unevaluatedArguments(arguments, {}, node.arguments.types)));
      }
  
  
negative.code:       enterLazy();
        Constant right = _evaluateSubexpression(node.right);
        leaveLazy();
        return unevaluated(node,
            new LogicalExpression(extract(left), node.operator, extract(right)));
      }
      switch (node.operator) {
        case '||':
  