Program: 82995
Project: 82995
Buggy source:
@Override public void parse(IParserManager pm,IToken token){
  int type=token.type();
  if (type == BaseSymbols.CLOSE_CURLY_BRACKET) {
    if (this.firstToken != null) {
      pm.jump(this.firstToken);
      this.reset();
      pm.pushParser(pm.newExpressionParser(this));
      this.mode=0;
      return;
    }
    this.consumer.setValue(this.statementList);
    pm.popParser();
    return;
  }
switch (this.mode) {
case OPEN_BRACKET:
    this.mode=EXPRESSION;
  this.statementList=this.applied ? new Closure(token) : new StatementList(token);
if (type != BaseSymbols.OPEN_CURLY_BRACKET) {
  pm.report(token,"String_Node_Str");
  pm.reparse();
}
return;
case EXPRESSION:
if (type == BaseSymbols.SEMICOLON) {
return;
}
if (ParserUtil.isIdentifier(type)) {
int nextType=token.next().type();
if (nextType == BaseSymbols.COLON) {
this.label=token.nameValue();
pm.skip();
return;
}
if (nextType == BaseSymbols.EQUALS) {
FieldAssignment fa=new FieldAssignment(token.raw(),null,token.nameValue());
pm.skip();
pm.pushParser(pm.newExpressionParser(fa));
this.setValue(fa);
this.mode=SEPARATOR;
return;
}
}
int i;
if ((i=ModifierTypes.MEMBER.parse(type)) != -1) {
this.modifiers|=i;
return;
}
if (type == DyvilSymbols.AT) {
if (this.annotations == null) {
this.annotations=new AnnotationList();
}
Annotation a=new Annotation(token.raw());
pm.pushParser(pm.newAnnotationParser(a));
this.annotations.addAnnotation(a);
return;
}
this.tryParser(pm,token,pm.newTypeParser(this));
this.mode=TYPE;
case TYPE:
if (ParserUtil.isIdentifier(type) && token.next().type() == BaseSymbols.EQUALS) {
if (this.type != null) {
Variable variable=new Variable(token.raw(),token.nameValue(),this.type);
variable.setModifiers(this.modifiers);
variable.setAnnotations(this.annotations);
FieldInitializer fi=new FieldInitializer(variable);
pm.pushParser(pm.newExpressionParser(variable));
this.setValue(fi);
}
 else if (token != this.firstToken) {
this.parser.parse(this,token);
pm.reparse();
return;
}
this.reset();
this.mode=SEPARATOR;
pm.skip();
return;
}
 else if (this.parser == null) {
pm.jump(this.firstToken);
this.reset();
pm.pushParser(pm.newExpressionParser(this));
this.mode=SEPARATOR;
return;
}
this.parser.parse(this,token);
return;
case SEPARATOR:
this.mode=EXPRESSION;
if (type == BaseSymbols.SEMICOLON) {
return;
}
if (token.prev().type() == BaseSymbols.CLOSE_CURLY_BRACKET) {
pm.reparse();
return;
}
if (type == 0) {
this.consumer.setValue(this.statementList);
pm.popParser();
pm.report(token,"String_Node_Str");
return;
}
pm.report(token,"String_Node_Str");
return;
}
}

Fixed version (ground truth):
@Override public void parse(IParserManager pm,IToken token){
  int type=token.type();
  if (type == BaseSymbols.CLOSE_CURLY_BRACKET) {
    if (this.firstToken != null) {
      pm.jump(this.firstToken);
      this.reset();
      pm.pushParser(pm.newExpressionParser(this));
      this.mode=0;
      return;
    }
    this.consumer.setValue(this.statementList);
    pm.popParser();
    return;
  }
switch (this.mode) {
case OPEN_BRACKET:
    this.mode=EXPRESSION;
  this.statementList=this.applied ? new Closure(token) : new StatementList(token);
if (type != BaseSymbols.OPEN_CURLY_BRACKET) {
  pm.report(token,"String_Node_Str");
  pm.reparse();
}
return;
case EXPRESSION:
if (type == BaseSymbols.SEMICOLON) {
return;
}
if (ParserUtil.isIdentifier(type)) {
int nextType=token.next().type();
if (nextType == BaseSymbols.COLON) {
this.label=token.nameValue();
pm.skip();
return;
}
if (nextType == BaseSymbols.EQUALS) {
FieldAssignment fa=new FieldAssignment(token.raw(),null,token.nameValue());
pm.skip();
pm.pushParser(pm.newExpressionParser(fa));
this.setValue(fa);
this.mode=SEPARATOR;
return;
}
}
int i;
if ((i=ModifierTypes.MEMBER.parse(type)) != -1) {
this.modifiers|=i;
return;
}
if (type == DyvilSymbols.AT) {
if (this.annotations == null) {
this.annotations=new AnnotationList();
}
Annotation a=new Annotation(token.raw());
pm.pushParser(pm.newAnnotationParser(a));
this.annotations.addAnnotation(a);
return;
}
this.tryParser(pm,token,pm.newTypeParser(this));
this.mode=TYPE;
case TYPE:
if (this.parser == null) {
this.revertExpression(pm);
return;
}
this.parser.parse(this,token);
return;
case VARIABLE_NAME:
if (ParserUtil.isIdentifier(type) && token.next().type() == BaseSymbols.EQUALS) {
Variable variable=new Variable(token.raw(),token.nameValue(),this.type);
variable.setModifiers(this.modifiers);
variable.setAnnotations(this.annotations);
FieldInitializer fi=new FieldInitializer(variable);
this.setValue(fi);
pm.skip();
pm.pushParser(pm.newExpressionParser(variable));
this.reset();
this.mode=SEPARATOR;
return;
}
this.revertExpression(pm);
return;
case SEPARATOR:
this.mode=EXPRESSION;
if (type == BaseSymbols.SEMICOLON) {
return;
}
if (token.prev().type() == BaseSymbols.CLOSE_CURLY_BRACKET) {
pm.reparse();
return;
}
if (type == 0) {
this.consumer.setValue(this.statementList);
pm.popParser();
pm.report(token,"String_Node_Str");
return;
}
pm.report(token,"String_Node_Str");
return;
}
}