if (inExpressionStatement) {   JExpression lhs = new JFieldAccessExpression(popIndexName); JExpression rhs = new JBitwiseExpression(OPE_BAND, new JAddExpression(new JFieldAccessExpression( popIndexName), new JIntLiteral(self.getNumPop())), new JIntLiteral(curInfo.bufferSize - 1)); return new JAssignmentExpression(lhs, rhs); }
	public Object visitPopExpression(SIRPopExpression self,					 CType tapeType) {	    // leave it alone not fusing reads	    if (!fuseReads) {		return super.visitPopExpression(self, tapeType);	    }	    // get relevant names	    String bufferName = curInfo.buffer.getVariable().getIdent();	    String popIndexName = curInfo.popIndex.getVariable().getIdent();	    // build ref to buffer	    JExpression lhs = new JFieldAccessExpression(bufferName);	    // build index	    JExpression rhs = new JFieldAccessExpression(popIndexName);	    // return a new array access expression	    JExpression result = new JArrayAccessExpression(lhs, rhs);	    // add increment expression to pending statements	    lhs = new JFieldAccessExpression(popIndexName);	    // (pop_index + 1) & (buffer_size-1)	    rhs = new JBitwiseExpression(OPE_BAND,					 new JAddExpression(new JFieldAccessExpression(popIndexName),							    new JIntLiteral(1)),					 new JIntLiteral(curInfo.bufferSize-1));	    addPendingStatement(new JExpressionStatement(new JAssignmentExpression(lhs, rhs)));	    return result;	}