anchor.diff:      return token;
     }
   
  +  /// This method parses a list or map literal that is known to start with the
  +  /// keyword 'const'.
  +  ///
  +  /// listLiteral:
  +  ///   'const'? typeArguments? '[' (expressionList ','?)? ']'
  +  /// ;
  +  ///
  +  /// mapLiteral:
  +  ///   'const'? typeArguments? '{' (mapLiteralEntry (',' mapLiteralEntry)* ','?)? '}'
  +  /// ;
  +  ///
  +  /// mapLiteralEntry:
  +  ///   expression ':' expression
  +  /// ;
     Token parseConstExpression(Token token) {
  +    assert(optional('const', token));
       Token constKeyword = token;
  -    token = expect('const', token);
  -    token = listener.injectGenericCommentTypeList(token);
  +    token = listener.injectGenericCommentTypeList(token.next);
       final String value = token.stringValue;
       if ((identical(value, '[')) || (identical(value, '[]'))) {
         listener.beginConstLiteral(token);
  
positive.code:     return token;
    }
  
    Token parseLiteralBool(Token token) {
      listener.handleLiteralBool(token);
      return token.next;
    }
  
    Token parseLiteralNull(Token token) {
      listener.handleLiteralNull(token);
      return token.next;
    }
  
negative.code:     }
    }
  
    /// arguments:
    ///   '(' (argumentList ','?)? ')'
    /// ;
    ///
    /// argumentList:
    ///   namedArgument (',' namedArgument)* |
    ///   expressionList (',' namedArgument)*
    /// ;
    ///
    /// namedArgument:
    ///   label expression
    /// ;
    Token parseArguments(Token token) {
      assert(optional('(', token));
      Token begin = token;
      listener.beginArguments(begin);
      int argumentCount = 0;
  