Program: 98326
Project: 98326
Buggy source:
private Object evalConstraint(IStrategoTerm constraint,AbstractParseNode[] kids,Map<String,Object> env){
switch (constraint.getTermType()) {
case IStrategoTerm.INT:
{
      int i=Term.asJavaInt(constraint);
      return getSubtree(i,kids);
    }
case IStrategoTerm.STRING:
  String v=Term.asJavaString(constraint);
Object o=env.get(v);
if (o == null) throw new IllegalStateException("String_Node_Str" + v);
return o;
case IStrategoTerm.APPL:
IStrategoConstructor cons=Term.tryGetConstructor(constraint);
String consName=cons.getName();
if (consName.equals("String_Node_Str")) {
String num=Term.asJavaString(constraint.getSubterm(0));
int i=Integer.parseInt(num);
return i;
}
if (consName.equals("String_Node_Str")) {
String num=Term.asJavaString(constraint.getSubterm(0));
int i=Integer.parseInt(num);
return getSubtree(i,kids);
}
if (consName.equals("String_Node_Str") || consName.equals("String_Node_Str") || consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Integer i1=evalConstraint(constraint.getSubterm(0),kids,env,Integer.class);
Integer i2=evalConstraint(constraint.getSubterm(1),kids,env,Integer.class);
return binArithComp(consName,i1,i2);
}
if (consName.equals("String_Node_Str") || consName.equals("String_Node_Str") || consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Integer i1=evalConstraint(constraint.getSubterm(0),kids,env,Integer.class);
Integer i2=evalConstraint(constraint.getSubterm(1),kids,env,Integer.class);
return binArithOp(consName,i1,i2);
}
if (consName.equals("String_Node_Str") || consName.equals("String_Node_Str") || consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
AbstractParseNode n=evalConstraint(constraint.getSubterm(0),kids,env,AbstractParseNode.class);
return nodeSelector(consName,n);
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Boolean b1=evalConstraint(constraint.getSubterm(0),kids,env,Boolean.class);
if (b1 != NO_VALUE && b1) return true;
Boolean b2=evalConstraint(constraint.getSubterm(1),kids,env,Boolean.class);
return b2;
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Boolean b1=evalConstraint(constraint.getSubterm(0),kids,env,Boolean.class);
if (b1 != NO_VALUE && !b1) return false;
Boolean b2=evalConstraint(constraint.getSubterm(1),kids,env,Boolean.class);
return b2;
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
Boolean b1=evalConstraint(constraint.getSubterm(0),kids,env,Boolean.class);
if (b1 == NO_VALUE) return NO_VALUE;
return !b1;
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,3,consName);
ensureType(constraint.getSubterm(0),IStrategoString.class,constraint.getSubterm(0));
v=Term.asJavaString(constraint.getSubterm(0));
AbstractParseNode n=evalConstraint(constraint.getSubterm(1),kids,env,AbstractParseNode.class);
return checkAll(n,v,constraint,kids,env);
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
AbstractParseNode n=evalConstraint(constraint.getSubterm(0),kids,env,AbstractParseNode.class);
if (n == NO_VALUE) return NO_VALUE;
return n.getColumn();
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
AbstractParseNode n=evalConstraint(constraint.getSubterm(0),kids,env,AbstractParseNode.class);
if (n == NO_VALUE) return NO_VALUE;
return n.getLine();
}
throw new IllegalStateException("String_Node_Str" + consName);
default :
throw new IllegalStateException("String_Node_Str" + constraint);
}
}

Fixed version (ground truth):
private Object evalConstraint(IStrategoTerm constraint,AbstractParseNode[] kids,Map<String,Object> env){
switch (constraint.getTermType()) {
case IStrategoTerm.INT:
{
      int i=Term.asJavaInt(constraint);
      return getSubtree(i,kids);
    }
case IStrategoTerm.STRING:
  String v=Term.asJavaString(constraint);
Object o=env.get(v);
if (o == null) throw new IllegalStateException("String_Node_Str" + v);
return o;
case IStrategoTerm.APPL:
IStrategoConstructor cons=Term.tryGetConstructor(constraint);
String consName=cons.getName();
if (consName.equals("String_Node_Str")) {
String num=Term.asJavaString(constraint.getSubterm(0));
int i=Integer.parseInt(num);
return i;
}
if (consName.equals("String_Node_Str")) {
String num=Term.asJavaString(constraint.getSubterm(0));
int i=Integer.parseInt(num);
return getSubtree(i,kids);
}
if (consName.equals("String_Node_Str") || consName.equals("String_Node_Str") || consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Integer i1=evalConstraint(constraint.getSubterm(0),kids,env,Integer.class);
Integer i2=evalConstraint(constraint.getSubterm(1),kids,env,Integer.class);
return binArithComp(consName,i1,i2);
}
if (consName.equals("String_Node_Str") || consName.equals("String_Node_Str") || consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Integer i1=evalConstraint(constraint.getSubterm(0),kids,env,Integer.class);
Integer i2=evalConstraint(constraint.getSubterm(1),kids,env,Integer.class);
return binArithOp(consName,i1,i2);
}
if (consName.equals("String_Node_Str") || consName.equals("String_Node_Str") || consName.equals("String_Node_Str")|| consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
AbstractParseNode n=evalConstraint(constraint.getSubterm(0),kids,env,AbstractParseNode.class);
return nodeSelector(consName,n);
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Boolean b1=evalConstraint(constraint.getSubterm(0),kids,env,Boolean.class);
if (b1 != NO_VALUE && b1) return true;
Boolean b2=evalConstraint(constraint.getSubterm(1),kids,env,Boolean.class);
return b2;
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,2,consName);
Boolean b1=evalConstraint(constraint.getSubterm(0),kids,env,Boolean.class);
if (b1 != NO_VALUE && !b1) return false;
Boolean b2=evalConstraint(constraint.getSubterm(1),kids,env,Boolean.class);
return b2;
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
Boolean b1=evalConstraint(constraint.getSubterm(0),kids,env,Boolean.class);
if (b1 == NO_VALUE) return NO_VALUE;
return !b1;
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,3,consName);
ensureType(constraint.getSubterm(0),IStrategoString.class,constraint.getSubterm(0));
v=Term.asJavaString(constraint.getSubterm(0));
AbstractParseNode n=evalConstraint(constraint.getSubterm(1),kids,env,AbstractParseNode.class);
return checkAll(n,v,constraint.getSubterm(2),kids,env);
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
AbstractParseNode n=evalConstraint(constraint.getSubterm(0),kids,env,AbstractParseNode.class);
if (n == NO_VALUE) return NO_VALUE;
return n.getColumn();
}
if (consName.equals("String_Node_Str")) {
ensureChildCount(constraint,1,consName);
AbstractParseNode n=evalConstraint(constraint.getSubterm(0),kids,env,AbstractParseNode.class);
if (n == NO_VALUE) return NO_VALUE;
return n.getLine();
}
throw new IllegalStateException("String_Node_Str" + consName);
default :
throw new IllegalStateException("String_Node_Str" + constraint);
}
}