Program: 84597
Project: 84597
Buggy source:
@Override public void parse(IParserManager pm,IToken token) throws SyntaxError {
  int type=token.type();
  if (this.mode == MODIFIERS) {
    int i=0;
    if ((i=ModifierTypes.CLASS.parse(type)) != -1) {
      this.modifiers|=i;
      return;
    }
    if ((i=ModifierTypes.CLASS_TYPE.parse(type)) != -1) {
      this.modifiers|=i;
      this.mode=NAME;
      return;
    }
    if (token.nameValue() == Name.at) {
      Annotation annotation=new Annotation(token.raw());
      this.addAnnotation(annotation);
      pm.pushParser(new AnnotationParser(annotation));
      return;
    }
    throw new SyntaxError(token,"String_Node_Str" + token + "String_Node_Str");
  }
  if (this.mode == NAME) {
    if (ParserUtil.isIdentifier(type)) {
      this.theClass=new CodeClass(token.raw(),(IDyvilHeader)this.classList,this.modifiers);
      if (this.annotations != null) {
        this.theClass.setAnnotations(this.annotations,this.annotations.length);
      }
      this.theClass.setName(token.nameValue());
      this.mode=POST_NAME;
      return;
    }
    throw new SyntaxError(token,"String_Node_Str");
  }
  if (this.isInMode(GENERICS)) {
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      pm.pushParser(new TypeVariableListParser(this.theClass));
      this.theClass.setGeneric();
      this.mode=GENERICS_END;
      return;
    }
  }
  if (this.mode == GENERICS_END) {
    this.mode=POST_GENERICS;
    if (type == Symbols.CLOSE_SQUARE_BRACKET) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(PARAMETERS)) {
    if (type == Symbols.OPEN_PARENTHESIS) {
      pm.pushParser(new ParameterListParser(this.theClass));
      this.mode=PARAMETERS_END;
      return;
    }
  }
  if (this.mode == PARAMETERS_END) {
    this.mode=POST_PARAMETERS;
    if (type == Symbols.CLOSE_PARENTHESIS) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(EXTENDS)) {
    if (type == Keywords.EXTENDS) {
      if (this.theClass.hasModifier(Modifiers.INTERFACE_CLASS)) {
        pm.pushParser(new TypeListParser(this));
        this.mode=BODY;
        return;
      }
      pm.pushParser(new TypeParser(this));
      this.mode=POST_EXTENDS;
      return;
    }
  }
  if (this.isInMode(IMPLEMENTS)) {
    if (type == Keywords.IMPLEMENTS) {
      pm.pushParser(new TypeListParser(this));
      this.mode=BODY;
      if (this.theClass.hasModifier(Modifiers.INTERFACE_CLASS)) {
        throw new SyntaxError(token,"String_Node_Str");
      }
      return;
    }
  }
  if (this.isInMode(BODY)) {
    if (type == Symbols.OPEN_CURLY_BRACKET) {
      IClassBody body=new ClassBody(this.theClass);
      this.theClass.setBody(body);
      pm.pushParser(new ClassBodyParser(this.theClass,body));
      this.mode=BODY_END;
      return;
    }
    if (ParserUtil.isTerminator(type)) {
      if (token.isInferred()) {
        int nextType=token.next().type();
switch (nextType) {
case Keywords.EXTENDS:
          this.mode=EXTENDS;
        return;
case Keywords.IMPLEMENTS:
      this.mode=IMPLEMENTS;
    return;
case Symbols.OPEN_SQUARE_BRACKET:
  this.mode=GENERICS;
return;
case Symbols.OPEN_PARENTHESIS:
this.mode=PARAMETERS;
return;
}
}
pm.popParser();
this.classList.addClass(this.theClass);
return;
}
throw new SyntaxError(token,"String_Node_Str",true);
}
if (this.mode == BODY_END) {
if (type == Symbols.CLOSE_CURLY_BRACKET) {
pm.popParser();
this.classList.addClass(this.theClass);
return;
}
throw new SyntaxError(token,"String_Node_Str",true);
}
}

