JIntLiteral peekOffsetNode = new JIntLiteral(i);
JIntLiteral peekOffsetNode = new JIntLiteral(j);
    public Vector makePushStatementVector(LinearFilterRepresentation representation,					   CType inputType,					   CType outputType) {	Vector returnVector = new Vector();	int peekCount = representation.getPeekCount();	int pushCount = representation.getPushCount();	// for each output value (eg push count), construct push expression	for (int i = 0; i < pushCount; i++) {	    // the first push will have index pushCount, etc.	    int currentPushIndex = pushCount - 1 - i;	    	    // go through each of the elements in this column of the matrix. If the element	    // is non zero, then we want to produce a peek(index)*weight term (which we will then add together).	    // Currently bomb out if we have a non real number (no way to generate non-reals at the present).	    Vector combinationExpressions = new Vector();	    // a note about indexes: the matrix [[0] [1] [2]] implies peek(0)*2 + peek(1)*1 + peek(2)*0.	    for (int j = 0; j < peekCount; j++) {		int currentPeekIndex = peekCount - 1 - j;		ComplexNumber currentWeight = representation.getA().getElement(currentPeekIndex,									       currentPushIndex);		// if we have a non real number, bomb Mr. Exception		if (!currentWeight.isReal()) {		    throw new RuntimeException("Direct implementation with complex " +					       "numbers is not yet implemented.");		}		// if we have a non zero weight...		if (!(currentWeight.equals(ComplexNumber.ZERO))) {		    // make an integer IR node for the current weight		    JDoubleLiteral weightNode = new JDoubleLiteral(null, currentWeight.getReal());		    // make an integer IR node for the appropriate peek index (peek (0) corresponds to		    // to the array row of  at peekSize-1		    JIntLiteral peekOffsetNode = new JIntLiteral(i);		    // make a peek expression with the appropriate index		    SIRPeekExpression peekNode = new SIRPeekExpression(peekOffsetNode, inputType);		    // make a JMultExpression with weight*peekExpression		    JMultExpression multNode = new JMultExpression(null,        // tokenReference								   weightNode,  // left								   peekNode);   // right		    combinationExpressions.add(multNode);		}		// now, we need to create the appropriate constant to represent the offset		ComplexNumber currentOffset = representation.getb().getElement(currentPushIndex);		if (!currentOffset.isReal()) {throw new RuntimeException("Non real complex number in offset vector");}		JDoubleLiteral offsetNode = new JDoubleLiteral(null, currentOffset.getReal());				// now we have all of the combination nodes and the offset node.		// What we want to do is to is to combine them all together using addition.		// To do this, we create an add expression tree expanding downward to the right as we go.		JExpression pushArgument;		// if no combination expressions, then the push arg is only the offset		if (combinationExpressions.size() == 0) {		    // if we have no combination expressions, it means we should simply output a zero		    pushArgument = offsetNode;		} else {		    // combination expressions need to be nested.		    // Start with the right most node		    int numCombos = combinationExpressions.size();		    pushArgument = new JAddExpression(null, // tokenReference						      ((JExpression)combinationExpressions.get(numCombos-1)), // left						      offsetNode); // right		    // now, for all of the other combinations, make new add nodes with the		    // comb. exprs as the left argument and the current add expr as the right		    // argument.		    for (int k=1; k<numCombos; k++) {			pushArgument = new JAddExpression(null, // tokenReference,							  ((JExpression)combinationExpressions.get(numCombos-k)), // left							  pushArgument); // right (use the previous expression)		    }		}		// now, armed with the appropriate push argument, we can		// simply generate the appropriate push expression and stick it in our list.		SIRPushExpression pushExpr = new SIRPushExpression(pushArgument, // arg								   outputType); // output tape type (eg push type)		// wrap the push expression in a expression statement		JExpressionStatement pushWrapper = new JExpressionStatement(null, // tokenReference									    pushExpr, // expr									    new JavaStyleComment[0]); // comments		returnVector.add(pushWrapper);	    }	}	return returnVector;    }