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:       return constant == trueConstant ? falseConstant : trueConstant;
      }
      if (hasUnevaluatedChild(node)) {
        return unevaluated(node, new Not(unique(constant.asExpression())));
      }
      return report(
          node,
  
negative.code:     if (hasUnevaluatedChild(node)) {
        return unevaluated(
            node,
            new MethodInvocation(extract(receiver), node.name,
                unevaluatedArguments(arguments, {}, node.arguments.types)));
      }
  
  