anchor.diff:      if (left is UnevaluatedConstant) {
         return unevaluated(
             node,
  -          new LogicalExpression(
  -              unique(left.expression), node.operator, node.right));
  +          new LogicalExpression(unique(left.expression), node.operator,
  +              cloner.clone(node.right)));
       }
       switch (node.operator) {
         case '||':
  
positive.code:     } else if (condition is UnevaluatedConstant) {
        return unevaluated(
            node,
            new ConditionalExpression(unique(condition.expression), node.then,
                node.otherwise, node.staticType));
      } else {
        throw new _AbortCurrentEvaluation(errorReporter.invalidDartType(
            contextChain, node, condition, typeEnvironment.boolType));
  
negative.code:         if (target.isConst) {
            if (target.isInExternalLibrary && target.initializer == null) {
              // The variable is unavailable due to separate compilation.
              return unevaluated(node, new StaticGet(target));
            }
            return runInsideContext(target, () {
              return _evaluateSubexpression(target.initializer);
  