argTypes[argTypes.length-1] = JavaTypeNames.RTEXECUTION_CONTEXT;
String fMethodName = functions.getFnNamePrefix(mf.getName()) + "f" + mf.getArity() + "S";
MethodInvocation fn = new MethodInvocation.Instance (functionField, fMethodName, args, argTypes, JavaTypeNames.RTVALUE, MethodInvocation.InvocationType.VIRTUAL);
MethodInvocation setResult = new MethodInvocation.Instance (null, "setResult", fn, JavaTypeNames.RTVALUE, JavaTypeName.VOID, MethodInvocation.InvocationType.VIRTUAL);
then.addStatement(new ExpressionStatement(setResult));
//call clearMembers(). We don't need to do this for tail recursive functions since clearMembers() will be called as
//a result of setting the root node above.
if (!mf.isTailRecursive()) {
then.addStatement(new ExpressionStatement(new MethodInvocation.Instance(null, "clearMembers", JavaTypeName.VOID, MethodInvocation.InvocationType.VIRTUAL)));
}
reduce.addStatement(new IfThenElseStatement(condition, then));
reduce.addStatement(new ReturnStatement(resultField));