Program: 84632
Project: 84632
Buggy source:
private void getAccess(IParserManager pm,Name name,IToken token,int type) throws SyntaxError {
  IToken next=token.next();
  int nextType=next.type();
  if (nextType == Symbols.OPEN_PARENTHESIS) {
    MethodCall call=new MethodCall(token.raw(),this.value,name);
    call.dotless=this.dotless;
    this.value=call;
    this.mode=PARAMETERS_END;
    pm.skip();
    call.setArguments(this.getArguments(pm,next.next()));
    return;
  }
  if (nextType == Symbols.OPEN_SQUARE_BRACKET) {
    SubscriptGetter getter=new SubscriptGetter(token,new FieldAccess(token.raw(),this.value,name));
    this.value=getter;
    this.mode=SUBSCRIPT_END;
    pm.skip();
    pm.pushParser(new ExpressionListParser(getter.getArguments()));
    return;
  }
  if (nextType == Symbols.ARROW_OPERATOR) {
    LambdaExpression lv=new LambdaExpression(next.raw(),name);
    this.mode=0;
    this.value=lv;
    pm.pushParser(new ExpressionParser(lv));
    pm.skip();
    return;
  }
  if (nextType == Symbols.GENERIC_CALL) {
    MethodCall mc=new MethodCall(token.raw(),this.value,token.nameValue());
    GenericData gd=new GenericData();
    mc.setGenericData(gd);
    mc.dotless=this.dotless;
    this.value=mc;
    this.mode=TYPE_ARGUMENTS_END;
    pm.skip();
    pm.pushParser(new TypeListParser(gd));
    return;
  }
  Operator op=pm.getOperator(name);
  if (op != null) {
    if (this.value == null || op.type == Operator.PREFIX) {
      MethodCall call=new MethodCall(token,null,name);
      SingleArgument sa=new SingleArgument();
      call.arguments=sa;
      call.dotless=this.dotless;
      this.value=call;
      this.mode=ACCESS;
      ExpressionParser parser=new ExpressionParser(sa);
      parser.operator=op;
      parser.prefix=true;
      pm.pushParser(parser);
      return;
    }
    MethodCall call=new MethodCall(token,this.value,name);
    this.value=call;
    this.mode=ACCESS;
    call.dotless=this.dotless;
    if (op.type != Operator.POSTFIX) {
      SingleArgument sa=new SingleArgument();
      call.arguments=sa;
      ExpressionParser parser=new ExpressionParser(sa);
      parser.operator=op;
      pm.pushParser(parser);
    }
    return;
  }
  if (!name.qualified.endsWith("String_Node_Str")) {
    if (ParserUtil.isTerminator2(nextType)) {
      FieldAccess access=new FieldAccess(token,this.value,name);
      access.dotless=this.dotless;
      this.value=access;
      this.mode=ACCESS;
      return;
    }
    if (ParserUtil.isIdentifier(nextType)) {
      if (ParserUtil.isOperator(pm,next,nextType) || !ParserUtil.isTerminator2(next.next().type())) {
        FieldAccess access=new FieldAccess(token,this.value,name);
        access.dotless=this.dotless;
        this.value=access;
        this.mode=ACCESS;
        return;
      }
    }
  }
  MethodCall call=new MethodCall(token,this.value,name);
  this.value=call;
  this.mode=ACCESS;
  call.dotless=this.dotless;
  SingleArgument sa=new SingleArgument();
  call.arguments=sa;
  ExpressionParser parser=new ExpressionParser(sa);
  parser.operator=op;
  pm.pushParser(parser);
  return;
}

Fixed version (ground truth):
private void getAccess(IParserManager pm,Name name,IToken token,int type) throws SyntaxError {
  IToken next=token.next();
  int nextType=next.type();
  if (nextType == Symbols.OPEN_PARENTHESIS) {
    MethodCall call=new MethodCall(token.raw(),this.value,name);
    call.dotless=this.dotless;
    this.value=call;
    this.mode=PARAMETERS_END;
    pm.skip();
    call.setArguments(this.getArguments(pm,next.next()));
    return;
  }
  if (nextType == Symbols.OPEN_SQUARE_BRACKET) {
    SubscriptGetter getter=new SubscriptGetter(token,new FieldAccess(token.raw(),this.value,name));
    this.value=getter;
    this.mode=SUBSCRIPT_END;
    pm.skip();
    pm.pushParser(new ExpressionListParser(getter.getArguments()));
    return;
  }
  if (nextType == Symbols.ARROW_OPERATOR) {
    LambdaExpression lv=new LambdaExpression(next.raw(),name);
    this.mode=0;
    this.value=lv;
    pm.pushParser(new ExpressionParser(lv));
    pm.skip();
    return;
  }
  if (nextType == Symbols.GENERIC_CALL) {
    MethodCall mc=new MethodCall(token.raw(),this.value,token.nameValue());
    GenericData gd=new GenericData();
    mc.setGenericData(gd);
    mc.dotless=this.dotless;
    this.value=mc;
    this.mode=TYPE_ARGUMENTS_END;
    pm.skip();
    pm.pushParser(new TypeListParser(gd));
    return;
  }
  Operator op=pm.getOperator(name);
  if (op != null) {
    if (this.value == null || op.type == Operator.PREFIX) {
      MethodCall call=new MethodCall(token,null,name);
      SingleArgument sa=new SingleArgument();
      call.arguments=sa;
      call.dotless=this.dotless;
      this.value=call;
      this.mode=ACCESS;
      ExpressionParser parser=new ExpressionParser(sa);
      parser.operator=op;
      parser.prefix=true;
      pm.pushParser(parser);
      return;
    }
    MethodCall call=new MethodCall(token,this.value,name);
    this.value=call;
    this.mode=ACCESS;
    call.dotless=this.dotless;
    if (op.type != Operator.POSTFIX && !ParserUtil.isTerminator2(nextType)) {
      SingleArgument sa=new SingleArgument();
      call.arguments=sa;
      ExpressionParser parser=new ExpressionParser(sa);
      parser.operator=op;
      pm.pushParser(parser);
    }
    return;
  }
  if (!name.qualified.endsWith("String_Node_Str")) {
    if (ParserUtil.isTerminator2(nextType)) {
      FieldAccess access=new FieldAccess(token,this.value,name);
      access.dotless=this.dotless;
      this.value=access;
      this.mode=ACCESS;
      return;
    }
    if (ParserUtil.isIdentifier(nextType)) {
      if (ParserUtil.isOperator(pm,next,nextType) || !ParserUtil.isTerminator2(next.next().type())) {
        FieldAccess access=new FieldAccess(token,this.value,name);
        access.dotless=this.dotless;
        this.value=access;
        this.mode=ACCESS;
        return;
      }
    }
  }
  MethodCall call=new MethodCall(token,this.value,name);
  this.value=call;
  this.mode=ACCESS;
  call.dotless=this.dotless;
  SingleArgument sa=new SingleArgument();
  call.arguments=sa;
  ExpressionParser parser=new ExpressionParser(sa);
  parser.operator=op;
  pm.pushParser(parser);
  return;
}