anchor.diff:      _recordDataForNode('YieldStatement (expression)', node.expression,
           allowedKeywords: expressionKeywords);
       super.visitYieldStatement(node);
  +  }
  +
  +  /// Return the context in which the [node] occurs. The [node] is expected to
  +  /// be the parent of the argument expression.
  +  String _argumentListContext(AstNode node) {
  +    if (node is ArgumentList) {
  +      var parent = node.parent;
  +      if (parent is InstanceCreationExpression) {
  +        return 'constructor';
  +      } else if (parent is MethodInvocation) {
  +        return 'method';
  +      } else if (parent is FunctionExpressionInvocation) {
  +        return 'function';
  +      } else if (parent is SuperConstructorInvocation ||
  +          parent is RedirectingConstructorInvocation) {
  +        return 'constructor redirect';
  +      } else if (parent is Annotation) {
  +        return 'annotation';
  +      }
  +    } else if (node is IndexExpression) {
  +      return 'index';
  +    } else if (node is AssignmentExpression ||
  +        node is BinaryExpression ||
  +        node is PrefixExpression ||
  +        node is PostfixExpression) {
  +      return 'binary/unary';
  +    }
  +    return 'unknown';
     }
   
     /// Return the depth of the given [element]. For example:
  
positive.code:     if (parameterType == null || parameterType.isDynamic) {
        return;
      }
      var argumentType = argument.staticType;
      if (argumentType != null) {
        _recordTypeRelationships('argument (whole)', parameterType, argumentType);
      }
      var identifier = _leftMostIdentifier(argument);
      if (identifier != null) {
  
negative.code:       }
        if (firstTokenType != null) {
          _recordTypeRelationships(
              'argument (all, first token)', parameterType, firstTokenType);
          _recordTypeRelationships(
              'argument ($context, first token)', parameterType, firstTokenType);
        }
      }
    }
  