Fixed version (ground truth):
@Override public void parse(IParserManager pm,IToken token) throws SyntaxError {
  int type=token.type();
  if (this.mode == MODIFIERS) {
    int i=0;
    if ((i=ModifierTypes.CLASS.parse(type)) != -1) {
      this.modifiers|=i;
      return;
    }
    if ((i=ModifierTypes.CLASS_TYPE.parse(type)) != -1) {
      this.modifiers|=i;
      this.mode=NAME;
      return;
    }
    if (token.nameValue() == Name.at) {
      Annotation annotation=new Annotation(token.raw());
      this.addAnnotation(annotation);
      pm.pushParser(new AnnotationParser(annotation));
      return;
    }
    throw new SyntaxError(token,"String_Node_Str" + token + "String_Node_Str");
  }
  if (this.mode == NAME) {
    if (ParserUtil.isIdentifier(type)) {
      this.theClass=new CodeClass(token.raw(),(IDyvilHeader)this.classList,this.modifiers);
      if (this.annotations != null) {
        this.theClass.setAnnotations(this.annotations,this.annotations.length);
      }
      this.theClass.setName(token.nameValue());
      this.mode=POST_NAME;
      return;
    }
    throw new SyntaxError(token,"String_Node_Str");
  }
  if (this.isInMode(GENERICS)) {
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      pm.pushParser(new TypeVariableListParser(this.theClass));
      this.theClass.setGeneric();
      this.mode=GENERICS_END;
      return;
    }
  }
  if (this.mode == GENERICS_END) {
    this.mode=POST_GENERICS;
    if (type == Symbols.CLOSE_SQUARE_BRACKET) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(PARAMETERS)) {
    if (type == Symbols.OPEN_PARENTHESIS) {
      pm.pushParser(new ParameterListParser(this.theClass));
      this.mode=PARAMETERS_END;
      return;
    }
  }
  if (this.mode == PARAMETERS_END) {
    this.mode=POST_PARAMETERS;
    if (type == Symbols.CLOSE_PARENTHESIS) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.isInMode(EXTENDS)) {
    if (type == Keywords.EXTENDS) {
      if (this.theClass.hasModifier(Modifiers.INTERFACE_CLASS)) {
        pm.pushParser(new TypeListParser(this));
        this.mode=BODY;
        return;
      }
      pm.pushParser(new TypeParser(this));
      this.mode=POST_EXTENDS;
      return;
    }
  }
  if (this.isInMode(IMPLEMENTS)) {
    if (type == Keywords.IMPLEMENTS) {
      pm.pushParser(new TypeListParser(this));
      this.mode=BODY;
      if (this.theClass.hasModifier(Modifiers.INTERFACE_CLASS)) {
        throw new SyntaxError(token,"String_Node_Str");
      }
      return;
    }
  }
  if (this.isInMode(BODY)) {
    if (type == Symbols.OPEN_CURLY_BRACKET) {
      IClassBody body=new ClassBody(this.theClass);
      this.theClass.setBody(body);
      pm.pushParser(new ClassBodyParser(this.theClass,body));
      this.mode=BODY_END;
      return;
    }
    if (ParserUtil.isTerminator(type)) {
      if (token.isInferred()) {
        int nextType=token.next().type();
switch (nextType) {
case Keywords.EXTENDS:
          this.mode=EXTENDS;
        return;
case Keywords.IMPLEMENTS:
      this.mode=IMPLEMENTS;
    return;
case Symbols.OPEN_SQUARE_BRACKET:
  this.mode=GENERICS;
return;
case Symbols.OPEN_PARENTHESIS:
this.mode=PARAMETERS;
return;
}
}
pm.popParser();
this.classList.addClass(this.theClass);
return;
}
this.mode=BODY_END;
throw new SyntaxError(token,"String_Node_Str");
}
if (this.mode == BODY_END) {
if (type == Symbols.CLOSE_CURLY_BRACKET) {
pm.popParser();
this.classList.addClass(this.theClass);
return;
}
throw new SyntaxError(token,"String_Node_Str",true);
}
}