Program: 83701
Project: 83701
Buggy source:
@Override public void parse(IParserManager pm,IToken token) throws SyntaxError {
  int type=token.type();
  if (this.isInMode(NAME)) {
    if (type == Symbols.OPEN_PARENTHESIS) {
      TupleType tupleType=new TupleType();
      pm.pushParser(new TypeListParser(tupleType));
      this.type=tupleType;
      this.mode=TUPLE_END;
      return;
    }
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      this.arrayDimensions++;
      this.arrayDimensions2++;
      return;
    }
    if (type == Symbols.ARROW_OPERATOR) {
      LambdaType lt=new LambdaType();
      this.type=lt;
      pm.pushParser(new TypeParser(lt));
      this.mode=LAMBDA_END;
      return;
    }
    if (type == Keywords.VAR) {
      this.type=Types.UNKNOWN;
      this.mode=ARRAY_END;
      return;
    }
    if (ParserUtil.isIdentifier(type)) {
      if (token.next().type() == Symbols.OPEN_SQUARE_BRACKET) {
        this.type=new GenericType(token,token.nameValue());
        this.mode=GENERICS;
        return;
      }
      this.type=new Type(token,token.nameValue());
      this.mode=ARRAY_END;
      return;
    }
    if (type == Symbols.WILDCARD) {
      this.type=new WildcardType(token.raw());
      this.mode=WILDCARD_TYPE;
      return;
    }
    if (ParserUtil.isTerminator(type)) {
      pm.popParser(true);
      return;
    }
    throw new SyntaxError(token,"String_Node_Str" + token);
  }
  if (this.isInMode(TUPLE_END)) {
    this.end();
    pm.popParser();
    if (type == Symbols.CLOSE_PARENTHESIS) {
      if (token.next().type() == Symbols.ARROW_OPERATOR) {
        TupleType tupleType=(TupleType)this.type;
        this.type=new LambdaType(tupleType);
        this.mode=LAMBDA_TYPE;
        return;
      }
      this.type.expandPosition(token);
      return;
    }
    throw new SyntaxError(token,"String_Node_Str");
  }
  if (this.isInMode(LAMBDA_TYPE)) {
    pm.pushParser(new TypeParser((LambdaType)this.type));
    this.mode=LAMBDA_END;
    return;
  }
  if (this.isInMode(LAMBDA_END)) {
    this.type.expandPosition(token.prev());
    this.end();
    pm.popParser(true);
    return;
  }
  if (this.isInMode(ARRAY_END)) {
    if (this.arrayDimensions2 > 0) {
      if (type == Symbols.CLOSE_SQUARE_BRACKET) {
        this.arrayDimensions2--;
        if (this.arrayDimensions2 == 0) {
          this.type.expandPosition(token);
          this.end();
          pm.popParser();
          return;
        }
      }
      this.type.expandPosition(token.prev());
      this.end();
      pm.popParser(true);
      throw new SyntaxError(token.prev(),"String_Node_Str");
    }
    this.type.expandPosition(token.prev());
    this.end();
    pm.popParser(true);
    return;
  }
  if (this.isInMode(GENERICS)) {
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      pm.pushParser(new TypeListParser((GenericType)this.type));
      this.mode=GENERICS_END;
      return;
    }
    if (this.arrayDimensions2 > 0) {
      this.type.expandPosition(token.prev());
      this.end();
      pm.popParser(true);
      throw new SyntaxError(token.prev(),"String_Node_Str");
    }
    this.type.expandPosition(token.prev());
    this.end();
    pm.popParser(true);
    return;
  }
  if (this.isInMode(WILDCARD_TYPE)) {
    Name name=token.nameValue();
    if (this.boundMode == 0) {
      if (name == Name.lteq) {
        pm.pushParser(new TypeParser(this));
        this.boundMode=LOWER;
        return;
      }
      if (name == Name.gteq) {
        pm.pushParser(new TypeParser(this));
        this.boundMode=UPPER;
        return;
      }
    }
 else     if (this.boundMode == UPPER) {
      if (name == Name.amp) {
        pm.pushParser(new TypeParser(this));
        return;
      }
    }
    this.end();
    pm.popParser(true);
    return;
  }
  if (this.isInMode(GENERICS_END)) {
    this.end();
    pm.popParser();
    if (type == Symbols.CLOSE_SQUARE_BRACKET) {
      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 == NAME) {
    if (type == Symbols.OPEN_PARENTHESIS) {
      TupleType tupleType=new TupleType();
      pm.pushParser(new TypeListParser(tupleType));
      this.type=tupleType;
      this.mode=TUPLE_END;
      return;
    }
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      this.mode=ARRAY_END;
      ArrayType at=new ArrayType();
      this.type=at;
      pm.pushParser(new TypeParser(at));
      return;
    }
    if (type == Symbols.ARROW_OPERATOR) {
      LambdaType lt=new LambdaType();
      this.type=lt;
      pm.pushParser(new TypeParser(lt));
      this.mode=LAMBDA_END;
      return;
    }
    if (type == Keywords.VAR) {
      this.type=Types.UNKNOWN;
      this.mode=ARRAY_END;
      return;
    }
    if (ParserUtil.isIdentifier(type)) {
      if (token.next().type() == Symbols.OPEN_SQUARE_BRACKET) {
        this.type=new GenericType(token,token.nameValue());
        this.mode=GENERICS;
        return;
      }
      this.type=new Type(token.raw(),token.nameValue());
      this.typed.setType(this.type);
      pm.popParser();
      return;
    }
    if (type == Symbols.WILDCARD) {
      this.type=new WildcardType(token.raw());
      this.mode=WILDCARD_TYPE;
      return;
    }
    if (ParserUtil.isTerminator(type)) {
      pm.popParser(true);
      return;
    }
    throw new SyntaxError(token,"String_Node_Str" + token);
  }
  if (this.mode == TUPLE_END) {
    this.typed.setType(this.type);
    pm.popParser();
    if (type == Symbols.CLOSE_PARENTHESIS) {
      if (token.next().type() == Symbols.ARROW_OPERATOR) {
        TupleType tupleType=(TupleType)this.type;
        this.type=new LambdaType(tupleType);
        this.mode=LAMBDA_TYPE;
        return;
      }
      this.type.expandPosition(token);
      return;
    }
    throw new SyntaxError(token,"String_Node_Str");
  }
  if (this.mode == LAMBDA_TYPE) {
    pm.pushParser(new TypeParser((LambdaType)this.type));
    this.mode=LAMBDA_END;
    return;
  }
  if (this.mode == LAMBDA_END) {
    this.type.expandPosition(token.prev());
    this.typed.setType(this.type);
    pm.popParser(true);
    return;
  }
  if (this.mode == ARRAY_END) {
    this.type.expandPosition(token);
    this.typed.setType(this.type);
    pm.popParser();
    if (type == Symbols.CLOSE_SQUARE_BRACKET) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
  if (this.mode == GENERICS) {
    if (type == Symbols.OPEN_SQUARE_BRACKET) {
      pm.pushParser(new TypeListParser((GenericType)this.type));
      this.mode=GENERICS_END;
      return;
    }
    this.type.expandPosition(token.prev());
    this.typed.setType(this.type);
    pm.popParser(true);
    return;
  }
  if (this.mode == WILDCARD_TYPE) {
    Name name=token.nameValue();
    if (this.boundMode == 0) {
      if (name == Name.lteq) {
        pm.pushParser(new TypeParser(this));
        this.boundMode=LOWER;
        return;
      }
      if (name == Name.gteq) {
        pm.pushParser(new TypeParser(this));
        this.boundMode=UPPER;
        return;
      }
    }
 else     if (this.boundMode == UPPER) {
      if (name == Name.amp) {
        pm.pushParser(new TypeParser(this));
        return;
      }
    }
    this.typed.setType(this.type);
    pm.popParser(true);
    return;
  }
  if (this.mode == GENERICS_END) {
    this.typed.setType(this.type);
    pm.popParser();
    if (type == Symbols.CLOSE_SQUARE_BRACKET) {
      return;
    }
    throw new SyntaxError(token,"String_Node_Str",true);
  }
}