for (int i=parents.length-1; i>=-1; i--) {
for (int i=parents.length-2; i>=-1; i--) {
    private JExpression makeLeafWorkArgument(SIROperator str,					     SIRStream toplevel) {	// get parents of <str>	SIRStream parents[] = str.getParents();	// construct result expression	JExpression result = LoweringConstants.getDataField();	// go through parents from top to bottom, building up the	// field access expression.	for (int i=parents.length-1; i>=-1; i--) {	    // get the child of interest (either the next parent,	    // or <str>)	    SIROperator child = (i>=0 ? parents[i] : str);	    // get field name for child context	    String childName = child.getRelativeName();	    //System.err.println("relative name on child " + i + ": " +	    //	       childName);	    // build up cascaded field reference	    result = new JFieldAccessExpression(/* tokref */						null,						/* prefix is previous ref*/						result,						/* ident */						childName);	}	// if we have a splitter or joiner, then the argument should	// be to the context instead of just to the data structure, so	// append a reference to the context	if (str instanceof SIRSplitter || str instanceof SIRJoiner) {	    result = new JFieldAccessExpression(/* tokref */						null,						/* prefix is previous ref*/						result,						/* ident */						LoweringConstants.						CONTEXT_VAR_NAME);	}	return result;    }