anchor.diff:    @override
     ng.TemplateAst visitInterpolation(ast.InterpolationAst astNode,
         [_ParseContext context]) {
  -    var element = context.templateContext.parser
  -        .parseInterpolation('{{${astNode.value}}}', _location(astNode), []);
  +    var element = context.templateContext.parser.parseInterpolation(
  +        '{{${astNode.value}}}',
  +        _location(astNode),
  +        context.templateContext.exports);
       return new ng.BoundTextAst(element,
           context.findNgContentIndex(TEXT_CSS_SELECTOR), astNode.sourceSpan);
     }
  
positive.code:     var values = parsedAst
          .map((asNode) => asNode.accept(new _InlineTemplateDesugar()))
          .toList();
      // TODO(alorenzen): Remove once all tests are passing.
      values.forEach(print);
      return values;
    }
  
  
negative.code: /// These providers are provided by the bound directives on the element or by
  /// parent elements.
  class _ProviderVisitor
      implements ng.TemplateAstVisitor<ng.TemplateAst, ProviderElementContext> {
    final ProviderViewContext _rootContext;
  
    _ProviderVisitor(this._rootContext);
  
    @override
    ng.ElementAst visitElement(
        ng.ElementAst ast, ProviderElementContext context) {
      var elementContext = new ProviderElementContext(_rootContext, context,
          false, ast.directives, ast.attrs, ast.references, ast.sourceSpan);
      var children = <ng.TemplateAst>[];
      for (var child in ast.children) {
        children.add(child.visit(this, elementContext));
      }
      elementContext.afterElement();
      return new ng.ElementAst(
          ast.name,
          ast.attrs,
          ast.inputs,
          ast.outputs,
          ast.references,
          elementContext.transformedDirectiveAsts,
          elementContext.transformProviders,
          elementContext,
          children,
          ast.ngContentIndex,
          ast.sourceSpan);
    }
  
    @override
    ng.EmbeddedTemplateAst visitEmbeddedTemplate(
        ng.EmbeddedTemplateAst ast, ProviderElementContext context) {
      var elementContext = new ProviderElementContext(_rootContext, context, true,
          ast.directives, ast.attrs, ast.references, ast.sourceSpan);
      var children = <ng.TemplateAst>[];
      for (var child in ast.children) {
        children.add(child.visit(this, elementContext));
      }
      elementContext.afterElement();
      ast.providers.addAll(elementContext.transformProviders);
      return new ng.EmbeddedTemplateAst(
          ast.attrs,
          ast.outputs,
          ast.references,
          ast.variables,
          elementContext.transformedDirectiveAsts,
          elementContext.transformProviders,
          elementContext,
          children,
          ast.ngContentIndex,
          ast.sourceSpan);
    }
  
    @override
    visitAttr(ng.AttrAst ast, ProviderElementContext context) => ast;
  
    @override
    visitBoundText(ng.BoundTextAst ast, ProviderElementContext context) => ast;
  
    @override
    visitDirective(ng.DirectiveAst ast, ProviderElementContext context) => ast;
  
    @override
    visitDirectiveProperty(
            ng.BoundDirectivePropertyAst ast, ProviderElementContext context) =>
        ast;
  
    @override
    visitElementProperty(
            ng.BoundElementPropertyAst ast, ProviderElementContext context) =>
        ast;
  
    @override
    visitEvent(ng.BoundEventAst ast, ProviderElementContext context) => ast;
  
    @override
    visitNgContent(ng.NgContentAst ast, ProviderElementContext context) => ast;
  
    @override
    visitReference(ng.ReferenceAst ast, ProviderElementContext context) => ast;
  
    @override
    visitText(ng.TextAst ast, ProviderElementContext context) => ast;
  
    @override
    visitVariable(ng.VariableAst ast, ProviderElementContext context) => ast;
  }
  
  /// Visitor which extracts inline templates.
  