anchor.diff:    static const TagType changeDelimiter = const TagType('changeDelimiter');
   }
   
  -const _tagTypeMap = const {
  -        '#': TagType.openSection,
  -        '^': TagType.openInverseSection,
  -        '/': TagType.closeSection,
  -        '&': TagType.unescapedVariable,
  -        '>': TagType.partial,
  -        '!': TagType.comment};
  -
  -TagType tagTypeFromString(String s) { 
  -  var type = _tagTypeMap[s];
  -  if (type == null) throw new Exception('Unreachable code.');
  -  return type;
  -}
   
   class Parser {
     
  
positive.code:       list.add(t);
      }
      return list;
    }
    
    // Add a text node to top most section on the stack and merge consecutive
  
negative.code:     return t;
    }
    
    //TODO fail on eof unless setting passed.
    //TODO use a sync* generator once landed in Dart 1.10.
    Iterable<Token> _readWhile(bool predicate(Token t)) {
      var list = <Token>[];
  