Program: 40786
Project: 40786
Buggy source:
protected boolean visitAssignNodes(CAstNode n,Context context,CAstNode v,CAstNode a,CAstVisitor visitor){
  int NT=a.getKind();
  boolean assign=NT == CAstNode.ASSIGN;
  boolean preOp=NT == CAstNode.ASSIGN_PRE_OP;
switch (n.getKind()) {
case CAstNode.ARRAY_REF:
{
      return doVisitArrayRefNode(n,v,a,assign,preOp,context,visitor);
    }
case CAstNode.OBJECT_REF:
{
    if (assign ? visitor.visitObjectRefAssign(n,v,a,context,visitor) : visitor.visitObjectRefAssignOp(n,v,a,preOp,context,visitor))     return true;
    visitor.visit(n.getChild(0),context,visitor);
    if (assign)     visitor.leaveObjectRefAssign(n,v,a,context,visitor);
 else     visitor.leaveObjectRefAssignOp(n,v,a,preOp,context,visitor);
    break;
  }
case CAstNode.BLOCK_EXPR:
{
  if (assign ? visitor.visitBlockExprAssign(n,v,a,context,visitor) : visitor.visitBlockExprAssignOp(n,v,a,preOp,context,visitor))   return true;
  if (visitor.visitAssignNodes(n.getChild(n.getChildCount() - 1),context,v,a,visitor))   return true;
  if (assign)   visitor.leaveBlockExprAssign(n,v,a,context,visitor);
 else   visitor.leaveBlockExprAssignOp(n,v,a,preOp,context,visitor);
  break;
}
case CAstNode.VAR:
{
if (assign ? visitor.visitVarAssign(n,v,a,context,visitor) : visitor.visitVarAssignOp(n,v,a,preOp,context,visitor)) return true;
if (assign) visitor.leaveVarAssign(n,v,a,context,visitor);
 else visitor.leaveVarAssignOp(n,v,a,preOp,context,visitor);
break;
}
default :
{
if (!visitor.doVisitAssignNodes(n,context,v,a,visitor)) {
Trace.println("String_Node_Str" + n.getKind());
throw new UnsupportedOperationException("String_Node_Str" + CAstPrinter.print(a,context.top().getSourceMap()));
}
}
}
return false;
}

Fixed version (ground truth):
protected boolean visitAssignNodes(CAstNode n,Context context,CAstNode v,CAstNode a,CAstVisitor visitor){
  int NT=a.getKind();
  boolean assign=NT == CAstNode.ASSIGN;
  boolean preOp=NT == CAstNode.ASSIGN_PRE_OP;
switch (n.getKind()) {
case CAstNode.ARRAY_REF:
{
      if (doVisitArrayRefNode(n,v,a,assign,preOp,context,visitor)) {
        return true;
      }
      break;
    }
case CAstNode.OBJECT_REF:
{
    if (assign ? visitor.visitObjectRefAssign(n,v,a,context,visitor) : visitor.visitObjectRefAssignOp(n,v,a,preOp,context,visitor))     return true;
    visitor.visit(n.getChild(0),context,visitor);
    if (assign)     visitor.leaveObjectRefAssign(n,v,a,context,visitor);
 else     visitor.leaveObjectRefAssignOp(n,v,a,preOp,context,visitor);
    break;
  }
case CAstNode.BLOCK_EXPR:
{
  if (assign ? visitor.visitBlockExprAssign(n,v,a,context,visitor) : visitor.visitBlockExprAssignOp(n,v,a,preOp,context,visitor))   return true;
  if (visitor.visitAssignNodes(n.getChild(n.getChildCount() - 1),context,v,a,visitor))   return true;
  if (assign)   visitor.leaveBlockExprAssign(n,v,a,context,visitor);
 else   visitor.leaveBlockExprAssignOp(n,v,a,preOp,context,visitor);
  break;
}
case CAstNode.VAR:
{
if (assign ? visitor.visitVarAssign(n,v,a,context,visitor) : visitor.visitVarAssignOp(n,v,a,preOp,context,visitor)) return true;
if (assign) visitor.leaveVarAssign(n,v,a,context,visitor);
 else visitor.leaveVarAssignOp(n,v,a,preOp,context,visitor);
break;
}
default :
{
if (!visitor.doVisitAssignNodes(n,context,v,a,visitor)) {
Trace.println("String_Node_Str" + n.getKind());
throw new UnsupportedOperationException("String_Node_Str" + CAstPrinter.print(a,context.top().getSourceMap()));
}
}
}
return false;
}