anchor.diff:  
     _OperatorName(this.operatorKeyword, this.name);
   }
  +
  +/// Data structure placed on the stack to represent a non-empty sequence
  +/// of modifiers.
  +class _Modifiers {
  +  Token abstractKeyword;
  +  Token externalKeyword;
  +  Token finalConstOrVarKeyword;
  +  Token staticKeyword;
  +
  +  _Modifiers(List<Token> modifierTokens) {
  +    // No need to check the order and uniqueness of the modifiers, or that
  +    // disallowed modifiers are not used; the parser should do that.
  +    // TODO(paulberry,ahe): implement the necessary logic in the parser.
  +    for (var token in modifierTokens) {
  +      var s = token.value;
  +      if (identical('abstract', s)) {
  +        abstractKeyword = token;
  +      } else if (identical('const', s)) {
  +        finalConstOrVarKeyword = token;
  +      } else if (identical('external', s)) {
  +        externalKeyword = token;
  +      } else if (identical('final', s)) {
  +        finalConstOrVarKeyword = token;
  +      } else if (identical('static', s)) {
  +        staticKeyword = token;
  +      } else if (identical('var', s)) {
  +        finalConstOrVarKeyword = token;
  +      } else {
  +        internalError('Unhandled modifier: $s');
  +      }
  +    }
  +  }
  +}
  
positive.code:     analyzer.Token equals = toAnalyzerToken(equalsToken);
      TypeParameterList typeParameters = pop();
      SimpleIdentifier name = pop();
      Token abstractKeyword = _popOptionalSingleModifier();
      List<Annotation> metadata = pop();
      // TODO(paulberry): capture doc comments.  See dartbug.com/28851.
      Comment comment = null;
  
negative.code:     debugEvent("OperatorName");
      push(new _OperatorName(operatorKeyword,
          ast.simpleIdentifier(toAnalyzerToken(token), isDeclaration: true)));
    }
  
    ParameterKind _toAnalyzerParameterKind(FormalParameterType type) {
  