anchor.diff:    }
   
     visitLogicalExpression(LogicalExpression node) {
  -    return new LogicalExpression(
  -        clone(node.left), node.operator, clone(node.right));
  +    return new LogicalExpression(clone(node.left), node.operator,
  +        clone(node.right), visitOptionalType(node.staticType));
     }
   
     visitConditionalExpression(ConditionalExpression node) {
  -    return new ConditionalExpression(
  -        clone(node.condition), clone(node.then), clone(node.otherwise));
  +    return new ConditionalExpression(clone(node.condition), clone(node.then),
  +        clone(node.otherwise), visitOptionalType(node.staticType));
     }
   
     visitStringConcatenation(StringConcatenation node) {
  
positive.code:   }
  
    visitPropertyGet(PropertyGet node) {
      return new PropertyGet(clone(node.receiver), node.name);
    }
  
    visitPropertySet(PropertySet node) {
      return new PropertySet(clone(node.receiver), node.name, clone(node.value));
    }
  
    visitDirectPropertyGet(DirectPropertyGet node) {
  
negative.code:   }
  
    visitMethodInvocation(MethodInvocation node) {
      return new MethodInvocation(clone(node.receiver), node.name,
          clone(node.arguments), node.interfaceTarget);
    }
  
    visitDirectMethodInvocation(DirectMethodInvocation node) {
  