anchor.diff:  
     visitAsExpression(AsExpression node) {
       final Constant constant = _evaluateSubexpression(node.operand);
  -    if (hasUnevaluatedChild(node)) {
  +    if (shouldBeUnevaluated) {
         return unevaluated(node, new AsExpression(extract(constant), node.type));
       }
       return ensureIsSubtype(constant, evaluateDartType(node, node.type), node);
  
positive.code:   /// cloning further instances.
    Expression extract(Constant constant) {
      Expression expression = constant.asExpression();
      replacementNodes ??= new Set<Expression>.identity();
      if (!replacementNodes.add(expression)) {
        expression = cloner.clone(expression);
        replacementNodes.add(expression);
  
negative.code:       return _evaluateSubexpression(node.then);
      } else if (condition == falseConstant) {
        return _evaluateSubexpression(node.otherwise);
      } else if (shouldBeUnevaluated) {
        enterLazy();
        Constant then = _evaluateSubexpression(node.then);
        Constant otherwise = _evaluateSubexpression(node.otherwise);
  