anchor.diff:    /// Returns whether [value] is a string.
     bool isString(BoundValue value) {
       if (value is BoundExpression) {
  -      return analyzer.isString(value.expression, _analyzedClass);
  +      return analyzer.isString(value.expression, analyzedClass);
       } else if (value is BoundI18nMessage) {
         return true;
       }
  
positive.code: 
  /// An abstract utility for converting bound values to output expressions.
  abstract class BoundValueConverter {
    final analyzer.AnalyzedClass _analyzedClass;
  
    BoundValueConverter(this._analyzedClass);
  
    /// Creates a bound value converter for a directive change detector.
    ///
  
negative.code:   factory BoundValueConverter.forView(
      CompileView view,
      o.Expression implicitReceiver,
    ) = _ViewBoundValueConverter;
  
    /// Converts a bound [value] to an expression.
    ///
    /// The [sourceSpan] of [value] is used for reporting errors that may occur
    /// during expression conversion.
    ///
    /// The [type] is the type of the property to which [value] is bound.
    o.Expression convertToExpression(
      BoundValue value,
      SourceSpan sourceSpan,
      o.OutputType type,
    ) {
      if (value is BoundExpression) {
        final expression =
            analyzer.rewriteInterpolate(value.expression, analyzedClass);
        return convertCdExpressionToIr(
          _nameResolver,
          _implicitReceiver,
          expression,
          sourceSpan,
          _metadata,
          type,
        );
      } else if (value is BoundI18nMessage) {
        return _createI18nMessage(value.message);
      }
      _throwUnrecognized(value);
    }
  
    o.Expression _createI18nMessage(I18nMessage message);
  
    analyzer.AnalyzedClass get analyzedClass => _metadata.analyzedClass;
  
    /// Returns whether [value] can change during its lifetime.
    bool isImmutable(BoundValue value) {
      if (value is BoundExpression) {
        return analyzer.isImmutable(value.expression, analyzedClass);
      } else if (value is BoundI18nMessage) {
        return true;
      }
  