Program: 51401
Project: 51401
Buggy source:
protected FunDef createFunDef(Exp[] args,FunDef dummyFunDef){
  return new FunDefBase(dummyFunDef){
    public void unparse(    Exp[] args,    PrintWriter pw){
      pw.print(getName());
      pw.print("String_Node_Str");
      args[0].unparse(pw);
      pw.print("String_Node_Str");
    }
    public Calc compileCall(    ResolvedFunCall call,    ExpCompiler compiler){
      final HierarchyCalc hierarchyCalc=compiler.compileHierarchy(call.getArg(0));
      final Calc valueCalc=new ValueCalc(call);
      return new AbstractCalc(call){
        public Object evaluate(        Evaluator evaluator){
          Hierarchy hierarchy=hierarchyCalc.evaluateHierarchy(evaluator);
          return aggregateChildren(evaluator,hierarchy,valueCalc);
        }
        public Calc[] getCalcs(){
          return new Calc[]{hierarchyCalc,valueCalc};
        }
      }
;
    }
    Object aggregateChildren(    Evaluator evaluator,    Hierarchy hierarchy,    final Calc valueFunCall){
      Member member=evaluator.getParent().getContext(hierarchy.getDimension());
      List members=(List)member.getPropertyValue(Property.CONTRIBUTING_CHILDREN.name);
      Aggregator aggregator=(Aggregator)evaluator.getProperty(Property.AGGREGATION_TYPE.name,null);
      if (aggregator == null) {
        throw FunUtil.newEvalException(null,"String_Node_Str");
      }
      Aggregator rollup=aggregator.getRollup();
      if (rollup == null) {
        throw FunUtil.newEvalException(null,"String_Node_Str" + aggregator + "String_Node_Str");
      }
      return rollup.aggregate(evaluator.push(),members,valueFunCall);
    }
  }
;
}

Fixed version (ground truth):
protected FunDef createFunDef(Exp[] args,FunDef dummyFunDef){
  return new FunDefBase(dummyFunDef){
    public void unparse(    Exp[] args,    PrintWriter pw){
      pw.print(getName());
      pw.print("String_Node_Str");
      args[0].unparse(pw);
      pw.print("String_Node_Str");
    }
    public Calc compileCall(    ResolvedFunCall call,    ExpCompiler compiler){
      final HierarchyCalc hierarchyCalc=compiler.compileHierarchy(call.getArg(0));
      final Calc valueCalc=new ValueCalc(call);
      return new GenericCalc(call){
        public Object evaluate(        Evaluator evaluator){
          Hierarchy hierarchy=hierarchyCalc.evaluateHierarchy(evaluator);
          return aggregateChildren(evaluator,hierarchy,valueCalc);
        }
        public Calc[] getCalcs(){
          return new Calc[]{hierarchyCalc,valueCalc};
        }
      }
;
    }
    Object aggregateChildren(    Evaluator evaluator,    Hierarchy hierarchy,    final Calc valueFunCall){
      Member member=evaluator.getParent().getContext(hierarchy.getDimension());
      List members=(List)member.getPropertyValue(Property.CONTRIBUTING_CHILDREN.name);
      Aggregator aggregator=(Aggregator)evaluator.getProperty(Property.AGGREGATION_TYPE.name,null);
      if (aggregator == null) {
        throw FunUtil.newEvalException(null,"String_Node_Str");
      }
      Aggregator rollup=aggregator.getRollup();
      if (rollup == null) {
        throw FunUtil.newEvalException(null,"String_Node_Str" + aggregator + "String_Node_Str");
      }
      return rollup.aggregate(evaluator.push(),members,valueFunCall);
    }
  }
;
}