anchor.diff:          parseExpressions: false);
       // TODO(alorenzen): Remove once all tests are passing.
       parsedAst.forEach(print);
  -    final filter = new ElementFilter();
  +    final filter = new _ElementFilter();
       final filteredAst = filter.visitAll(parsedAst);
  -    final visitor = new Visitor(parser, schemaRegistry);
  -    final context = new ParseContext(directives: directives);
  +    final visitor = new _Visitor();
  +    final context = new _ParseContext.forRoot(new _TemplateContext(
  +        parser: parser,
  +        schemaRegistry: schemaRegistry,
  +        directives: directives));
       return filteredAst
           .map((templateAst) => templateAst.accept(visitor, context))
           .toList();
     }
   }
   
  -class Visitor implements ast.TemplateAstVisitor<ng.TemplateAst, ParseContext> {
  -  final Parser parser;
  -  final ElementSchemaRegistry schemaRegistry;
  -
  +class _Visitor
  +    implements ast.TemplateAstVisitor<ng.TemplateAst, _ParseContext> {
     /// A count of how many <ng-content> elements have been seen so far.
     ///
     /// This is necessary so that we can assign a unique index to each one as we
     /// visit it.
     int ngContentIndex = 0;
   
  -  Visitor(this.parser, this.schemaRegistry);
  -
  -  @override
  -  ng.TemplateAst visitElement(ast.ElementAst astNode, [ParseContext context]) {
  -    final elementContext = new ParseContext.forElement(astNode, context);
  +  @override
  +  ng.TemplateAst visitElement(ast.ElementAst astNode, [_ParseContext context]) {
  +    final elementContext =
  +        new _ParseContext.forElement(astNode, context.templateContext);
       return new ng.ElementAst(
           astNode.name,
           _visitAll(astNode.attributes, elementContext),
  
positive.code:   }
  
    @override
    ng.TemplateAst visitLetBinding(ast.LetBindingAst astNode, [ParseContext _]) =>
        new ng.VariableAst(astNode.name, astNode.value, astNode.sourceSpan);
  
    @override
    ng.TemplateAst visitReference(ast.ReferenceAst astNode, [ParseContext _]) =>
        new ng.ReferenceAst(
            astNode.variable, null /* value */, astNode.sourceSpan);
  
    @override
    ng.TemplateAst visitText(ast.TextAst astNode, [ParseContext _]) =>
        new ng.TextAst(astNode.value, 0 /* ngContentIndex */, astNode.sourceSpan);
  
    @override
    ng.TemplateAst visitInterpolation(ast.InterpolationAst astNode,
        [ParseContext _]) {
      var element = parser
          .parseInterpolation('{{${astNode.value}}}', _location(astNode), []);
      return new ng.BoundTextAst(
          element, 0 /* ngContentIndex */, astNode.sourceSpan);
    }
  
    @override
    ng.TemplateAst visitBanana(ast.BananaAst astNode, [ParseContext _]) =>
        throw new UnimplementedError('Don\'t know how to handle bananas');
  
    @override
    ng.TemplateAst visitCloseElement(ast.CloseElementAst astNode,
            [ParseContext _]) =>
        throw new UnimplementedError('Don\'t know how to handle close elements');
  
    @override
    ng.TemplateAst visitComment(ast.CommentAst astNode, [ParseContext _]) =>
        throw new UnimplementedError('Don\'t know how to handle comments.');
  
    @override
    ng.TemplateAst visitExpression(ast.ExpressionAst astNode, [ParseContext _]) =>
        throw new UnimplementedError('Don\'t know how to handle expressions.');
  
    @override
    ng.TemplateAst visitStar(ast.StarAst astNode, [ParseContext _]) =>
        throw new UnimplementedError('Don\'t know how to handle stars.');
  
    List<T> _visitAll<T extends ng.TemplateAst>(
        List<ast.TemplateAst> astNodes, ParseContext context) {
      final results = <T>[];
      for (final astNode in astNodes) {
        results.add(astNode.accept(this, context) as T);
  
negative.code: 
    @override
    ng.TemplateAst visitEmbeddedTemplate(ast.EmbeddedTemplateAst astNode,
        [_ParseContext context]) {
      final embeddedContext =
          new _ParseContext.forTemplate(astNode, context.templateContext);
      return new ng.EmbeddedTemplateAst(
          _visitAll(astNode.attributes, embeddedContext),
          _visitAll(astNode.events, embeddedContext),
  